Libav demuxer在长mp4文件上失败

时间:2017-05-28 11:27:10

标签: ffmpeg mp4 video-processing libav mux

我尝试使用libav将持续时间约为20h的mp4文件解压缩。我编译并测试了ffmpeg示例doc / examples / demuxing_decoding.c。

  • avformat_alloc_context()
  • avformat_open_input()
  • avformat_find_stream_info()
  • ...
  • av_read_frame()in cycle

但过了一段时间我收到错误"无法添加索引条目"和mp4 demuxer停止工作。 这不会用较短的文件(小于15小时)重现。

此外,我尝试使用ffmpeg.exe对此文件进行解复用和复用,如下所示:

ffmpeg.exe -i input.mp4 -acodec copy -vcodec copy out.mp4

在这种情况下,我没有任何错误消息。

demuxing_decoding示例和ffmpeg.exe demuxing方法有什么区别?

libav mp4 demuxer是否特定使用过长或碎片的mp4文件?

关于减少/忽略索引的任何想法?

1 个答案:

答案 0 :(得分:0)

我的mp4 demuxing和ffmpeg util的例子之间的区别在于使用av_max_alloc()来限制可以在一个片段中分配的最大字节数。

对于大型mp4文件,一段时间后,解复用器中的AVIndexEntry存储达到最大分配大小,并且demux在重新分配时失败。

当我从mov.c中看不到时,AVIndexEntry * index_entries可能会在碎片化的mp4流上大大增加,并且mp4解复用器(mov.c)不包含任何控制索引表大小的算法。

这会导致实时mp4流的内存消耗过高。

有没有办法在片段化的mp4流上使用libav mp4分离器而不存储索引或控制它们?