WebRTC音视频直播系统中的SDP规范协商是如何实现核心驱动的?

2026-05-25 19:441阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1091个文字,预计阅读时间需要5分钟。

WebRTC音视频直播系统中的SDP规范协商是如何实现核心驱动的?

想要让音视频正常显示,需要知道对方支持哪些解码方式、传输协议等。SDP(Session Description Protocol)实际上就是当数据到来时,告诉数据自己这里支持的解码方式、传输协议等,这样数据才能根据这些信息正确解码和传输。

想让音视频正常显示得知道对方支不支持 一、什么是SDP
  • SDP(Session Description Protocal)其实就是当数据过来时候,告诉数据自己这里支持的解码方式、传输协议等等,这样数据才能根据正确的方式进行解码使用

  • SDP一般包括:媒体类型、媒体格式、传输协议、传输的 IP 和端口

  • SDP的格式大概如下:

  • v=0 :表示 SDP 的版本号

  • o=<username><session id><version><network type><address type><address>:表示一个会话发起者的描述,包括用户名、会话标识、版本号、网络类型、地址类型、IP地址等,如果username不重要的话可以用-代替

  • m=<media><port><transport><fmt list>:表示对媒体的描述,包括媒体类型、端口、传输协议以及媒体格式等

  • rtpmap:是 rtp 与 map 的结合,即 RTP 参数映射表,包括负载类型、编码器名称、采样率、参数等

// 以上表示会话描述 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

二、什么是规范协商
  • 就是看看你的设备都支持那些编解码器,我的设备是否也支持?如果我的设备也支持,那么咱们双方就算协商成功了

  • 而规范协商的重要性在于,让双方找到共同支持的媒体能力,从而实现彼此之间的音视频通信

  • WebRTC中提供了 RTCPeerConnection 类,来进行端与端之间的连接

var pc = new RTCPeerConnection(pcConfig)

三、规范协商的过程
  • 在通讯双方都创建好 RTCPeerConnection 对象后,它们就可以开始进行规范协商了

  • Offer:在双方通讯时,呼叫方发送的 SDP 消息称为 Offer

  • answer:在双方通讯时,被呼叫方发送的 SDP 消息称为 Answer

四、规范协商的实现
  • createOffer:创建 Offer

  • createAnswer:创建 Answer

    WebRTC音视频直播系统中的SDP规范协商是如何实现核心驱动的?

  • setLocalDescription:设置本地 SDP 信息

  • setRemoteDescription:设置远端的 SDP 信息

// 呼叫方创建 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)); } });

本文共计1091个文字,预计阅读时间需要5分钟。

WebRTC音视频直播系统中的SDP规范协商是如何实现核心驱动的?

想要让音视频正常显示,需要知道对方支持哪些解码方式、传输协议等。SDP(Session Description Protocol)实际上就是当数据到来时,告诉数据自己这里支持的解码方式、传输协议等,这样数据才能根据这些信息正确解码和传输。

想让音视频正常显示得知道对方支不支持 一、什么是SDP
  • SDP(Session Description Protocal)其实就是当数据过来时候,告诉数据自己这里支持的解码方式、传输协议等等,这样数据才能根据正确的方式进行解码使用

  • SDP一般包括:媒体类型、媒体格式、传输协议、传输的 IP 和端口

  • SDP的格式大概如下:

  • v=0 :表示 SDP 的版本号

  • o=<username><session id><version><network type><address type><address>:表示一个会话发起者的描述,包括用户名、会话标识、版本号、网络类型、地址类型、IP地址等,如果username不重要的话可以用-代替

  • m=<media><port><transport><fmt list>:表示对媒体的描述,包括媒体类型、端口、传输协议以及媒体格式等

  • rtpmap:是 rtp 与 map 的结合,即 RTP 参数映射表,包括负载类型、编码器名称、采样率、参数等

// 以上表示会话描述 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

二、什么是规范协商
  • 就是看看你的设备都支持那些编解码器,我的设备是否也支持?如果我的设备也支持,那么咱们双方就算协商成功了

  • 而规范协商的重要性在于,让双方找到共同支持的媒体能力,从而实现彼此之间的音视频通信

  • WebRTC中提供了 RTCPeerConnection 类,来进行端与端之间的连接

var pc = new RTCPeerConnection(pcConfig)

三、规范协商的过程
  • 在通讯双方都创建好 RTCPeerConnection 对象后,它们就可以开始进行规范协商了

  • Offer:在双方通讯时,呼叫方发送的 SDP 消息称为 Offer

  • answer:在双方通讯时,被呼叫方发送的 SDP 消息称为 Answer

四、规范协商的实现
  • createOffer:创建 Offer

  • createAnswer:创建 Answer

    WebRTC音视频直播系统中的SDP规范协商是如何实现核心驱动的?

  • setLocalDescription:设置本地 SDP 信息

  • setRemoteDescription:设置远端的 SDP 信息

// 呼叫方创建 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)); } });