5.6 RTCIceTransport
接口
RTCIceTransport
接口允许应用程序获取有关用来发送接收数据包的ICE传输的信息。特别的,ICE管理对等连接,它牵涉到应用程序可能获取的状态。由于需要调用setLocalDescription()
和setRemoteDescription()
,RTCIceTransport
对象被创建。底层ICE状态由ICE代理管理,所以当ICE代理向用户代理提供指示时,RTCIceTransport
的状态就会改变。每个RTCIceTransport
对象代表一个特定RTCRtpTransceiver
的RTP或RTCP组件的ICE传输层,或者是一组已经通过[BUNDLE]协商的RTCRtpTransceiver
。
NOTE:现存
RTCRtpTranceiver
的ICE重启将会由现存RTCIceTransport
对象表示,它的状态将会被对应更新,而不是由新对象表示。
当ICE代理表示它将为一个RTCIceTransport
收集一系列的候选者时,用户代理必须对运行以下步骤的任务进行排序:
- 让connection成为与这个ICE代理关联的
RTCPeerConnection
对象。 - 如果connection的[[IsClosed]]插槽为
true
,中断这些步骤。 - 让transport成为RTCIceTransport。
- 设置transport的[[IceGathererState]]插槽为
gathering
。 - 在transport发起一个名为
gatheringstatechange
的事件。 - 更新connection的ICE收集状态。
当ICE代理表示它已经成功收集了一个RTCIceTransport
的一系列候选者时,用户代理必须对运行以下步骤的任务进行排序:
让connection成为与ICE代理关联的
RTCPeerConnection
对象。如果connection的[[IsClosed]]插槽为
true
,中断这些步骤。让transport成为
RTCIceTransport
。让
newCandidate
成为创建一个RTCIceCandidate的结果,伴随一个新字典,它的sdpMid
和sdpMLineIndex
都被设置为与此RTCIceTransport
相关联的值,usernameFrangment
被设置为收集完成的candidates的用户名片段,candidate
被设置为空字符串。使用
RTCPeerConnectionIceEvent
接口发起一个名为icecandidate
的事件,并且candidate属性在connection被设置为newCandidate
。如果另一代candidates还在被收集,中断这些步骤。
NOTE:这可能会出现,如果在ICE代理还在收集上一代的candidates时,开始ICE重启,可能会发生这种情况。
设置transport的[[IceGathererState]]插槽为complete。
在transport发起一个名为
gatheringstatechange
的事件。更新connection的ICE收集状态。
当用户代理表示新的ICE candidate可用于RTCIceTransport
,或者从ICE候选者池中选择一个,或者从头开始收集它,用户代理必须对运行以下步骤的任务进行排序:
- 让
candidate
成为可用的ICE候选者。 - 让connection成为与这个ICE代理相关联的
RTCPeerConnection
对象。 - 如果connection的[[IsClosed]]插槽为
true
,中断这些步骤。 - 让transport成为可供候选者使用的
RTCIceTransport
。 - 如果connection.[[PendingLocalDescription]]不是
null
,并且表示收集候选者的ICE generation,向connection.[[PendingLocalDesciption]].sdp中添加候选者。 - 如果connection.[[CurrentLocalDescription]]不是
null
,并且表示收集候选者的ICE generation,向connection.[[CurrentLocalDescription]].sdp中添加候选者。 - 让
newCandidate
成为创建一个RTCIceCandidate的结果,伴随一个新字典,它的sdpMid
和sdpMLineIndex
都被设置为与此RTCIceTransport
相关联的值,usernameFrangment
被设置为候选者的用户名片段,并且candidate
被设置为使用candidate-attribute
语法编码的字符串来代表candidate
。 - 将
newCandidate
添加到transport的本地候选者集合中。 - 使用
RTCPeerConnectionIceEvent
接口发起一个名为icecandidate
的事件,并且候选者属性在connection
被设置为newCandidate
。
当ICE代理表示RTCIceTransport
的RTCIceTransportState
已经改变时,用户代理必须对运行以下步骤的任务进行排序:
- 让
connection
成为与这个ICE代理相关联的RTCPeerConnection
对象。 - 如果
connection
的[[IsClosed]]插槽为true
,中断这些步骤。 - 让
transport
成为状态正在改变的RTCIceTransport
。 - 让
newState
成为新的被指示的RTCIceTransportState
。 - 设置
transport
的[[IceTransportState]]插槽为newState
。 - 在
transport
发起一个名为statechange
的事件。 - 更新
connection
的ICE连接状态。 - 更新
connection
的连接状态。
当ICE代理表示选定的一对RTCIceTransport
候选者已经改变时,用户代理必须对运行以下步骤的任务进行排序:
- 让
connection
成为与这个ICE代理相关联的RTCPeerConnection
对象。 - 如果
connection
的[[IsClosed]]插槽为true
,中断这些步骤。 - 让
transport
成为选定候选者对正在改变的RTCIceTransport
。 - 让
newCandidatePair
成为新常见的RTCIceCandidatePair
,如果选定了一个,表示选择正确,否则为null。 - 设置
transport
的[[SelectedCandidatePair]]插槽为newCandidatePair
。 - 在
transport
发起一个名为selectedcandidatepairchange
的事件。
一个RTCIceTransport
对象具有下列内部插槽:
- [[IceTransportState]]初始化为
new
- [[IceGathererState]]初始化为
new
- [[SelectedCandidatePair]]初始化为
null
[Exposed=Window] interface RTCIceTransport : EventTarget {
readonly attribute RTCIceRole role;
readonly attribute RTCIceComponent component;
readonly attribute RTCIceTransportState state;
readonly attribute RTCIceGathererState gatheringState;
sequence<RTCIceCandidate> getLocalCandidates ();
sequence<RTCIceCandidate> getRemoteCandidates ();
RTCIceCandidatePair? getSelectedCandidatePair ();
RTCIceParameters? getLocalParameters ();
RTCIceParameters? getRemoteParameters ();
attribute EventHandler onstatechange;
attribute EventHandler ongatheringstatechange;
attribute EventHandler onselectedcandidatepairchange;
};
属性
RTCIceRole
类型的role
,只读:role
属性必须返回transport的ICE role。
RTCIceComponent
类型的component
,只读:component
属性必须返回transport
的ICE组件。当RTCP mux被使用时,单一的RTCIceTransport
同时传输RTP和RTCP,并且component
被设置为RTP
。
RTCIceTransportState
类型的state
,只读:当需要获得state
属性时,它必须返回[[IceTransportState]]插槽的值。
RTCIceGathererState
类型的gatheringState
,只读:当获取gathering state
属性时,它必须返回[[IceGathererState]]插槽的值。
EventHandler
类型的onstatechange
:此event handler,当RTCIceTransportstate
类型改变时,必须启动。
EventHandler
类型的ongatheringstatechange
:此event handler,当RTCIceTransportgatheringstate
改变时,必须启动。
EventHandler
类型的onselectedcandidatepairchange
:此event handler,当RTCIceTransport
选定的候选者对改变时,必须启动。
方法
getLocalCandidates
:返回一个序列,描述为RTCIceTransport
收集并在onicecandidate
中发送的本地候选者。
getRemoteCandidates
:返回一个序列,描述通过addIceCandidate()
,由RTCIceTransport
接收的ICE候选者。
NOTE:
getRemoteCandidates
不会暴露peer reflexive candidates,因为它们不是通过addIceCandidate()
接收的。
getSelectedCandidatePair
:返回用来发送数据包的选定候选者对。此方法必须返回[[SelectedCandidatePair]]插槽的值。
getLocalParameters
:返回通过setLocalDescription
由RTCIceTransport
接收的本地ICE参数,如果参数未被接收,则为null
。
getRemoteParameters
:返回通过setRemoteDescription
,由RTCIceTransport
接收的ICE远程参数,如果参数未被接收,则为null
。