由于项目有视频聊天的需求,在网上了解到谷歌开源的webrtc可以实现p2p的视频通信,参考了很多网上的资料,最终还是硬着头皮去webrtc官网,找到基于webrtc官网的demo,demo本身是基于本机的,源代码是模拟了两个pc来通信,要实现局域网两台设备建立webrtc连接,前提是双方拿到对方的sdp和icecandidate,彼此交换对方的这两个信息,就可以视频聊天了。webrtc使用了大量的异步函数,所以在需要获取同步等待结果返回的时候,需要在调用webrtc异步函数的时候,声明自己的方法也为异步的,使用关键字async,然后在需要等待webrtc异步函数返回的地方才能使用await.比如一下,被叫方接收到对方的sdp后,需要返回自己的sdp给对方,但是webrtc的createAnswer本身是异步的,不声明async就无法使用await来获取被叫的sdp,也就是answer,
//接收对方视频
pc1.addEventListener('track', gotRemoteStream);
//sdp信息
sdp: 'v=0\r\n' +
'o=- 8052014341169179559 2 IN IP4 127.0.0.1\r\n' +
's=-\r\n' +
't=0 0\r\n' +
'a=group:BUNDLE 0 1\r\n' +
'a=msid-semantic: WMS 1eb10fb2-e3c8-4e4e-9870-1104ec8c18c5\r\n' +
'm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 125 104\r\n' +
'c=IN IP4 0.0.0.0\r\n' +
'a=rtcp:9 IN IP4 0.0.0.0\r\n' +
'a=ice-ufrag:j8uE\r\n' +
'a=ice-pwd:rAhd4UW0wBS+D82R2gXsBAi1\r\n' +
'a=ice-options:trickle\r\n' +
'a=fingerprint:sha-256 15:BC:51:0E:B8:68:D4:78:61:BB:C1:34:34:D2:83:CB:0F:C3:BF:81:DC:BE:2F:00:28:39:DA:D5:BA:65:9
1:68\r\n' +
'a=setup:actpass\r\n' +
'a=mid:0\r\n' +
'a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\n' +
'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n' +
'a=extmap:4 urn:3gpp:video-orientation\r\n&