2

ライブ ビデオ ストリームを生成しzerolatency、VLC プレーヤーでできるだけ短い遅延で再生したいと考えています。

これは私が現在使用している設定です:

x264_param_default_preset( &m_Params, "veryfast", "zerolatency" );

m_Params.i_threads              =   2;
m_Params.b_sliced_threads       =   true;
m_Params.i_width                =   m_SourceWidth;
m_Params.i_height               =   m_SourceHeight;

m_Params.b_intra_refresh        =   1;

m_Params.b_vfr_input            =   true;
m_Params.i_timebase_num         =   1;
m_Params.i_timebase_den         =   1000;

m_Params.i_fps_num              =   1;
m_Params.i_fps_den              =   60;

m_Params.rc.i_vbv_max_bitrate   =   512;
m_Params.rc.i_vbv_buffer_size   =   256;
m_Params.rc.f_vbv_buffer_init   =   1.1f;

m_Params.rc.i_rc_method         =   X264_RC_CRF;
m_Params.rc.f_rf_constant       =   24;
m_Params.rc.f_rf_constant_max   =   35;

m_Params.b_annexb               =   0;
m_Params.b_repeat_headers       =   0;
m_Params.b_aud                  =   0;

x264_param_apply_profile( &m_Params, "high" );

これらの設定を使用すると、次の問題があります。

  • VLC では、欠落しているフレームが多数表示されます (スクリーンショットの「verloren」を参照)。これが問題かどうかはわかりません。
  • VLC でネットワーク ストリーム遅延の値を 200 ミリ秒未満に設定すると、VLC は数フレームをレンダリングし、フレームのデコード/レンダリングを停止します。
  • VLC のネットワーク ストリーム遅延に 200 ミリ秒以上の値を設定すると、これまでのところすべて問題ないように見えますが、遅延は明らかに 200 ミリ秒であり、高すぎます。

質問: レイテンシーを可能な限り抑えてエンコードおよびストリーミングするには、どの設定 (x264lib および VLC) を使用すればよいですか?

ここに画像の説明を入力

4

2 に答える 2

4

x264 設定: 多くは冗長です。つまり、既に "zerolatency" に含まれています。ただし、私が知る限り、エンコードのレイテンシはゼロ フレームです。つまり、1 つのフレームを入力すると、すぐに (とにかく CPU がエンコードを終了するとすぐに) 1 つのフレームが出力されます。エンコードされた古いフレームを提供するために、新しいフレームを待つことはありません (たとえば、先読みの場合のように)。

大きなネットワーク遅延を与えない限り vlc が一時停止する理由: 問題は、エンコード時のレート制御と vbv 設定の組み合わせが理想的ではないことです。低レイテンシのエンコードのためにやりたいことは、CBR を使用し、VBV バッファーを 1 フレームのサイズに正確に設定することです。x264ソースを見ると、これにより特別なVBV計算が可能になります。

また、タイミングに関連するものを一切設定せず (fps なし、vbv なし)、ゼロレイテンシーで CRF を使用することもできます。結果は、ビデオがストリーミング用にパッケージ化されているコンテナーによって異なります。

詳細については、これをお読みください: http://x264dev.multimedia.cx/archives/249

于 2013-11-27T14:03:47.697 に答える
1

可能な限り高速なエンコーディングが必要な場合は、その後のすべてを削除します

x264_param_default_preset( &m_Params, "veryfast", "zerolatency" );

超高速から超高速に変更します。残りは、ネットワーク遅延 + デコードによるものです。

于 2014-01-10T15:01:10.577 に答える