先了解几个概念:

WebRTC  全称是 Web Real-Time Communication,即网页即时通信

ICE(交互式连接建立的协议): ICE 的工作是找到连接两个对等体的最佳路径, ICE 可以执行直接连接

ice算法是寻找最低等待时间的路径去连接两端,通常采用以下顺序寻找:

1.直接的UDP连接 (在且仅在这种情况下,一个STUN的服务器会被用来查找主机端面向网络的地址)。

2.直接的TCP连接, 通过HTTP端口

3.直接的TCP连接, 通过HTTPS端口间接的连接通过中继器/TURN服务器 (如果一个直接连接失败了, 比如当一个主机端位于防火墙之后阻止了NAT穿越)

 

STUN 服务器 :NAT的会话遍历实用程序(STUN)(缩写中的缩写)是一种协议,用于发现您的公共地址并确定路由器中可能阻止与对等方直接连接的任何限制

 

TUN 服务器: 中转服务器 两端没法直接连接,需要中专服务器进行数据转发

 

NAT:网络地址转换用于为您的设备提供公共IP地址。路由器将具有公用IP地址,并且连接到路由器的每个设备都将具有专用IP地址。请求将通过唯一端口从设备的专用IP转换为路由器的公共IP。这样,您不需要每个设备都有唯一的公用IP,但仍可以在Internet上找到它

 

SDP: 会话描述协议描述连接的多媒体内容(例如分辨率,格式,编解码器,加密等)的标准,以便一旦数据传输,两个端可以知道按照什么标准去解析数据

 

 

Webrtc通信过程:

  1. 连接turnServers
  2. 连接成功初始化相关参数创建PeerConnection连接,传入PCObserver这个监听者主要返回ICE相关信息,如返回收集到的ICE,ICE状态改变,网络改变被移除的ICE等
  3. onIceConnectionChange(final PeerConnection.IceConnectionState newState)ice状态改变(NEW,CHECKING,CONNECTED, COMPLETED,FAILED,DISCONNECTED,CLOSED);

CONNECTED:表示连接成功这个时候两端就可以通话,视频了

DISCONNECTED:如果网络变化了,或者切换了就会进入这个状态,他有可能恢复成CONNECTED,如果10秒内不能恢复就进入FAILED状态

FAILED:失败断开连接

 

  1. 创建createOffer();或者createAnswer();传入SDPObserver,SDPObserver主要有四个方法:onCreateSuccess(final SessionDescription origSdp),SDP创建成功

onSetSuccess():sdp 设置成功

onCreateFailure(final String error),sdp创建失败

onSetFailure(final String error),sdp设置失败
sdp创建成功后会马上设置到本地,回调设置成功还是设置失败的方法,如果成功就需要把SDP发送给远端。只有在SDP已经设置好了之后才能够设置ICE(注意:sdp设置好表示的是接收到对方的SDP设置好了,再设置接收到的对方ICE,本地端的SDP在创建的时候就设置了,本地端的ICE不需要单独设置,PCObserver回调的ICE,是提供给对方使用的)

 

  1. 网络切换ice可能会更改,将收集到的新的ICE发给对方

 

  1. 由于SDP信息比较大可以将字符串进行压缩

 

  1. ICE可能有多条数据,手机同时连接4G跟WIFI的情况下可能会有10条ice,所以建议打包发送,并且进行压缩

 

  1. ICE的相关方法回调在本地端SDP设置之后才会回调,所以ICE收集需要等到sdp收集之后才能够收集到

 

  1. 视频码流控制

比如 :

控制vp8视频码率:

a=rtpmap:100 VP8/90000

a=rtcp-fb:100 transport-cc

a=fmtp:100x-google-max-bitrate=2800;x-google-min-bitrate=1200;x-google-start-bitrate=200000  

 

控制vp9 视频码率

a=rtpmap:101 VP9/90000

a=rtcp-fb:101 transport-cc a=fmtp:101 x-google-max-bitrate=2800;x-google-min-bitrate=1200;x-google-start-bitrate=200000  a=rtpmap:107 H264/90000

说明:x-google-max-bitrate:视频码流最大值,当网络特别好时,码流最大能达到这个值,如果不设置这个值,网络好时码流会非常大

x-google-min-bitrate:视频码流最小值,当网络不太好时,WebRTC的码流每次5%递减,直到这个最小值为,如果没有设置这个值,网络不好时,视频质量会非常差

x-google-start-bitrate:视频编码初始值 ,当网络好时,码流会向最大值递增,当网络差时,码流会向最小值递减

 

链接:https://www.jianshu.com/p/d1c293d8b887
 

 

 

https://tools.ietf.org/html/rfc4566#section-5.2 描述了SDP每个字段的意思

 

https://juejin.im/post/5cf49ce8f265da1bbf69073f

 

https://www.jianshu.com/p/5902d4953ed9

 

    v=0

    o=- 7712567178795931157 2 IN IP4 127.0.0.1

    s=-

    t=0 0

    a=group:BUNDLE 0 1

    a=msid-semantic: WMS ARDAMS

    m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127

    c=IN IP4 0.0.0.0

    a=rtcp:9 IN IP4 0.0.0.0

    a=ice-ufrag:UF2j

    a=ice-pwd:mB97PVCQrZYPav46HR9YM36C

    a=ice-options:trickle renomination

    a=fingerprint:sha-256 53:19:FC:53:06:34:AA:D7:03:D0:AF:33:BC:CD:EF:98:47:9B:55:7A:E8:85:26:A5:32:9C:F8:FB:C1:24:96:7D

    a=setup:actpass

    a=mid:0

    a=extmap:14 urn:ietf:params:rtp-hdrext:toffset

    a=extmap:13 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

    a=extmap:12 urn:3gpp:video-orientation

    a=extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

    a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay

    a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type

    a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing

    a=extmap:8 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07

    a=extmap:9 http://www.webrtc.org/experiments/rtp-hdrext/color-space

    a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:mid

    a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id

    a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id

    a=sendrecv

    a=msid:ARDAMS ARDAMSv0

    a=rtcp-mux

    a=rtcp-rsize

    a=rtpmap:96 VP8/90000

    a=rtcp-fb:96 goog-remb

    a=rtcp-fb:96 transport-cc

    a=rtcp-fb:96 ccm fir

    a=rtcp-fb:96 nack

    a=rtcp-fb:96 nack pli

    a=rtpmap:97 rtx/90000

    a=fmtp:97 apt=96

    a=rtpmap:98 VP9/90000

    a=rtcp-fb:98 goog-remb

    a=rtcp-fb:98 transport-cc

    a=rtcp-fb:98 ccm fir

    a=rtcp-fb:98 nack

    a=rtcp-fb:98 nack pli

    a=rtpmap:99 rtx/90000

    a=fmtp:99 apt=98

    a=rtpmap:100 red/90000

    a=rtpmap:101 rtx/90000

    a=fmtp:101 apt=100

    a=rtpmap:127 ulpfec/90000

    a=ssrc-group:FID 12739588 1073745782

    a=ssrc:12739588 cname:8NzR3NkueJqp/hRM

    a=ssrc:12739588 msid:ARDAMS ARDAMSv0

    a=ssrc:12739588 mslabel:ARDAMS

    a=ssrc:12739588 label:ARDAMSv0

    a=ssrc:1073745782 cname:8NzR3NkueJqp/hRM

    a=ssrc:1073745782 msid:ARDAMS ARDAMSv0

    a=ssrc:1073745782 mslabel:ARDAMS

    a=ssrc:1073745782 label:ARDAMSv0

    m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 105 13 110 113 126

    c=IN IP4 0.0.0.0

    a=rtcp:9 IN IP4 0.0.0.0

    a=ice-ufrag:UF2j

    a=ice-pwd:mB97PVCQrZYPav46HR9YM36C

    a=ice-options:trickle renomination

    a=fingerprint:sha-256 53:19:FC:53:06:34:AA:D7:03:D0:AF:33:BC:CD:EF:98:47:9B:55:7A:E8:85:26:A5:32:9C:F8:FB:C1:24:96:7D

    a=setup:actpass

    a=mid:1

    a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

    a=extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

    a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:mid

    a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id

    a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id

    a=sendrecv

    a=msid:ARDAMS ARDAMSa0

    a=rtcp-mux

    a=rtpmap:111 opus/48000/2

    a=rtcp-fb:111 transport-cc

    a=fmtp:111 minptime=10;useinbandfec=1

    a=rtpmap:103 ISAC/16000

    a=rtpmap:9 G722/8000

    a=rtpmap:102 ILBC/8000

    a=rtpmap:0 PCMU/8000

    a=rtpmap:8 PCMA/8000

    a=rtpmap:105 CN/16000

    a=rtpmap:13 CN/8000

    a=rtpmap:110 telephone-event/48000

    a=rtpmap:113 telephone-event/16000

    a=rtpmap:126 telephone-event/8000

    a=ssrc:3433082832 cname:8NzR3NkueJqp/hRM

    a=ssrc:3433082832 msid:ARDAMS ARDAMSa0

    a=ssrc:3433082832 mslabel:ARDAMS

    a=ssrc:3433082832 label:ARDAMSa0

 

 

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐