我尝试使用libav将持续时间约为20h的mp4文件解压缩。我编译并测试了ffmpeg示例doc / examples / demuxing_decoding.c。
但过了一段时间我收到错误"无法添加索引条目"和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文件?
关于减少/忽略索引的任何想法?
答案 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分离器而不存储索引或控制它们?