メインコンテンツまでスキップ

5.7. Processing a Rollback (ロールバックの処理)

5.7. Processing a Rollback (ロールバックの処理)

PeerConnection が "stable" 以外の任意の状態にある場合, ロールバックを実行してもよい。 これは, オファーと暫定アンサーの両方をロールバックできることを意味する。 ロールバックは, 提案された変更を取り消すためにのみ使用できる; "stable" 状態から以前の "stable" 状態へロールバックする機能はない。 "stable" 状態でロールバックを試みた場合, 処理は停止しなければならず, エラーを返さなければならない。 これは, アンサー側がアンサーで setLocalDescription を実行した後は, ロールバックできないことを意味する点に注意すること。

setLocalDescription を呼び出すか setRemoteDescription を呼び出すかにかかわらず, ロールバックの効果は同じでなければならない。

ロールバックを処理するために, JSEP 実装は現在のオファー/アンサー取引を破棄し, シグナリング状態を "stable" に設定し, 保留中のローカルおよび/またはリモート記述 (セクション 4.1.14 および 4.1.16 参照) を "null" に設定する。 破棄されたローカル記述によって割り当てられたリソースまたは候補はすべて破棄される; 受信するメディアは, 以前のローカルおよびリモート記述に従って処理される。

ロールバックは, ロールバックされたセッション記述の適用によって "m=" セクションに関連付けられていた RtpTransceiver をすべて切り離す (セクション 5.10 および 5.9 参照)。 これは, 以前関連付けられていた一部の RtpTransceiver が, もはやどの "m=" セクションにも関連付けられないことを意味する; そのような場合, RtpTransceivermid プロパティの値は "null" に設定されなければならず, トランシーバとその "m=" セクション索引との対応付けは破棄されなければならない。 その後ロールバックされたリモートオファーの適用によって作成された RtpTransceiver は, 停止され PeerConnection から除去されなければならない。 ただし, addTrack メソッドによってトラックが RtpTransceiver に添付されている場合は, RtpTransceiver を除去してはならない。 これにより, アプリケーションは addTrack を呼び出し, 次にオファーで setRemoteDescription を呼び出し, 次にそのオファーをロールバックし, 次に createOffer を呼び出して, 追加されたトラック用の "m=" セクションが生成されたオファーに現れるようにできる。