ffmpeg拉取rtmp流报错,无法解码苹果12以上设备的直播流,如何解决?

问题描述:在非ios的任意设备上,用ffmpeg指令ffmpeg -i "rtmp://" -c copy a.ts拉流保存某直播平台的任意rtmp直播流,如果对方使用的是苹果12以上的设备直播,就会出现报错“Video codec (c) is not implemented. Update your FFmpeg version to the newest one from Git. If the - problem still occurs, it means that your file has a feature which has not been implemented.”而安卓和苹果11往下的设备则可以正常拉取。如何在非ios设备上解决这个问题?

个人猜想:有可能是苹果12以后的设备增加了杜比视界拍摄功能,而直播平台也迎合了这一功能的开发,导致目前的ffmpeg版本无法正常解码。至于在苹果12以上设备使用ffmpeg能否正常解码拉流保存,本人因没有相关设备也无法验证。

我的思路:已知用mp4、flv等之类的视频格式拉流会直接报错中断。而ts格式拉流可以将流保存,只是有声音没有画面,并且看不到视频流信息,但是内存容量却是正常视频的大小。用普通ffmpeg格式转换指令将ts视频转换成其他视频格式依旧有声音没画面,而且内存容量也缩小到正常声音的大小。会不会有一种ffmpeg指令可以将这个ts视频转换成可以播放的正常视频?

到底在非ios平台以目前的ffmpeg版本(5.1.2)如何解决这个问题呢?或者有比ffmpeg更好的解决方案??

可以的,因为他属于是rp的流,可以的


在 FFmpeg 转换期间,您可以选择音频和视频流究竟应该发生什么。

ffmpeg -i input.ts -c:v libx264 -c:a copy -map 0:v -map 0:a:0 -map 0:a:1 output.mp4
上面的示例仅将视频转换为 h264 并复制音频流。这些-map命令告诉 FFmpeg 你有多少个输出流。第一张地图是您的视频。-map 0:a:0告诉 FFmpeg 从第一个输入文件(第一个 0)使用第一个音频流(a:0)。要添加第二个音频流,只需添加一个附加映射命令-map 0:a:1(第二个音频为 a:1)。

如果您现在想重新混合内容:

ffmpeg -i original.ts -i converted.mp4 -c:v copy -c:a copy -map 1:v -map 0:a:0 -map 0:a:1 output.mp4
上面的命令未经测试,但应该可以工作。