如何在WebRTC中创建数据通道?
我想理解在WebRTC中如何交换ice-candidates以创建数据通道。
这就是为什么我用C++写了一个简单程序来创建数据通道,并通过UDP与客户端(浏览器)进行数据交换,但大量的标准让我困惑——到底能得到哪些具体数据?(这是我问题的最后问法)
我已经到了客户端开始测试我的ice-candidate的阶段。
你能帮我理解这个过程受哪些标准约束,客户端期望接收到哪些数据以创建数据通道吗。
因此,我的程序从客户端(浏览器)获得了SDP offer,并发送了answer:
v=0\r\no=- 7257762748323837376 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=application 50000 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:wylP\r\na=ice-pwd:gYAsdMeGLyL+3aYR+yOYzkEm\r\na=ice-options:trickle\r\na=fingerprint:sha-256 2C:4B:43:D2:C5:CC:8F:C4:30:9A:F6:47:AF:8C:19:06:D4:55:42:A2:42:CB:7B:EE:84:80:BD:EF:6B:B2:BD:D6\r\na=setup:passive\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n
随后它向客户端发送了唯一的ice-candidate:
{"candidate":"candidate:1976565984 1 udp 2113937151 127.0.0.1 50000 typ host generation 0 ufrag wylP network-cost 999","sdpMLineIndex":0,"sdpMid":"0","usernameFragment":"wylP"}
……并在127.0.0.1:5000收到100字节的数据——我猜测客户端已经开始测试我的ice-candidate:
00 01 00 50 21 12 a4 42 59 48 6a 58 6a 69 39 68
59 63 5a 52 00 06 00 09 77 79 6c 50 3a 77 79 6c
50 00 00 00 c0 57 00 04 00 00 03 e7 80 2a 00 08
44 05 e5 d7 74 1b f7 15 00 25 00 00 00 24 00 04
6e 00 1e ff 00 08 00 14 d2 67 58 0f ca 95 46 95
88 40 3e ad 5a eb ab 2b 1c 5c ff b1 80 28 00 04
6f 79 8d ca
这份数据的格式是什么,客户端期望从我这里接收到什么?
你能简要描述一下进一步建立数据通道的操作算法吗?
解决方案
接收到的数据是客户端(浏览器)的一次绑定请求。该数据的格式在RFC 5389中有描述(通用结构——第6 章 “STUN消息结构”)。客户端等待的是绑定响应消息(RFC 5389第 7.3.1.1章)。