2017-05-28 8 views
0

私はlibavを使用して約20時間持続するmp4ファイルをdemuxしようとします。私はffmpeg example 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の違いは何ですか?

あまりにも長い、または断片化したmp4ファイルを含むlibav mp4 demuxerの特定の用途はありますか?

インデックスを縮小/無視する方法はありますか?

答えて

0

私のmp4 demuxingとffmpeg utilの違いは、av_max_alloc()を使って1つのファイルに割り当てられる最大バイト数を制限することです。

しばらくすると大きなmp4ファイルのために、demuxerのAVIndexEntryストレージが最大割り当てサイズに達し、demuxがreallocで失敗します。

mov.cのundestandとして、AVIndexEntry * index_entriesは断片化されたmp4ストリームで大きく増加し、mp4 demuxer(mov.c)にはインデックステーブルサイズを制御するアルゴリズムが含まれていません。

これは、ライブmp4ストリームで高いメモリ消費をもたらす可能性があります。

断片化されたmp4ストリームでインデックスを保存したり制御したりすることなくlibav mp4 demuxerを使用する方法はありますか?

関連する問題