TL;博士
我想将 fMP4 片段转换为 TS 片段(用于 HLS),因为片段是在 iOS 设备上使用 FFmpeg 编写的。
为什么?
我正在尝试在 iOS 上实现实时上传,同时在本地保持无缝的高清副本。
我试过的
滚动
AVAssetWriter
s 每个写入 8 秒,然后通过 FFmpeg 将 MP4 连接在一起。出了什么问题- 音频和视频中有时会出现问题。我已经确定了 3 个原因。
1) 为 AAC 编码器写入的音频启动帧,从而产生间隙。
2) 由于视频帧长 33.33 毫秒,音频帧长 0.022 毫秒,因此它们可能不会在文件末尾排队。
3) Mac OS 上缺少帧精确编码,但不适用于 iOS详细信息在此处
FFmpeg 将带有原始音频的大视频 MP4 文件混合到 TS 段中。这项工作基于Kickflip SDK
出了什么问题 - 每隔一段时间就会上传一个只有音频的文件,没有任何视频。永远无法在内部重现它,但是当我们的用户没有记录他们认为自己做了什么时,这让他们非常沮丧。最终片段的准确搜索也存在问题,几乎就像 TS 片段被错误地标记了时间戳一样。
我现在在想什么
Apple 在今年(2016 年)的 WWDC 上推出了 fMP4,在那之前我并没有过多地研究它。由于 fMP4 文件可以在写入时被读取和播放,我认为 FFmpeg 也可以在文件写入时对其进行转码,只要我们推迟将字节发送到 FFmpeg 直到其中的每个片段文件完成。
但是,我对 FFmpeg C API 不够熟悉,我只在尝试 #2 中短暂使用过它。
我需要你什么
- 这是一个可行的解决方案吗?是否有人对 fMP4 足够熟悉,知道我是否真的能做到这一点?
- 我怎么知道
AVFoundation
已经在文件中写入了一个片段,以便我可以将它通过管道传输到 FFmpeg? - 如何从磁盘上的文件中获取数据,一次分块,将其传递到 FFmpeg 并让它吐出 TS 段?