私は、ビデオ フィードをエンコードし、それを UDP 経由でクライアントに送信し、ストリームをデコードするコードに取り組んでいます。x264エンコーダーを使用して正常に動作します。私の唯一の問題はavcodec_decode_video2
、着信フレームを呼び出すと、デコーダーが内部バッファーを持っているかのように遅延を引き起こすことです。どうすればこれを回避できますか? この行動を制御しているのは何ですか?変更する必要があるのはエンコーダーですか、それともデコーダーのコンテキストに設定がありませんか? 現在、デフォルトでデコーダーコンテキストを作成するだけavcodec_get_context_defaults3
です。
エンコーダには次のパラメータがあります。
x264_param_t param;
x264_param_default_preset(¶m, preset.c_str(), "zerolatency");
param.i_frame_reference = 1;
param.i_threads = 1;
param.b_sliced_threads = 5;
param.i_slice_max_size = 8192;
param.i_width = width;
param.i_height = height;
param.i_fps_num = 30;
param.i_fps_den = 1;
param.i_sync_lookahead = 0;
param.i_bframe = 0;
// Intra refres:
param.i_keyint_max = 30;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.i_lookahead = 0;
param.rc.i_bitrate = bitrate;
param.rc.i_vbv_max_bitrate = bitrate;
param.rc.i_vbv_buffer_size = bitrate/30;
//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;