音声とビデオの学習 – ビデオの高速アップデート

VFUの紹介

VFUとは何ですか?

Video Fast Update (VFU) は、ビデオ会議通話中に失われたビデオ フレームを迅速に回復できるようにする H.323 ビデオ会議プロトコルの機能です。送信中にビデオ フレームが失われた場合、受信エンドポイントは送信エンドポイントにビデオ高速更新要求を送信できます。送信エンドポイントは失われたフレームをできるだけ早く再送信し、受信エンドポイントが欠落したビデオ情報を迅速に回復して表示できるようにします。これにより、ビデオ ストリームにおけるフレーム落ちの影響が軽減され、ビデオ会議の全体的な品質が向上します。

この記事の利点、無料の C++ オーディオおよびビデオ学習教材パッケージ、技術ビデオ/コード (オーディオおよびビデオ開発、インタビューの質問、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、コーデック、プッシュプル ストリーム、srs を含む) )↓↓↓ ↓↓↓下記からどうぞ↓↓無料で読むには記事下部をクリック↓↓

VFU の使用シナリオ

RFC5168 は以下を規定しています。 セッション開始プロトコル (SIP) に基づくシステムでは、異なるサプライヤーのリアルタイム対話型アプリケーションで相互運用可能な方法で使用されます。VFU 機能は Microsoft、Polycom、Radvision によって開発され、いくつかのベンダーによって使用されています。

RFC5186 で言及されている VFU の欠点: SIP シグナリング パスを使用してビデオの高速アップデートを送信することは、RTP Control Protocol (RTCP) フィードバック方式 [7] を使用するほど良くありません。これは、コマンドがシグナリング パス内のすべてのエージェントを通過するため、メッセージ遅延が増加し、プロキシの不必要な過負荷を引き起こします。したがって、ほとんどのシナリオでは、シグナリング エージェントを介するのではなく、依然として RTCP メッセージを使用して、エンドツーエンドで対話を完了します。

VFU 方式で送信されるビデオ制御コマンドにより、ビデオ データ送信側は許可された帯域幅内でさらに多くのデータを送信する可能性があります。

VFU と対話する方法

VFUはSIP INFOメソッドを使用したXML形式で送信され、「Content-Type」は「application/media_control+xml」に設定されます。このアプローチは、SIP に組み込まれた信頼性の恩恵を受けます。

VFUリクエスト

エラーフィードバック

VFUの動作原理

ビデオは、SIP サーバーを介して送信側からビデオ受信側に送信されます。最初に I フレームが送信され、その後に P フレームが送信されます。

* このループは、ビデオの損失/破損が発生するまで継続します。場合によっては、後続に送信される P フレームが破損し、ビデオ損失が発生する可能性があります。この場合、ビデオ シンクはビデオ送信者に VFU リクエストを送信します。

* VFU リクエストは、最初に SIP INFO メッセージで SIP サーバーに送信されます。ビデオ SIP サーバーは、VFU 要求をビデオ送信者に転送します。

* ビデオ送信者が VFU リクエストを受信すると、RTP ストリーム経由でビデオ受信者に I フレームを送信します。I フレームが受信されると、新しい I フレームに従って後続の P フレームが段階的に送信されます。

キャプチャインスタンス

実際のパケット キャプチャ ビューは、SIP/XML によって要求された情報が基本的に RFC5168 と一致していることを示しています。

XML を受信した後、送信側は vfu の解析を完了し、送信内容を調整して I フレームを再送信します。

VFU の機能は、RTCP の PLI または FRI の機能に似ています。ストリーミング メディア送信の学習のこの部分は非常によく知られています (特に Webrtc に慣れている子供用の靴)。ストリーミング メディア ブログ シリーズに含まれ、紹介される予定です。後で。


VFU コードの日の読み取り

RFC5168 によると、多くのアプリケーション シナリオがあり、そのほとんどは VFU が会議で使用されるもの、またはリアルタイムのオーディオとビデオのシナリオです。ちょうど今、コンテンツのこの部分が含まれる linphone のソース コードを学習しているところです。それはリン電話コードの日の読み取りで完了します。

VFU送信処理

linphone には関連するインターフェイスがあり、必要に応じてインターフェイスを呼び出すだけです。

その後、liblinphone 内の同じ名前の API を呼び出すことになります。プロセスが理解しやすくなり、冗長ではなくなります。

次に、呼び出しインターフェイスが呼び出されます。

MediaSession のインターフェイスを呼び出します。ここで注意する必要があります。RTCP 関連のシグナリングが有効になっている場合は、RTCP メソッドが優先されます。RTCP が有効になっていない場合にのみ、VFU が使用されます。

このうち、AVPF 関連プロセスは、RTCP 制御シグナリングを通じてキー フレーム I フレームを取得する FIR プロセスに続きます。

sendVfuRequest()

SalCallOp クラスの sendVfuRequest() 関数。この機能は、ビデオ高速更新 (VFU) 要求を相手に送信するために使用されます。

VFU受信処理

受信プロセスも同様で、関連情報は sal で受信されます。

まず、coreinit 中に関連するコールバック関数の登録を完了し、sal が sip によってフィードバックされた VFU XML を受信した後、コールバック メソッドを介して関連する I フレーム データの送信を完了します。

具体的な sal コールバック インターフェイスは次のとおりです。

vfu_request()

vfu_request() は、Video Fast Update (VFU) リクエストをリモート パーティに送信するために使用される静的関数です。

sendVfu()

MS2VideoControl クラスの sendVfu() 関数。この関数は、ビデオ高速更新 (VFU) 要求を相手に送信するために使用されます。

sendVfu() 関数は、まず MS2VideoControl オブジェクトから VideoStream オブジェクトを取得します。VideoStream オブジェクトが見つからない場合、この関数は戻ります。

次に、sendVfu() 関数は、VideoStream オブジェクトの video_stream_send_vfu() 関数を呼び出して、VFU リクエストをリモート パーティに送信します。

video_stream_send_vfu()

video_stream_send_vfu() 関数は、RTP プロトコルを使用して VFU リクエストをリモート パーティに送信します。VFU リクエストは、現在のフレームと前のフレームの差分のみを送信するように送信者に指示する特別な RTP パケットです。これにより、特に前のフレームとわずかしか変わらないフレームの場合、送信する必要があるデータの量を大幅に削減できます。

VideoEncoderInterface API

linphone の VFU の VideoEncoderInterface インターフェイスのマクロ定義

onRequestVfuCall()

onRequestVfuCall() は、Video Fast Update (VFU) リクエストを処理するために使用されるコールバック関数です。

EncoderFilter クラス

H26xEncoderFilter は、H26X 関連の一般インターフェイスを構築するための EncoderFilter のサブクラスです。

requestVfu()

H26xEncoderFilter クラスの requestVfu() 関数は、エンコーダーから Video Fast Update (VFU) を要求するために使用されます。

I フレーム要求関連のフラグ ビットを設定します。

プロセス()

H26xEncoderFilter クラスの process() 関数は、ビデオ フレームを処理するために使用されます。

餌()

フィード関数は、Linphone でビデオ フレーム データを取得するために使用されます。requestIFrame が true に設定されている場合、キー フレームのエンコードを強制するために使用されます。

これまでのところ、関連する関数呼び出しは完了しています。

この記事の利点、無料の C++ オーディオおよびビデオ学習教材パッケージ、技術ビデオ/コード (オーディオおよびビデオ開発、インタビューの質問、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、コーデック、プッシュプル ストリーム、srs を含む) )↓↓↓ ↓↓↓下記からどうぞ↓↓無料で読むには記事下部をクリック↓↓

おすすめ

転載: blog.csdn.net/m0_60259116/article/details/132676344