h264 でエンコードされたビデオと AAC でエンコードされたオーディオを含む mp4 ファイルを受け取り、それをセグメント化された .ts ファイルに書き込む C コードをいくつか作成しました。
コードはここで見ることができます: http://pastebin.com/JVdgjM9G
問題は、コードがオーディオ パケットでチョークすることです。h264 から変換しているため、最終的にビデオ フレームで動作するようになった "h264_mp4toannexb" を使用する必要があります。ただし、プログラムが最初のオーディオ パケット (以下のストリーム 1) に到達するとすぐにクラッシュします。
出力例:
Output #0, mpegts, to 'testvideo':
Stream #0.0: Video: libx264, yuv420p, 1280x720, q=2-31, 1416 kb/s, 90k tbn, 23.98 tbc
Stream #0.1: Audio: libfaac, 48000 Hz, stereo, 127 kb/s
First chunk: testvideo-00001.ts
Read frame, keyframe: 1, index: 0
Did bitfilter fun!
Read frame, keyframe: 0, index: 0
Did bitfilter fun!
(...this repeats several more times, truncated for space...)
Did bitfilter fun!
Read frame, keyframe: 0, index: 0
Did bitfilter fun!
Read frame, keyframe: 1, index: 1
base(54516) malloc: *** error for object 0x7fd2db404520: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
オーディオ ストリームでもフィルタを実行するようにコードを変更しようとしましたが (audio_stream->codec
代わりに を使用video_stream->codec
)、フィルタからエラーが発生するだけです。
通話しようとすると問題が発生しav_interleaved_write_frame(output_context, &packet);
ます。フィルタリングされたビデオ パケットの場合、問題はありませんが、オーディオ パケットは完全にチョークします。しかし、私はその理由にちょっと困惑しているので、どんな助けも大歓迎です。