网站看不到排版怎么办,网络信息公司是做什么的,网站 建设设计,深圳东门老街图片SDP简介
SDP 最常用于 RTC 实时通话的协商过程#xff0c;在 WebRTC 中#xff0c;通信双方在连接阶段使用 SDP 来协商后续传输过程中使用的音视频编解码器(codec)、主机候选地址、网络传输协议等。
在实际的应用过程中#xff0c;通信双方可以使用 HTTP、WebSocket、Data…SDP简介
SDP 最常用于 RTC 实时通话的协商过程在 WebRTC 中通信双方在连接阶段使用 SDP 来协商后续传输过程中使用的音视频编解码器(codec)、主机候选地址、网络传输协议等。
在实际的应用过程中通信双方可以使用 HTTP、WebSocket、DataChannel 等传输协议来相互传送 SDP 内容这个过程称作 offer/answer 交换也就是发起方发送 offer接收方收到 offer 后回复一个 answer。例如在下图的服务端架构中客户端将 offer 发送给信令服务器信令服务器转发给媒体服务器媒体服务器将 offer 和自身的能力进行比较后得到 answer信令服务器再将 answer转发给客户端随后客户端和媒体服务器就可以进行 RTP 通信。 SDP 协议的设计可以参考 rfc4566 文档。它是一种具有特殊约定格式的纯文本描述文档也就是它的内容都是由 UTF-8 编码的文本有点类似于 JSON/XML。一个 SDP 会话描述包括若干行 typevalue 形式的文本其中 type 是一个区分大小写的字母例如 v、m 等value 是一个结构化的文本格式不固定。通常 value 由若干分割符隔开的字段组成或者是一个字符串, 整个协议文本区分大小写。 两侧不允许有空格存在。
SDP 由一个会话级描述session level description和多个媒体级描述media level description组成。会话级描述的作用域是整个会话在 SDP 中从 v 行开始到第一个 m 行之前都是属于会话级描述的内容。媒体级描述对某个媒体流的内容进行描述例如某个音频流或者某个视频流从某个 m 行开始到下个 m 行之前是属于一个媒体级描述的内容。如下图所示 SDP 中有的字段是必须的有的字段是可选的可选的字段在如下的示例中都使用 * 进行标记。 SDP 中 type 出现的顺序是固定的按照如下顺序进行排列这样可以增强解析器错误检测的能力另外也可以简化解析器的实现。有一个很好的网站webrtchacks.com/sdp-anatomy… 可用于学习 SDP这个网站里面鼠标移动到 SDP 某一行时就会显示这一行 SDP 的具体含义。
# 1. 会话级别的描述及其字段
v (protocol version)
o (originator and session identifier)
s (session name)
i* (session information)
u* (URI of description)
e* (email address)
p* (phone number)
c* (connection information -- not required if included in all media)
b* (zero or more bandwidth information lines)
# 2. 一个或多个时间描述字段参见下文
z* (time zone adjustments)
k* (encryption key)
a* (zero or more session attribute lines)
# 3. 零个或多个媒体级别的描述字段参见下文# 时间描述的字段有这些
t (time the session is active)
r* (zero or more repeat times)# 媒体级别的描述字段有这些
m (media name and transport address)
i* (media title)
c* (connection information -- optional if included at session level)
b* (zero or more bandwidth information lines)
k* (encryption key)
a* (zero or more media attribute lines)
SDP示例
// SDP 版本信息v0// session 信息// ousername session-id session-version nettype addrtype unicast-addresso- 1873022542326151139 2 IN IP4 127.0.0.1// ssession names-// tstart-time stop-time如果不规定开始和结束时间两个都填 0 即可t0 0// 使用 a 来扩展的 bundle 属性其含义是 audio 和 video 使用同一个端口发送/接收具体可以参考下方的 RFC 文档// https://tools.ietf.org/html/draft-ietf-mmusic-sdp-bundle-negotiation-54agroup:BUNDLE audio video// 列出当前SDP中所有的 media stream id以空格分割// WMS 的含义是这里面的 media stream id 适配 webrtc 的 media stream// 参考 RFC 文档: https://datatracker.ietf.org/doc/html/draft-ietf-mmusic-msid-01#section-3amsid-semantic: WMS 34b34ced3c5623ea4213vx3// mmedia port proto fmt ...// port10 无实际含义真正通信使用的端口由 ICE Candidate 指定// protoUDP/TLS/RTP/SAVP 表示用 UDP 来传输 RTP 包并使用 DTLS 加密// 后面的一串数字是 fmt表示所有 codec 的 payloadtypemaudio 10 UDP/TLS/RTP/SAVPF 111 114 115 116 123 124 125// cnettype addrtype connection-addresscIN IP4 0.0.0.0// artcp:port [nettype addrtype connection-address]artcp:10 IN IP4 0.0.0.0// ICE 信息参考 RFC 文档: https://tools.ietf.org/html/rfc5245#section-15.4aice-ufrag:aZ/baice-pwd:3tFwvgPAA2PK3pPWoJjVz4FJaice-options:trickle renomination// DTLS 信息参考 RFC 文档: https://tools.ietf.org/html/rfc4572#section-5afingerprint:sha-256 5F:78:37:05:D7:83:46:05:F7:3F:17:35:2A:7E:81:D3:2D:26:71:87:8B:9F:57:02:53:30:E3:3E:B6:3E:49:D5// asetup:role// role可选active/passive/actpass/holdconn// 分别表示端点将发起一个传出连接、端点将接受传入连接、// 端点愿意接受传入连接或启动传出连接、端点暂时不想建立连接// 参考 rfc: https://tools.ietf.org/html/rfc4145#section-4asetup:actpass// amid:token// 这个 token 在 agroup 那一行中也有出现// 也就是说这里描述的媒体正是需要被 bundle 的// 参考 rfc: https://tools.ietf.org/html/rfc5888#section-6amid:audio// 以下是这个媒体支持的所有 RTP 扩展头// 参考rfc: https://tools.ietf.org/html/rfc8285// aextmap:value[/direction] URI extensionattributes// valueID// direction 可选 sendonly/recvonly/sendrecv/inactive默认值 sendrecv// URI 就是这个扩展头的 URI通信双方可以通过 URI 标明扩展头的含义让双方都能理解// 这里表示 ID1 的扩展头是 audio level 扩展头表示 RTP 包中会携带音频包音量大小// 参考 https://tools.ietf.org/html/rfc6464#section-4aextmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level// rtp stream 信息参考 rfc: https://tools.ietf.org/html/draft-ietf-avtext-rid-09aextmap:13 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id// 流的方向sendrecv 表示可以收也可以发// 参考 rfc:https://tools.ietf.org/html/rfc3264asendrecv// 这一行表示 rtcp 和 rtp 复用一个端口// 参考 rfc:https://tools.ietf.org/html/rfc5761 // 和 rfc:https://tools.ietf.org/html/rfc8035artcp-mux// artpmap:payload type encoding name/clock rate [/encoding parameters]// opus codec 的 payload,// 表明 fmt111 就是用来传输 opus 数据的// 参考 rfc: https://datatracker.ietf.org/doc/html/rfc7587artpmap:111 opus/48000/2// artcp-fb:payload type [...]// 表示支持的 rtcp 反馈报文类型// 这个反馈报文是 tcc 带宽探测用的// 参考 https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01artcp-fb:111 transport-cc// nack表示 fmt111 支持 nack 重传包artcp-fb:111 nack// afmtp 用来描述 codec 的一些特性例如这里表示期望的 opus 最小打包时间是 10ms并且使用 inbandfecafmtp:111 minptime10;useinbandfec1// 指明了音频 RTX 包的 payloadtype// 参考 rfc:https://tools.ietf.org/html/rfc4588#section-8.6artpmap:114 rtx/48000/2// apt 表示 fmt114 的 RTX 包是用来重传 fmt111 音频的afmtp:114 apt111// 指明了 rsfec 包的 payloadtypeartpmap:123 rsfec/48000/2// 指明了 red 包的 payloadtype// 参考 https://tools.ietf.org/html/rfc2198artpmap:124 red/48000/2// 指明了音频 RTX 包的 payloadtypeartpmap:125 rtx/48000/2// apt 表示 fmt125 的 RTX 包是用来重传 fmt124 的 red 包的afmtp:125 apt124// ssrc-group 指明了一组 ssrc 之间的关系FID 表明后一个 ssrc 是前一个 ssrc 的 rtx// https://tools.ietf.org/html/rfc5576#section-4.2assrc-group:FID 2952055605 1713037948// cname 的内容是一个 16 位 Base64 字符串含义是传输级的标识符同一个 PeerConnection 的值相同// 参考 https://datatracker.ietf.org/doc/html/rfc8834#section-4.9assrc:2952055605 cname:vqdagKn92E0lhuXn// 这里出现了两个字符串// 前一个是 media stream id后一个是 sender track id// media stream 主要用于音视频同步每个 track 以 media stream id 作为 sync label 进行同步// 参考 https://datatracker.ietf.org/doc/html/draft-ietf-mmusic-msidassrc:2952055605 msid:34b34ced3c5623ea4213vx3 34b34ced3c5623ea4213vx3a0// media stream idassrc:2952055605 mslabel:34b34ced3c5623ea4213vx3// sender track idassrc:2952055605 label:34b34ced3c5623ea4213vx3a0// video mediamvideo 10 UDP/TLS/RTP/SAVPF 96 97 101 102 103cIN IP4 0.0.0.0artcp:10 IN IP4 0.0.0.0aice-ufrag:aZ/baice-pwd:3tFwvgPAA2PK3pPWoJjVz4FJaice-options:trickle renominationafingerprint:sha-256 5F:78:37:05:D7:83:46:05:F7:3F:17:35:2A:7E:81:D3:2D:26:71:87:8B:9F:57:02:53:30:E3:3E:B6:3E:49:D5asetup:actpassamid:video// 传输时间偏移扩展头// 参考 https://datatracker.ietf.org/doc/html/rfc5450aextmap:2 urn:ietf:params:rtp-hdrext:toffset// abs-send-time 扩展头gcc 带宽探测用的aextmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time// 视频朝向扩展头// 参考 https://datatracker.ietf.org/doc/html/rfc6184aextmap:4 urn:3gpp:video-orientation// transport-cc 扩展头tcc 带宽探测用的aextmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01// 扩展头的内容是对播放延迟限制的值aextmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay// 视频内容类型扩展头aextmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type// 这个扩展头用于传输每帧的时间信息aextmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing// 视频的色域空间扩展头aextmap:12 http://www.webrtc.org/experiments/rtp-hdrext/color-space// 传输视频 SDES 信息的扩展头// 参考https://datatracker.ietf.org/doc/html/draft-ietf-avtext-rid-06aextmap:13 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-idasendrecvartcp-mux// 支持 rtcp 压缩// 参考 https://datatracker.ietf.org/doc/html/rfc5506#section-1artcp-rsize// 指明 fmt96 就是用来传输 H264 编码的视频的artpmap:96 H264/90000// remb 反馈报文gcc 带宽探测用的artcp-fb:96 goog-rembartcp-fb:96 transport-cc// FIR完整帧内请求反馈报文// 参考 https://datatracker.ietf.org/doc/html/rfc5104artcp-fb:96 ccm firartcp-fb:96 nack// PLI NACK 反馈报文// 参考 https://datatracker.ietf.org/doc/html/rfc5104artcp-fb:96 nack pli// 后面的是一些 H264 的参数afmtp:96 level-asymmetry-allowed1;packetization-mode1;profile-level-id42e01fartpmap:97 rtx/90000afmtp:97 apt96;packetization-mode1artpmap:101 red/90000afmtp:101 packetization-mode1artpmap:102 rtx/90000afmtp:102 apt101;packetization-mode1artpmap:103 rsfec/90000afmtp:103 packetization-mode1// ssrc-group:SIM 表示后面的这些 ssrc 是同一个流的 simulcastassrc-group:SIM 2955842370 1032318052assrc-group:FID 2955842370 521905126assrc-group:FID 1032318052 1492521545assrc:2955842370 cname:vqdagKn92E0lhuXnassrc:2955842370 msid:34b34ced3c5623ea4213vx3 34b34ced3c5623ea4213vx3v0assrc:2955842370 mslabel:34b34ced3c5623ea4213vx3assrc:2955842370 label:34b34ced3c5623ea4213vx3v0assrc:1032318052 cname:vqdagKn92E0lhuXnassrc:1032318052 msid:34b34ced3c5623ea4213vx3 34b34ced3c5623ea4213vx3assrc:1032318052 mslabel:34b34ced3c5623ea4213vx3assrc:1032318052 label:34b34ced3c5623ea4213vx3v0assrc:521905126 cname:vqdagKn92E0lhuXnassrc:521905126 msid:34b34ced3c5623ea4213vx3 34b34ced3c5623ea4213vx3v0assrc:521905126 mslabel:34b34ced3c5623ea4213vx3assrc:521905126 label:34b34ced3c5623ea4213vx3v0assrc:1492521545 cname:vqdagKn92E0lhuXnassrc:1492521545 msid:34b34ced3c5623ea4213vx3 34b34ced3c5623ea4213vx3v0assrc:1492521545 mslabel:34b34ced3c5623ea4213vx3assrc:1492521545 label:34b34ced3c5623ea4213vx3v0// 使用的 rsfec 的版本arsfec-version:1参考文档
SDP 格式规定RFC4566datatracker.ietf.org/doc/html/rf…offer/answer 交换过程RFC3264datatracker.ietf.org/doc/html/rf…SDP 各字段解释示例webrtchacks.com/sdp-anatomy…segmentfault.com/a/119000003…