10

次のコマンドを使用して、html5 ストリーミング用にフラグメント化された mp4 を作成しています。

-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
  1. 「-i rtsp://172.20.28.52:554/h264」は、IP カメラからの rtp パケット ストリームのソースが h264 であるためです。テストのために、カメラは GOP が 1 に設定されています (つまり、すべてのフレームがキー フレームです)。
  2. 「-vcodec copy」は、トランスコーディングが不要で、mp4 への再多重化のみを行うためです。
  3. 「-movflags empty_moov+default_base_moof+frag_keyframe」は、メディア ソース拡張仕様に従ってフラグメント化された mp4 を作成します。
  4. mp4 を stdout に出力するには、最後に「-」を付けます。出力を取得し、Web ソケットを介して Web クライアントに送信しています。

私が解決しようとしている遅延の問題を期待して、すべてがうまくいっています。データが stdout から着信するたびに、到着のタイムスタンプを付けてログに記録すると、次の出力が得られます。

16/06/2015 15:40:45.239 取得したデータ サイズ = 24

16/06/2015 15:40:45.240 取得したデータ サイズ = 7197

16/06/2015 15:40:45.241 取得したデータ サイズ = 32768

16/06/2015 15:40:45.241 得られたデータ サイズ = 4941

16/06/2015 15:40:45.241 得られたデータ サイズ = 12606

16/06/2015 15:40:45.241 取得したデータ サイズ = 6345

16/06/2015 15:40:45.241 取得したデータ サイズ = 6339

16/06/2015 15:40:45.242 取得したデータ サイズ = 6336

16/06/2015 15:40:45.242 取得したデータ サイズ = 6361

16/06/2015 15:40:45.242 得られたデータ サイズ = 6337

16/06/2015 15:40:45.242 取得したデータ サイズ = 6331

16/06/2015 15:40:45.242 取得したデータ サイズ = 6359

16/06/2015 15:40:45.243 取得したデータ サイズ = 6346

16/06/2015 15:40:45.243 取得したデータ サイズ = 6336

16/06/2015 15:40:45.243 取得したデータ サイズ = 6338

16/06/2015 15:40:45.243 取得したデータ サイズ = 6357

16/06/2015 15:40:45.243 取得したデータ サイズ = 6357

16/06/2015 15:40:45.243 取得したデータ サイズ = 6322

16/06/2015 15:40:45.243 取得したデータ サイズ = 6359

16/06/2015 15:40:45.244 得られたデータ サイズ = 6349

16/06/2015 15:40:45.244 得られたデータ サイズ = 6353

16/06/2015 15:40:45.244 得られたデータ サイズ = 6382

16/06/2015 15:40:45.244 取得したデータ サイズ = 6403

16/06/2015 15:40:45.304 得られたデータ サイズ = 6393

16/06/2015 15:40:45.371 得られたデータ サイズ = 6372

16/06/2015 15:40:45.437 得られたデータ サイズ = 6345

16/06/2015 15:40:45.504 取得したデータ サイズ = 6352

16/06/2015 15:40:45.571 得られたデータ サイズ = 6340

16/06/2015 15:40:45.637 得られたデータ サイズ = 6331

16/06/2015 15:40:45.704 取得したデータ サイズ = 6326

16/06/2015 15:40:45.771 得られたデータ サイズ = 6360

16/06/2015 15:40:45.838 得られたデータ サイズ = 6294

16/06/2015 15:40:45.904 取得したデータ サイズ = 6328

16/06/2015 15:40:45.971 得られたデータ サイズ = 6326

16/06/2015 15:40:46.038 取得したデータ サイズ = 6326

16/06/2015 15:40:46.105 取得したデータ サイズ = 6340

16/06/2015 15:40:46.171 得られたデータ サイズ = 6341

16/06/2015 15:40:46.238 取得したデータ サイズ = 6332

ご覧のとおり、最初の 23 ライン (ビデオの約 1.5 秒のデータを含む) はほぼ瞬時に到着し、その後、ビデオが毎秒 15 フレームであるため、連続する各 2 ライン間の遅延は約 70 ミリ秒です。この動作により、約 1.5 秒の遅延が発生します。

特に各フレームはmp4内の独自のフラグメントであるため、ffmpegが最初の23フレームをメモリに保持する必要がある理由がわからないため、フラッシュの問題のように見えます。ただし、ffmpeg がこのデータをより高速にフラッシュする方法は見つかりませんでした。

誰か提案がありますか?

これは、 mp4box を使用したライブ ストリーミング ダッシュ コンテンツのフォローアップの質問であることに注意してください。

4

3 に答える 3

0

-g オプションを使用してグループ内のフレーム数を設定することで、遅延の問題を解決しました。私の場合、使用し-g 2ました。明示的にしないと、フラグメントはソースがキーフレームを提供するのを待つか、非常に大きなデフォルト値を使用してキーフレームを生成してから、フラグメントを閉じて標準出力にダンプすると思われます。

于 2015-07-30T05:14:52.643 に答える