Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 用于将flv重新包装到mp4的C库?_Video_Ffmpeg_Mp4_Flv - Fatal编程技术网

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

Video 用于将flv重新包装到mp4的C库?,video,ffmpeg,mp4,flv,Video,Ffmpeg,Mp4,Flv,假设我们有一个FLV包装的视频(在容器下面是h.264和aac) 我们的目标是阅读它,并在运行中以MP4的形式发送出去,这种方式可以在Safari/iOS中进行流式传输 有没有什么LIB可以帮助解决这个问题?我正在研究ffmpeg,但我还没有找到它,我也不确定它是否真的是我所需要的(如果我需要一个实用程序来运行文件->文件,它无疑是完美的,但作为一个基于块的库使用,我还不确定它是否是一个合适的地方来打破我的牙齿) 编辑:假设我们讨论的是按需,即时间已知,并且在初始读/写之前可以扫描所有标题您所要

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

我们的目标是阅读它,并在运行中以MP4的形式发送出去,这种方式可以在Safari/iOS中进行流式传输

有没有什么LIB可以帮助解决这个问题?我正在研究ffmpeg,但我还没有找到它,我也不确定它是否真的是我所需要的(如果我需要一个实用程序来运行文件->文件,它无疑是完美的,但作为一个基于块的库使用,我还不确定它是否是一个合适的地方来打破我的牙齿)


编辑:假设我们讨论的是按需,即时间已知,并且在初始读/写之前可以扫描所有标题

您所要求的是不可能的。没有办法流式传输mp4。它不是流式格式。mp4至少有两个分区。MDAT和MOOV。MDAT包含原始音频/视频帧。但也有一些简单的连接,没有起始码或定时信息。因此,没有MOOV,这是胡言乱语。MOOV包含MDAT中每个帧的偏移量、大小和时间戳。但在所有帧都被记录下来之前,它是无法计算的

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

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

如上所述,不讨论这种流:)如果需要,可以在磁盘上准备新的头文件