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暂时没有弄这块