SDP
sdp(Session Description Protocol)是一种会话描述协议,属于文本协议,即WebRTC中常说的信令(Signalling),是WebRTC用来协助建立p2p通讯的。主要用于协商双方通讯过程,传递基本信息,如:会话控制信息,用来开始和结束通话,即开始视频、结束视频这些操作指令;处理错误的消息;元数据,如各自的音视频解码方式、带宽;网络数据,对方的公网IP、端口、内网IP及端口。但是WebRTC的API并没有实现信令通信机制,所以使用者需要自己去实现。常见的信令交互图如下:
一旦信令服务建立好了,两个Peer之间建立了连接,理论上他们就可以进行点对点通讯了。
信令的交换过程如下图:
上图中Amy和Bob代表两个Peer,Amy发起会话邀请,首先会创建一个PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream添加到PeerConnection中。
Amy调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。Amy通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signal服务器发送给Bob。
Bob接收到Amy发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象并将它通过Signal服务器发送给Amy。
Amy接收到Bob发送过来的应答SDP对象,将其通过PeerConnection的SetRemoteDescription方法保存起来。这样双方就建立好了通信通道,彼此可以发送媒体数据了。
以下是一个实际使用的SDP内容,即各个字段解析:
v=0
//sdp的版本号,目前为0
o=- 4024479478678337639 2 IN IP4 127.0.0.1
//格式:o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
//username没有用-表示,sess-id为会话id,本处为4024479478678337639, sess-version为会话版本,本处为2,后面依次为
//TCP通信/IP4协议/本地ip
s=-
//会话名字,没有用-
t=0 0
//</