如何使用WebRTC在两个对等方之间协商数据通道?
WebRTC如何使用WebRTC在两个对等方之间协商数据通道?,webrtc,sctp,rtcdatachannel,Webrtc,Sctp,Rtcdatachannel,WebRTCRTPeerConnection接口有一个方法和一个事件处理程序。这些是如何相互作用的?如何创建可用于在两个对等方之间发送/接收数据的单个数据通道 另外,RTCDataChannelInit构造函数有一个字段,默认情况下该字段设置为false,并表示它会导致在频带内宣布频道。如果设置为true,会发生什么情况?首先:要创建任何数据通道,对等方需要交换一个SDP提供/应答,协商所有数据通道使用的SCTP连接的属性。这在默认情况下不会发生;在调用createOffer之前,您必须调用cr
RTPeerConnection
接口有一个方法和一个事件处理程序。这些是如何相互作用的?如何创建可用于在两个对等方之间发送/接收数据的单个数据通道
另外,
RTCDataChannelInit
构造函数有一个字段,默认情况下该字段设置为false
,并表示它会导致在频带内宣布频道。如果设置为true
,会发生什么情况?首先:要创建任何数据通道,对等方需要交换一个SDP提供/应答,协商所有数据通道使用的SCTP连接的属性。这在默认情况下不会发生;在调用createOffer
之前,您必须调用createDataChannel
,以使要约包含此SCTP信息(SDP中的“m=application”部分)
如果不这样做,数据通道状态将永远停留在连接处
因此,有两种方法可以在两个对等方之间协商数据通道:
带内协商
如果协商的
字段未设置为true
,则默认情况下会出现这种情况。一个对等方调用createDataChannel
,另一个连接到ondatachannel
EventHandler
。工作原理:
createDataChannel
ondatachannel
EventHandler
。它与对等方A创建的数据通道具有相同的属性,现在可以使用这些数据通道双向发送数据createDataChannel
,另一边监听ondatachannel
,而只需在两侧调用createDataChannel
createDataChannel({协商:true,id:0})
readyState
将更改为open
)。它们由ID匹配,ID是底层SCTP流IDondatachannel
操心
因此,对于仅使用固定数量数据通道的应用程序,建议使用此方法
请注意,您选择的ID不仅仅是一个任意值。它表示一个基于0的底层SCTP流ID。这些ID只能达到WebRTC实现协商的SCTP流的数量。因此,如果您使用的ID太高,您的数据通道将无法工作
本机应用程序呢?
如果您使用的是而不是JSAPI,那么它的工作方式也是一样的;事物只是有不同的名称
C++:
PeerConnectionObserver::OnDataChannel
DataChannelInit::协商
DataChannelInit::id
PeerConnection.Observer.onDataChannel
DataChannel.Init.agreemented
DataChannel.Init.id
RTPeerConnectionDelegate::didOpenDataChannel
RTCDataChannelConfiguration::isagreemented
RTCDataChannelConfiguration::channelId
- 这里有一篇非常深入的文章,介绍点对点的详细信息
主要来源