跨平台连接
WebRTC的通常连接流程:
http://blog.csdn.net/qq_21358401/article/details/79190561
WebRTC SDP协议:
http://blog.csdn.net/qq_21358401/article/details/79341031
连接不同平台的PeerConnection的流程和通常流程没有什么区别.
但很容易遇到这些一个问题:
1. 不支持的音视频编解码器
WebRTC报错: failed to set video send codecs
意为不支持收到的SDP里声明的某个视频编码
我在连接linux和android端时 就出现了android端不支持97和98(编码协议的RTP序号)
所以需要在设置local或remote的SDP前 修改sdp 去掉不支持的codec
2. 不支持的传输协议
这个错误常见于和浏览器的peer连接
浏览器通常不支持 UDP/TLS 这两个传输选项(firefox上发现问题)
解决方法同样是修改SDP 去除不支持的传输协议
如何修改SDP
以去除不支持的编码器codec为例
截取部分video相关的sdp信息 去除对VP9的支持
m=video 9 UDP/TLS/RTP/SAVPF 100 101 116 117 96 97 98
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:kQ3y
a=ice-pwd:5QHoxQ17WUhFXGg8hld1gDq0
a=fingerprint:sha-256 F3:7B:B4:7E:6F:F9:4A:BF:11:6F:61:53:D3:76:98:BB:72:A3:46:E3:EA:E3:F7:01:17:45:89:36:BB:B1:36:07
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtpmap:101 VP9/90000
a=rtcp-fb:101 ccm fir
a=rtcp-fb:101 nack
a=rtcp-fb:101 nack pli
a=rtcp-fb:101 goog-remb
a=rtcp-fb:101 transport-cc
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=101
a=rtpmap:98 rtx/90000
a=fmtp:98 apt=116
修改后的SDP:
m=video 9 UDP/TLS/RTP/SAVPF 100 116 117 96 97 98
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:kQ3y
a=ice-pwd:5QHoxQ17WUhFXGg8hld1gDq0
a=fingerprint:sha-256 F3:7B:B4:7E:6F:F9:4A:BF:11:6F:61:53:D3:76:98:BB:72:A3:46:E3:EA:E3:F7:01:17:45:89:36:BB:B1:36:07
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=101
a=rtpmap:98 rtx/90000
a=fmtp:98 apt=116
WebRTC SDP 处理库
github repo:
https://github.com/sliver-chen/WebRTC-SDP
还在逐步的添加功能中.
示例代码
github repo:
https://github.com/sliver-chen/WebRTCam
基于WebRTC的网络摄像头 包括linux设备端 node服务端以及Android客户端.