Session-initiation-protocol-the-offer-answer-model
SIP-オファー/アンサーモデル
SIPでのSDPの使用は、SDPオファー応答RFC 3264に記載されています。 SIPのデフォルトのメッセージ本文タイプは application/sdp です。
- 発呼側は、通常はINVITEまたはACKでSDPで受信するメディア機能をリストします。
- 着信側は、INVITEへの200 OK応答にメディア機能をリストします。
SDPの一般的なSIP使用には、バージョン、発信元、件名、時間、接続、1つ以上のメディアと属性のフィールドが含まれます。
- 件名と時間のフィールドはSIPでは使用されませんが、互換性のために含まれています。
- SDP標準では、件名フィールドは必須フィールドであり、件名がない場合はs =-であることが推奨される少なくとも1つの文字を含む必要があります。
- 通常、時間フィールドはt = 00に設定されます。 SIPは、接続、メディア、および属性フィールドを使用して、UA間のセッションをセットアップします。
- 起点フィールドは、SIPでの使用が制限されています。
- セッションIDは通常、SIPセッション全体で一定に保たれます。
- バージョンは、SDPが変更されるたびに増分されます。 送信されるSDPが以前に送信されたSDPから変更されていない場合、バージョンは同じままです。
- 使用するメディアセッションとコーデックのタイプは接続ネゴシエーションの一部であるため、SIPはSDPを使用して複数の代替メディアタイプを指定し、それらのメディアタイプを選択的に受け入れまたは拒否できます。
オファー/アンサー仕様、RFC 3264では、= rtpmap:を含む属性を各メディアフィールドに使用することを推奨しています。 メディアストリームは、SDP応答の対応するメディアフィールドのポート番号をゼロに設定することにより拒否されます。
例
次の例では、発信者のテスラは、最初のINVITEで伝送されるSDPで2つの可能なオーディオコーデックとビデオコーデックを使用して、オーディオおよびビデオコールをセットアップしたいです-
コーデックは、RTP/AVPプロファイル番号97、98によって参照されます。
被呼者のMarryはコールに応答し、最初のメディアフィールドに2番目のコーデックを選択し、AMRセッションのみを必要とする2番目のメディアフィールドを拒否します。
この音声のみの通話が受け入れられない場合、トムはACKを送信し、BYEを送信して通話をキャンセルします。 そうしないと、オーディオセッションが確立され、RTPパケットが交換されます。
この例が示すように、メディアフィールドの数と順序が維持されない限り、発信者は、どのメディアセッションが着信者によって受け入れられ、拒否されたかを特定できません。
オファー/アンサールールは、次のセクションにまとめられています。
オファーを生成するためのルール
SDPオファーには、必要なすべてのSDPフィールドを含める必要があります(これには、v =、o =、s =、c =、およびt =が含まれます)。 これらはSDPの必須フィールドです。
通常、メディアフィールド([.small]#m =#)が含まれますが、必須ではありません。 メディア行には、優先順にリストされているすべてのコーデックが含まれています。 唯一の例外は、エンドポイントが膨大な数のコーデックをサポートしている場合で、最も受け入れられる可能性が高いか、最も優先されるコーデックをリストする必要があります。 さまざまなメディアタイプには、オーディオ、ビデオ、テキスト、MSRP、BFCPなどが含まれます。
回答を生成するためのルール
オファーへのSDPの回答は、次のルールに従って構築する必要があります-
- 回答には、回答と同じ順序で同じ数の[.small]#m =#行が必要です。
- ポート番号を0に設定すると、個々のメディアストリームを拒否できます。
- ストリームは、ゼロ以外のポート番号を送信することにより受け入れられます。
- 各メディアタイプのリストされたペイロードは、オファーにリストされたペイロードのサブセットである必要があります。
- 動的ペイロードの場合、各方向で同じ動的ペイロード番号を使用する必要はありません。 通常、単一のペイロードのみが選択されます。
セッションを変更するためのルール
どちらの当事者も、別のオファー/アンサー交換を開始してセッションを変更できます。 セッションが変更された場合、次のルールに従う必要があります-
- 発信元([.small]#o =#)の行バージョン番号は、このSDPが以前の交換と同一であることを示す最後に送信したものと同じであるか、新しいSDPを示す1ずつ増加する必要があります。解析する必要があります。
- オファーには、既存のすべてのメディア回線が含まれ、同じ順序で送信される必要があります。
- [.small]#m =#行リストの最後に追加のメディアストリームを追加できます。
- ポート番号を0に設定すると、既存のメディアストリームを削除できます。 このメディアラインは、このセッションのSDPおよび今後のすべてのオファー/アンサー交換に残る必要があります。
通話保留
通話中の一方が一時的に他方を保留にすることができます。 これは、元のINVITEと同じSDPを持つINVITEを送信しますが、 a = sendonly 属性が存在します。