2017-05-28 78 views
0

我嘗試使用libav解析持續時間約爲20h的mp4文件。我編譯並測試了ffmpeg示例doc/examples/demuxing_decoding.c。Libav demuxer在長時間mp4文件上失敗

  • avformat_alloc_context()
  • avformat_open_input()
  • avformat_find_stream_info()
  • ...
  • av_read_frame()循環

但過了一段時間我得到一個錯誤「無法添加索引條目「,mp4 demuxer停止工作。 這不會使用較短的文件(少於15小時)重現。

我也嘗試ffmpeg.exe到解複用和複用這個文件,如下所示:

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

而且我在這情況下,沒有任何錯誤消息。

demuxing_decoding示例和ffmpeg.exe demuxing方法有什麼區別?

是否有特定用途的libav mp4分路器有太長或分段的mp4文件?

有關減少/忽略索引的任何想法?

回答

0

我的mp4 demuxing和ffmpeg util的例子之間的區別是使用av_max_alloc()來限制可以分配到一塊的最大字節數。

對於經過一段時間後的大型mp4文件,分路器中的AVIndexEntry存儲達到最大分配大小,並且demux在重新分配時失敗。

由於我從mov.c中取消了,AVIndexEntry * index_entries可能會極大地增加碎片化的mp4流,mp4 demuxer(mov.c)不包含任何算法來控制索引表大小。

這可能導致活mp4流中的高內存消耗。

有沒有什麼辦法可以在片段化mp4流上使用libav mp4 demuxer而不用存儲索引或控制它們?