webrtc的sdp相关结构1
sdp结构简介
sdp在JsepSessionDescription这一个结构中,下面主要分为SessionDescription和JsepCandidateCollection,本文介绍SessionDescription
根据webrtc的SessionDescription数据结构,主要分为3个,分别为ContentInfos,
TransportInfos和ContentGroups。他们都是vector。其中体量最大的数据结构是ContentInfos,里面存放有编解码能力,ssrc的相关信息,带宽能力等等。
其次是TransportInfos,里面存放的是用于打洞的ice用户名和密码等。
最小的结构是ContentGroups,里面存放的是一些字符串
SessionDescription具体结构
1.TransportInfo
1.1 content_name: 用于a=mid属性,表示对应media的名称
1.2 description:详见后面第7条
2.ContentGroup
2.1 semantics_:类型,有bundle。a=group
2.2 content_names_:一个group的media的名字的集合,比如包含”video”,”audio”
3.ContentInfo:
3.1 name:和TransportInfo中的name一样
3.2 type:协议是否是SCTP协议
3.3 rejected:是否拒绝对方的media,如果拒绝,会设置端口为0。
3.4 bundle_only:a=bundle-only属性,表示和其他media公用一个端口,前提是该media的port需要设置为0,如果不是0,就默认不是共用端口(备注:同时需要a=group属性来做支撑,不然怎么知道该media和哪个media进行的绑定)
3.5 description:详见后面第4条
- MediaContentDescription(该结构在ContentInfo中的description)
4.1 rtcp_mux_:rtp属性和rtcp属性是否公用一个端口, a=rtcp-mux
4.2 rtcp_reduced_size_:a=rtcp-rsize,表示缩小rtcp包,有固定算法
4.3 bandwidth_:带宽属性,a=bs
4.4 protocol_:media的类型,m= protocol属性
4.5 cryptos_
4.6 crypto_required_
4.7 rtp_header_extensions_:a=extmap
4.8 rtp_header_extensions_set_:有extension设置,就为true
4.9 multistream_:如果客户端支持多个流,就为true(代码中表示有rtx或者flexfec的流,就会设置为true)
4.10 streams_:存放ssrc的相关信息
4.11 conference_mode_:a=x-google-flag:conference,会议
4.12 partial_:目前webrtc没用
4.13 buffered_mode_latency_:目前webrtc没用
4.14 direction_:是收发,还是只收,还是只发,还是闲置状态
4.15 connection_address_:自己的ip和port
- StreamParamsVec(该结构在MediaContentDescription中的streams_)
StreamParamsVec为StreamParams的std::vector,以下解析的是StreamParams结构
5.1 groupid
5.2 id
5.3 ssrcs:存放所有的ssrc,a=ssrc
5.4 ssrc_groups:ssrc组信息,是fec还是sim还是fid。a=ssrc-group
5.5 type:
5.6 display:
5.7 cname: 一个endpoint只有一个cname。a=cname,a=ssrc cname
5.8 sync_label:代表msid。a=msid-semantic a=ssrc msid
6 Codec(该结构在ContentInfo中的description)
6.1 id:payload的id。a=fmtp,a=rtpmap,m=
6.2 name: payload的名字。
6.3 clockrate:比特率。a=rtpmap
6.4 params:参数。a=fmtp
6.5 feedback_params:a=rtcp-fb
7 TransportDescription(该结构在TransportDescription中的description)
7.1 transport_options:a=ice-options
7.2 ice_ufrag:ice的用户名, a=ice-ufrag
7.3 ice_pwd:ice的密码, a=ice-pwd
7.4 ice_mode:ice的连接类型,是full,还是lite。
7.5 connection_role:a=setup,表示连接中的角色,是主动连接,被动连接等
7.6 identity_fingerprint:a=fingerprint,加密算法