其他分享
首页 > 其他分享> > 6┃音视频直播系统之 WebRTC 核心驱动SDP规范协商

6┃音视频直播系统之 WebRTC 核心驱动SDP规范协商

作者:互联网

一、什么是SDP

// 以上表示会话描述
v=0
o=- 4443765930623427689 2 IN IP4 127.0.0.1
s=-
t=0 0 

// 下面的媒体描述,在媒体描述部分包括音频和视频两路媒体
m=audio 9 UDP/TLS/RTP/SAVPF 104 100 105 9 8 8 106 105 13 111 312 113 43

// 对音频媒体描述
a=rtpmap:111 opus/72000/2
// 对格式参数的描述
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/32000
a=rtpmap:104 ISAC/16000

// 对视频媒体描述
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 
a=rtpmap:96 VP8/7000

 

二、什么是规范协商

var pc = new RTCPeerConnection(pcConfig)

 

三、规范协商的过程

 

四、规范协商的实现

// 呼叫方创建 Offer
// 当呼叫方发起呼叫之前,首先要创建 Offer 类型的 SDP 信息
function doCall() {
 	console.log('Sending offer to peer');
  // 正确触发setLocalAndSendMessage方法,错误触发handleCreateOfferError方法
 	pc.createOffer(setLocalAndSendMessage, handleCreateOfferError);
}

// 可以在该方法里获取到RTCSessionDescription 类型的 SDP 信息
function setLocalAndSendMessage(sessionDescription) {
  pc.setLocalDescription(sessionDescription);
  sendMessage(sessionDescription);
}

// 被呼叫方收到 Offer
// 调用 setRemoteDescription 方法设置呼叫方发送给它的 Offer 作为远端描述
socket.on('message', function(message) {
	if (message.type === 'offer') {
 		pc.setRemoteDescription(new RTCSessionDescription(message));
 		doAnswer();
 	}
});

// 被呼叫方创建 Answer
// 被呼叫方会成一个与远程会话兼容的本地会话,并最终将该会话描述发送给呼叫方
function doAnswer() {
 	pc.createAnswer().then(
 		setLocalAndSendMessage,
 		onCreateSessionDescriptionError
 	);
}

// 呼叫方收到 Answer
// 当呼叫方收到 SDP 时,将收到的会话描述设置为一个远程会话
socket.on('message', function(message) {
	if (message.type === 'answer') {
 		pc.setRemoteDescription(new RTCSessionDescription(message));
 	}
});

 

标签:SDP,Offer,WebRTC,pc,message,音视频,呼叫,描述
来源: https://www.cnblogs.com/autofelix/p/16273820.html