webrtc笔记-信令部分(SDP)

webrtc处理两种数据,一种是协议相关的信令和媒体传输数据,一种是帧数据(主要是数字信号处理,将话筒、摄像设备采集的数字信号通过语音前端3A,编解码G711/H264/V8,渲染等算法进行处理)。主要关注协议相关的数据。

信令的一个主要功能是交换消息体,消息体可以是XML、X-Q931、SDP等,是一条消息的净荷部分,webrtc使用SDP描述媒体信息,默认使用Unified Plan。webrtc信令使用offer/answer也可使用sip协议交换SDP信息(通讯双方的网络、媒体等信息,SDP构建及交换主要使用WebRtcSessionDescriptionFactory类、Conductor类处理)。

SDP信息处理主要分两部分。网络(socket)信息主要使用JsepTransportController类处理,建立transport,connection用于收发数据;媒体编解码信息主要使用BaseChannel类处理,将信息设置到流,最终设置到channel(ChannelReceive/ChannelSend)用于处理数据。

SDP信息存储在JsepSessionDescription类,主要包括SessionDescription和JsepCandidateCollection信息。
Unified Plan,一个m行用一个ContentInfo存,会建立一个transceiver(mid-mline_index),一个transceiver只有一个sender/receiver(本端的SDP建sender,远端的SDP建receiver)。

transceiver的channel_成员变量是BaseChannel,BaseChannel的media_channel_成员变量WebRtcVoiceMediaChannel,sender/reciver的media_channel成员变量是WebRtcVoiceMediaChannel,BaseChannel主要用来将SDP的媒体信息set到WebRtcVoiceMediaChannel。

代码重要流程节点:
主叫
1、初始化AddTracks创建了msid:stream_id,audio_label;msid:stream_id,video_label
2、AddTrackUnifiedPlan创建transceiver , sender, receiver
3、CreateOffer,在InternalCreateOffer里创建本地会话描述SessionDescription,用来组SDP
4、AddAudioContentForOffer创建音频m line,CreateMediaContentOffer调用AddStreamParams比较重要的一点生成了SSRC
5、offer创建成功后,执行SetLocalDescription,将参数设置到音频引擎和p2p channel,搜集candidate等
desc->ToString调用SdpSerialize打包成SDP字符串后使用HTTP的post方法发给信令服务器

SDP详解:http://blog.itpub.net/69985788/viewspace-2740388/
博客里详细介绍了Unified Plan流相关的情况,一个mline 有一个mid标识,存在一个a:ssrc 一个ssrc、一个track 流,可能存在一个a:msid用于不同流同步(不同的m line相同msid)

参数:
JsepSessionDescription类、SessionDescription类、JsepCandidateCollection类表述SDP参数,给WebRtcSessionDescriptionFactory类构建消息

SDP的会话部分
o行
o=
sess-id:JsepSessionDescription::session_id_
sess-version:JsepSessionDescription::session_version_

connection_address_
a=msid-semantic:ContentGroup::semantics_

SDP的媒体部分
m行
m=
proto:ContentInfo::type

c行
c=IN IP4 0.0.0.0
MediaContentDescription::connection_address_

a=mid:ContentInfo::name

a=rtcp-mux:MediaContentDescription::rtcp_mux_

a=extmap:MediaContentDescription::rtp_header_extensions_

a=sendrecv:MediaContentDescription::direction_

ICE信息
ICE options:TransportDescription
a=ice-ufrag
a=ice-pwd

流信息
a=ssrc: :
groupid
track-id:StreamParams::id,StreamParams表示一个track
ssrcs
ssrc_groups
cname

codec信息
rtpmap、rtcp-fb、fmtp:Codec

候选信息
a=candidate

组包:
WebRtcSessionDescriptionFactory.cc:构建offer/answon接口,有TransportDescriptionFactory,MediaSessionDescriptionFactory类构建SDP消息体
webrtc_sdp.cc:根据会话描述参数打包成字符串

你可能感兴趣的:(音视频,webrtc)