开发学院

您的位置:首页>教程>正文

教程正文

​WebRTC 会话描述协议

WebRTC 会话描述协议


SDP是WebRTC的重要组成部分,它是用于描述媒体通信会话的协议。它不提供媒体数据,但用于各种音频和视频编解码器对等方之间的协商、网络拓扑和其他设备信息。它还需要易于传输。简单地说,我们需要一个基于字符串的配置文件,其中包含有关用户设备的所有信息,这就是SDP关心的地方。


SDP是一种众所周知的建立媒体连接的方法,它出现在90年代后期。在手机和基于文本的聊天之前,它已经被广泛应用于其他类型的应用程序中。


SDP是包含键值对的字符串数据,由换行符分隔,


key = value\n


key是设置值类型的单个字符,value是机器可读的配置值。


SDP涵盖指定用户的介质描述和介质约束,当我们稍后开始使用RtcPeerConnection对象时,我们可以轻松地将它的信息输出在JavaScript控制台。


SDP是点对点连接的第一部分,点对点必须在信令信道的帮助交换SDP数据,以建立连接。


下面是SDP提供的示例。


v=0 

o=- 487255629242026503 2 IN IP4 127.0.0.1 

s=- 

t=0 0 


a=group:BUNDLE audio video 

a=msid-semantic: WMS 6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG 

m=audio 9 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 

c=IN IP4 0.0.0.0


a=rtcp:9 IN IP4 0.0.0.0 

a=ice-ufrag:8a1/LJqQMzBmYtes 

a=ice-pwd:sbfskHYHACygyHW1wVi8GZM+ 

a=ice-options:google-ice 

a=fingerprint:sha-256 28:4C:19:10:97:56:FB:22:57:9E:5A:88:28:F3:04:

   DF:37:D0:7D:55:C3:D1:59:B0:B2:81 :FB:9D:DF:CB:15:A8 

a=setup:actpass 

a=mid:audio 

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level 

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time 


a=sendrecv 

a=rtcp-mux 

a=rtpmap:111 opus/48000/2 

a=fmtp:111 minptime=10 

a=rtpmap:103 ISAC/16000 

a=rtpmap:104 ISAC/32000 

a=rtpmap:9 G722/8000 

a=rtpmap:0 PCMU/8000 

a=rtpmap:8 PCMA/8000 

a=rtpmap:106 CN/32000 

a=rtpmap:105 CN/16000 

a=rtpmap:13 CN/8000 

a=rtpmap:126 telephone-event/8000 


a=maxptime:60 

a=ssrc:3607952327 cname:v1SBHP7c76XqYcWx 

a=ssrc:3607952327 msid:6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG 9eb1f6d5-c3b246fe

   -b46b-63ea11c46c74 

a=ssrc:3607952327 mslabel:6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG 

a=ssrc:3607952327 label:9eb1f6d5-c3b2-46fe-b46b-63ea11c46c74 

m=video 9 RTP/SAVPF 100 116 117 96 


c=IN IP4 0.0.0.0 

a=rtcp:9 IN IP4 0.0.0.0 

a=ice-ufrag:8a1/LJqQMzBmYtes

a=ice-pwd:sbfskHYHACygyHW1wVi8GZM+ 

a=ice-options:google-ice 


a=fingerprint:sha-256 28:4C:19:10:97:56:FB:22:57:9E:5A:88:28:F3:04:

   DF:37:D0:7D:55:C3:D1:59:B0:B2:81 :FB:9D:DF:CB:15:A8 

a=setup:actpass 

a=mid:video 

a=extmap:2 urn:ietf:params:rtp-hdrext:toffset 

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time


a=sendrecv 

a=rtcp-mux 

a=rtpmap:100 VP8/90000 

a=rtcp-fb:100 ccm fir 

a=rtcp-fb:100 nack 

a=rtcp-fb:100 nack pli 

a=rtcp-fb:100 goog-remb 

a=rtpmap:116 red/90000 

a=rtpmap:117 ulpfec/90000 

a=rtpmap:96 rtx/90000 


a=fmtp:96 apt=100 

a=ssrc-group:FID 1175220440 3592114481 

a=ssrc:1175220440 cname:v1SBHP7c76XqYcWx 

a=ssrc:1175220440 msid:6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG

   43d2eec3-7116-4b29-ad33-466c9358bfb3 

a=ssrc:1175220440 mslabel:6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG 

a=ssrc:1175220440 label:43d2eec3-7116-4b29-ad33-466c9358bfb3 

a=ssrc:3592114481 cname:v1SBHP7c76XqYcWx 

a=ssrc:3592114481 msid:6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG

   43d2eec3-7116-4b29-ad33-466c9358bfb3 

a=ssrc:3592114481 mslabel:6x9ZxQZqpo19FRr3Q0xsWC2JJ1lVsk2JE0sG 

a=ssrc:3592114481 label:43d2eec3-7116-4b29-ad33-466c9358bfb3


  乍看起来很复杂,它首先确定与特定IP地址的连接,然后设置发起请求方的基本信息,如音频和视频信息、加密类型。我们不需要理解这其中的每一个细节,只需要熟悉它就可以,因为你永远不需要直接操作它。


以下是SDP的应答数据


v=0 

o=- 5504016820010393753 2 IN IP4 127.0.0.1 

s=- 

t=0 0 

a=group:BUNDLE audio video 

a=msid-semantic: WMS 

m=audio 9 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 

c=IN IP4 0.0.0.0 


a=rtcp:9 IN IP4 0.0.0.0 

a=ice-ufrag:RjDpYl08FRKBqZ4A 

a=ice-pwd:wSgwewyvypHhyxrcZELBLOBO 

a=fingerprint:sha-256 28:4C:19:10:97:56:FB:22:57:9E:5A:88:28:

   F3:04:DF:37:D0:7D:55:C3:D1:59:B0:B2:81 :FB:9D:DF:CB:15:A8 

a=setup:active 

a=mid:audio 

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level 

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time 


a=recvonly 

a=rtcp-mux 

a=rtpmap:111 opus/48000/2 

a=fmtp:111 minptime=10 

a=rtpmap:103 ISAC/16000 

a=rtpmap:104 ISAC/32000 

a=rtpmap:9 G722/8000 

a=rtpmap:0 PCMU/8000 

a=rtpmap:8 PCMA/8000 

a=rtpmap:106 CN/32000 

a=rtpmap:105 CN/16000 

a=rtpmap:13 CN/8000 

a=rtpmap:126 telephone-event/8000 


a=maxptime:60 

m=video 9 RTP/SAVPF 100 116 117 96

c=IN IP4 0.0.0.0 

a=rtcp:9 IN IP4 0.0.0.0 

a=ice-ufrag:RjDpYl08FRKBqZ4A 

a=ice-pwd:wSgwewyvypHhyxrcZELBLOBO 

a=fingerprint:sha-256 28:4C:19:10:97:56:FB:22:57:9E:5A:88:28:

   F3:04:DF:37:D0:7D:55:C3:D1:59:B0:B2:81 :FB:9D:DF:CB:15:A8 

a=setup:active 

a=mid:video 

a=extmap:2 urn:ietf:params:rtp-hdrext:toffset 

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time


a=recvonly 

a=rtcp-mux 

a=rtpmap:100 VP8/90000 

a=rtcp-fb:100 ccm fir 

a=rtcp-fb:100 nack 

a=rtcp-fb:100 nack pli 

a=rtcp-fb:100 goog-remb 

a=rtpmap:116 red/90000 

a=rtpmap:117 ulpfec/90000 

a=rtpmap:96 rtx/90000 

a=fmtp:96 apt=100



你可以在https://www.rfc-editor.org/rfc/rfc4317.txt找到更多的SDP例子, 同时在http://tools.ietf.org/html/rfc4566也有更多关于SDP的细节描述.


总而言之,SDP作为您设备的基于文本的配置文件给试图连接到您的其他用户。