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_la