11

ストリーミング ビデオ アプリケーションでビデオ ソースを動的に切り替えたいと考えています。ただし、さまざまなビデオ ソースには固有の画像サイズがあります。ビデオ ソースごとに個別の SDP ファイルを生成できますが、それらを 1 つの SDP ファイルに結合して、ビデオ ソースの変更に応じて表示クライアントが表示ウィンドウのサイズを自動的に変更できるようにしたいと考えています。以下に 2 つの SDP ファイルの例を示します。

640x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=ビデオストリーム640x480
t=0 0
c=IN IP4 192.168.0.2
m=ビデオ 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
= fmtp:96 パケット化モード = 0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
a=コントロール:トラックID=1

960x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=ビデオストリーム960x480
t=0 0
c=IN IP4 192.168.0.2
m=ビデオ 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
= fmtp:96 パケット化モード = 0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
a=コントロール:トラックID=1

これらの個々のファイルを単一の SDP ファイルに結合するにはどうすればよいですか?

4

4 に答える 4

9

2 つの sdp の例のパラメーターは非常に似ています。ストリーム名と sprop-parameter-sets が異なります。ストリーム名は気にしないと思います。個別の sprop-parameter-sets が必要で、クライアントが標準をサポートしている場合は、次のように、解像度ごとに個別の動的ペイロード タイプを使用し、単一の SDP を使用できます。

    v=0
    o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
    s=ビデオストリーム640x480
    t=0 0
    c=IN IP4 192.168.0.2
    m=ビデオ 8000/2 RTP/AVP 96 97
    a=rtpmap:96 H264/90000
    = fmtp:96 パケット化モード = 0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
    =rtpmap: 97 H264/90000
    = fmtp: 97パケット化モード = 0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
    a=コントロール:トラックID=1

他の回答と同様に、異なるストリーム名や異なる sprop-parameter-sets が実際に必要ない場合は、最初の SDP を使用してストリームの途中でフォーマットを切り替えることができます。H.264 の実際のペイロードまたは特定のデコーダーがアプリケーションで機能することを確認するのに十分なほどよくわかりませんが、ビデオ会議アプリケーションでは、変更を通知したり、別のダイナミックを必要とせずに解像度を動的に切り替えることが非常に一般的です。ペイロード タイプ。

別の回答で述べたように、2 つの SDP ドキュメントを連結することはできますが、この場合は役に立たないと思います。H.264 デコーダーは、一度に 1 つの sprop-parameter-sets パラメーターでしか動作しないと思います。両方の SDP が同じペイロード タイプ、送信元ポートなどを持つため、受信者はどの sprop-parameter-sets パラメータをいつ使用するかを知りません。更新: 一部の実装では、SDP からではなく (または最初に SDP からのみ) sprops を帯域内で取得することに注意してください。それがあなたの環境に当てはまる場合、SDP sprop-parameter-sets はインバンドで更新できます

参考文献:

  1. H.264 ビデオの RFC 3984 RTP ペイロード形式
  2. 新しく提案された H.264 RTP ペイロード形式 RFC 6184
  3. RFC 4566 SDP: セッション記述プロトコル

[完全な引用を提供できなくて申し訳ありません - 自由に修正してください]

于 2008-10-23T21:12:12.027 に答える
2

RFC(RFC2327-SDP:Session Description Protocol)を確認しましたが、2つのSDPドキュメントを連結するだけでよいようです。ドキュメントには明示的に次のように記載されています。

SDPがSAPによって伝達される場合、パケットごとに1つのセッション記述のみが許可されます。SDPが他の手段で伝達される場合、多くのSDPセッション記述が連結される可能性があります(セッション記述の開始を示す「v =」行は前の記述を終了します)

于 2008-10-05T10:58:48.543 に答える
0

デコーダー次第だと思います。ストリーム内のパラメーター変更をサポートしている場合、解像度を変更するときに対応するヘッダーを配置するようにエンコーダーに指示できれば、デコーダーは自動的に切り替わります。

あなたの質問は何ですか?そうですか: ストリームを停止/再起動せずに解像度を変更するにはどうすればよいですか?

デコーダーに事前に伝えることができるとは思いません。ここに、いくつかの sdp マジックで表示される潜在的な解像度があります。デコーダーがH264パラメーターの変更を理解できて問題ないか、すべてを停止して再起動する必要があり、動的sdpで十分です。

たとえば、VLC は MP4 エンコーディングの変更 (可変ビット レートから固定ビット レートへの移行など) を検出できますが、解像度を変更するとクラッシュします。たとえば、異なる動的ペイロード タイプと異なる control-id 属性を使用します。

于 2008-10-06T09:10:02.227 に答える
0

ダイナミック ペイロードの変更、インストリーム パラメータ セットの変更、または SIP re-INVITE のいずれかを実行できます。

ペイロードの変更には、エンコーダーとデコーダーを制御しない場合、相手側が両方のペイロードを受け入れることを確認する必要があるという問題があり、ペイロードを正しく切り替える必要があります (そして、十分に高速です。要件はありません)。

パラメータ セット パケットが失われると、ストリーム内の変更に問題が生じます。誤ったデコードを回避するために、別のパラメーター セットのセットを使用できます (変更時にパラメーター セット 1 から 2 に切り替える)。それらを数回再送信することをお勧めします(あまりにも迅速に連続して送信しないでください)。

SIP re-INVITE は帯域外でハンドシェークされるため安全ですが、スイッチに遅延が追加され、受信機によってはグリッチが発生し、拒否される可能性があります。

(注: 私は、RFC 3984 の更新版である RFC 3984bis の作成者です)

于 2009-11-05T17:56:13.583 に答える