webrtc的sdp相关结构2

sdp结构简介

sdp在JsepSessionDescription这一个结构中,下面主要分为SessionDescription和JsepCandidateCollection。本文介绍JsepCandidateCollection。

JsepCandidateCollection在sdp中通过a=candidate,a=rtcp表示,从字段数量看起来和SessionDescription是不能相提并论的,但是如果看到a=candidate就会发现里面的结构也是多如牛毛,值得一章专门介绍。

注:参考本文前可以先了解stun,turn,ice的原理

JsepCandidateCollection具体结构

1.JsepIceCandidate

1.1 candidates_:详见后面第2条

2.JsepIceCandidate

2.1 sdp_mid_:表示media stream的名字,与上一章中SessionDescription的(ContentInfo的name,TransportInfo的name)一致

2.2 sdp_mline_index_:表示2.1字段对应的位置

2.3 Candidate:详见后面第3条

3.Candidate

3.1 id_:随机生成,sdp字符串中没有

3.2 component_:1对应rtp,2对应rtcp

3.3 protocol_:支持udp,tcp,ssltcp,tls

3.4 relay_protocol_:

3.5 address_:本机的地址,注意和c=属性一致(注:candidate有多个,而c属性只有一个,里面有一个选择的机制,包含有给每一个类型设置优先级,relay的优先级最高,其次flexive,其次host,最后unknown。优先级高的会被选择,而且要注意的是即便设置了c属性,如果有candidate属性,也会把candidate属性的值设入c属性)

3.6 priority_:优先级,因为可能有多个candidate,哪个candidate高就先用哪个尝试,大概算法就是host优先级高,其次flexive,最后relay

3.7 username_:就是ice的用户名,和TransportDescription中ice_ufrag一样,而且在username为空时,会设置TransportDescription中的值给它

3.8 password_:和3.7同理,代表ice的密码

3.9 type_:支持local,stun,prflx,relay

3.10 network_name_:webrtc暂时没有弄这块

3.11 network_type_:webrtc暂时没有弄这块

3.12 generation_:

3.13 foundation_:通过3.3,3.4,3.5,3.9计算crc得到,为了简单的判断两个candidate是否一致,如果两个foundation一样,那么可以只查看其中一个的candidate

3.14 related_address_:中转的ip和端口

3.15 tcptype_:支持active,passive,so

3.16 transport_name_;webrtc暂时没有弄这块

3.17 network_id_:

3.18 network_cost_:

3.19 url_:webrtc暂时没有弄这块

webrtc的sdp相关结构2