ライブストリーミングにおけるx264の遅延(ラグ)とは

Diary Of An x264 Developer ≫ x264: the best low-latency video streaming platform in the world より

B-frame latency (in frames) + Threading latency (in frames) + RC-lookahead (in frames) + Sync-lookahead (in frames) + VBV buffer size (in seconds) + Time to encode one frame (in milliseconds)


公式(x264 と ffmpeg の開発者である Jason Garrett-Glaser氏)の見解より、フレームあたりの bframe, フレームあたりの threading, フレームあたりの rc-lookahead, フレームあたりの sync-lookahead, VBV_buffer, 1フレームあたりのエンコード時間を足したものが遅延になる。この中で馴染みがないのが sync-lookahead

猫科研究所 - x264-changelog-jp r1200-r1299 のx264r1246欄に

lookaheadを別のスレッドに移動し、最適なパフォーマンスのため他のスレッドよりも高い優先度を設定。
lookaheadがエンコーディングのボトルネックとなる事を減らし、多コアのCPU上でlookaheadが強く影響する設定(例えばb-adapt 2)でのパフォーマンスを素晴らしく向上。
バッファサイズは--sync-lookahead で操作可能で、デフォルトでは自動(threads+bframes バッファサイズ))である。

rc-lookahead とは別で、lookahead サイズをうまく使うようになるオプションである。

まとめると遅延は、過去と未来のフレームを参照する bframe、エンコードを並行作業する threding、未来のフレームを先読みする rc-lookahead、急なビットレート変化に対応するためのバッファサイズ、エンコード自体の処理時間で表わされる。

ここで rc-lookahead の値を変えずに配信フレームレートを上げると遅延が少なくなる理由がわかって、1秒間の描写フレームが増えるのに1秒当たりの先読みするフレーム割合が減ったために遅延が減ることになる。

遅延を減らすために fps を大きくすれば画質低下とPCの高負荷を引き換えに遅延を小さくすることができるのだが、これはfpsを大きくすることで1フレーム当たりのエンコード時間が減ることによる。同様に threading も全体の処理が間に合う場合、つまり低負荷の配信なら threads:1 にしたほうが遅延が少なくなる。言い換えると1人で出来る作業を複数人でやるよりも1人でやるほうが早いことになる。

つまりこれを実践すると
Encoder latency - X264 Encoding Suggestions - MeWiki
Latency - StreamingGuide ? FFmpeg
--tune zerolatency を使うことになり、-rc-lookahead:0, -sync-lookahead:0, -bframe:0, -sliced-threads:1 を併用することになる。しかしこのままでは動きにとても弱いので静止画配信以外にビットレートを多めに使えない場合はこの設定は向かない。

関連記事
ffmpeg - Look for fastest video encoder with least lag to stream webcam streaming to ipad - Stack Overflow

ちなみに x264 のソフトウェアエンコードではなく、qsv や nvenc などのハードウェアエンコードを使うのも遅延を減らす方法の一つである。

関連記事
qsv 対応の ffmpeg をつくる
ffmpeg に nvenc(cuda) をインストールする
関連記事

この記事へのコメント

管理人のみ通知 :

トラックバック


ニコニコチャンネル始めました
ニコラボチャンネル
スポンサード リンク
新着記事と追記・編集記事
スポンサード リンク
ブログ内検索
プロフィール

Author:ロベルト
お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab
ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

カテゴリ
アクセスの多い記事
記事アーカイブ

最新コメント
リンク
ニコニコ静画
アニメカテゴリ毎時ランキング
免責事項
当ブログはリンクフリーです。記事によりトラブルが生じた場合でも、当ブログ管理人は一切の責任を負いません。 当ブログに記載されている情報の正誤や利用は、ご自身の判断でお願いします。 紹介したアプリケーションに関する問い合わせは作者に問い合わせてください。ニコニコ動画に関する質問はまずは公式掲示板、2ch、各Q&Aサイトを参照ください。
ブログの読者になる(RSS)
アクセス数