TL; DR 在iOS设备上使用FFmpeg编写片段时,我想将fMP4片段转换为TS片段(用于HLS)。 为什么? 我试图在iOS上实现实时上传,同时在本地维护一个无缝的高清副本。 我试过了 滚动AVAssetWriter s每个写8秒,然后通过FFmpeg将MP4连接在一起。 出了什么问题 – 有时audio和video中会出现闪烁的声音。 我已经确定了3个原因。 1)为由AAC编码器写入的audio起始帧创build间隙。 2)由于video帧长度为33.33ms,audio帧长度为0.022ms,因此在文件末尾可能不排队。 3)在Mac OS上缺less帧精确的编码,但不适用于iOS 细节 FFmpeg将一个只有MP4video的原始audio文件转换成TS段。 该工作基于Kickflip SDK 什么错了 – 每隔一段时间只有一个audio文件将上传,没有任何video。 永远不能在内部重现它,但是当我们的用户没有logging他们认为他们做了什么的时候,它是非常令人不快的。 在最后的细分市场上也存在着准确的寻找问题,就像TS细分市场的时间戳错误一样。 我现在在想什么 苹果公司今年(2016年)在WWDC上推出了fMP4,在此之前我没有多less关注过它。 由于fMP4文件可以被读取,并且在写入的时候被播放,所以我认为FFmpeg也可以在文件被写入的时候进行转码,只要我们不要发送字节到FFmpeg,直到每个片段该文件完成。 不过,我对FFmpeg C API不够熟悉,我在第二次尝试中只使用了它。 我需要你的东西 这是一个可行的解决scheme? 是否有人熟悉fMP4知道我能否真的做到这一点? 我将如何知道AVFoundation已经完成在文件中写入一个片段,以便我可以将其pipe理到FFmpeg? 我怎样才能从磁盘上的文件,一次一块,传递到FFmpeg,并吐出TS段?