用于将flv重新包装到mp4的C库?

时间:2014-01-21 10:10:29

标签: video ffmpeg mp4 flv

假设我们有一个FLV包装的视频(在容器下面,它是h.264和aac)

目标是阅读它,并在运行中将其作为MP4以可在Safari / iOS中流式传输的方式发送出去

那里有没有可以帮助解决这个问题的库?我正在研究ffmpeg,但我还没想到它,而且我不确定它是否真的是我需要的(如果我需要一个实用程序去文件 - >文件它是完美的,毫无疑问,但是一个基于大块的块在大块上使用的库,不确定它是否是一个可以突破我的牙齿的正确位置)

编辑:假设我们正在按需进行通话,即持续时间已知并且在初始读/写之前可以扫描所有标题

1 个答案:

答案 0 :(得分:1)

你问的是不可能的。没有办法流式传输mp4。它不是流式格式。 mp4具有(至少)两个分区。 MDAT和MOOV。 MDAT包含原始音频/视频帧。但是简单地连接起来没有起始码或定时信息。所以没有MOOV就是胡言乱语。 MOOV包含MDAT中每个帧的偏移量,大小和时间戳。但是在记录所有帧之前无法计算。

iOS上支持即时转换的唯一格式是HLS。

编辑: 这只会起作用,因为flv内部使用与mp4相同的基本流格式。 您可以扫描flv,提取序列标题,并记下所有flv标记有效负载文件的偏移量和大小。还要记住哪些帧是关键帧。构造一个假的moov原子,它使用字节偏移到flv中(加上大于MOOV的字节数,比如100 MB)将这些值写入stbl子原子。使用序列标题中的数据填充tkhd。使用FREE原子加上MOOV,加上MDAT原子的标题,使其正好为100MB。最后让您的网络服务器地图范围请求大于100MB到flv而不是MDAT。