WebRTC 连接Linux端和Android端

2019-07-12 17:40发布

跨平台连接

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端不支持9798(编码协议的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 //删除此行中的101 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客户端.