私は、H.264 および AAC を含む MP4 ファイルをストリーミングに適した MPEG-TS セグメントに変換する libavformat API ラッパーに取り組んでいます。再エンコードせずに単純なストリーム コピーを行っているだけですが、作成したファイルは 24 fps ではなく3600 fpsでビデオを再生します。
ffprobe https://gist.github.com/chrisballinger/6733678からの出力の一部を次に示します。破損したファイルは以下のとおりです。
r_frame_rate=1/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=2999
duration=0.033322
ffmpeg を介して手動で送信された同じ入力ファイルには、適切なタイムスタンプ情報が含まれています。
r_frame_rate=24/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=126000
start_time=1.400000
duration_ts=449850
duration=4.998333
libavformat のセットアップのどこかに問題があると思います: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349ここで、必要な ffmpeg.c からのコードの束を転用しました。ダイレクト ストリーム コピーの場合。
3600 は「マジック ナンバー」(60*60) のように見えるため、タイム スケールを適切に設定していないのと同じくらい簡単かもしれませんが、自分のコードが ffmpeg/avconv 自体から分岐している場所がわかりません。
ここでも同様の質問がありますが、彼らは私ほど遠くまで到達したとは思いません: Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy