SDP 与Rtcp-fb

1、sdp介绍

SDP(Session Description Protocol)是一种用于描述多媒体会话的协议,它在会话层起着重要的作用。SDP的主要功能是提供会话的元数据和配置信息,以便参与者能够协商和建立一致的会话。

以下是SDP在会话层的作用:

  1. 会话描述:SDP提供关于会话的描述,包括会话的起始时间、结束时间、会话名称、会话发起者等。这些信息帮助参与者了解会话的基本属性。

  2. 媒体描述:SDP包含了关于会话中每个媒体流的描述,例如音频、视频、数据等。媒体描述包括媒体类型、传输协议、编解码器信息、网络地址等。通过这些描述,参与者可以了解如何传输和处理会话中的不同媒体数据。

  3. 媒体协商:SDP允许参与者在会话建立过程中进行媒体协商。通过SDP,参与者可以提供自己支持的媒体编解码器、传输协议和其他参数。参与者可以交换SDP消息以协商媒体流的编码格式、传输选项和其他相关设置,从而达成一致的媒体配置

2、sdp Offer

v=0
o=- 4849970681842256719 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS eb733957-3cc6-4765-b18f-e0ed14f25327

m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:5ntO
a=ice-pwd:G2W0QvXRMnpYrWhn1aVqJPkh
a=ice-options:trickle
a=fingerprint:sha-256 4D:0C:B5:4C:7E:1E:04:B3:1A:ED:67:B5:F4:B1:D0:00:12:C9:C9:4C:7A:92:63:D4:CE:39:82:94:2C:97:4C:7A
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:eb733957-3cc6-4765-b18f-e0ed14f25327 03522f49-55e7-47c1-b260-059b0210459c
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:126 telephone-event/8000
a=ssrc:1267016006 cname:jJhO4vLtJlw1ziFr
a=ssrc:1267016006 msid:eb733957-3cc6-4765-b18f-e0ed14f25327 03522f49-55e7-47c1-b260-059b0210459c

m=video 9 UDP/TLS/RTP/SAVPF 96 97 102 103 104 105 106 107 108 109 127 125 39 40 45 46 98 99 100 101 112 113 116 117 118
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:5ntO
a=ice-pwd:G2W0QvXRMnpYrWhn1aVqJPkh
a=ice-options:trickle
a=fingerprint:sha-256 4D:0C:B5:4C:7E:1E:04:B3:1A:ED:67:B5:F4:B1:D0:00:12:C9:C9:4C:7A:92:63:D4:CE:39:82:94:2C:97:4C:7A
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:eb733957-3cc6-4765-b18f-e0ed14f25327 6306e127-1df4-4d8e-b6c2-d860a5dedd74
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:103 rtx/90000
a=fmtp:103 apt=102
a=rtpmap:104 H264/90000
a=rtcp-fb:104 goog-remb
a=rtcp-fb:104 transport-cc
a=rtcp-fb:104 ccm fir
a=rtcp-fb:104 nack
a=rtcp-fb:104 nack pli
a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:105 rtx/90000
a=fmtp:105 apt=104
a=rtpmap:106 H264/90000
a=rtcp-fb:106 goog-remb
a=rtcp-fb:106 transport-cc
a=rtcp-fb:106 ccm fir
a=rtcp-fb:106 nack
a=rtcp-fb:106 nack pli
a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=106
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:39 H264/90000
a=rtcp-fb:39 goog-remb
a=rtcp-fb:39 transport-cc
a=rtcp-fb:39 ccm fir
a=rtcp-fb:39 nack
a=rtcp-fb:39 nack pli
a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f
a=rtpmap:40 rtx/90000
a=fmtp:40 apt=39
a=rtpmap:45 AV1/90000
a=rtcp-fb:45 goog-remb
a=rtcp-fb:45 transport-cc
a=rtcp-fb:45 ccm fir
a=rtcp-fb:45 nack
a=rtcp-fb:45 nack pli
a=rtpmap:46 rtx/90000
a=fmtp:46 apt=45
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:112 H264/90000
a=rtcp-fb:112 goog-remb
a=rtcp-fb:112 transport-cc
a=rtcp-fb:112 ccm fir
a=rtcp-fb:112 nack
a=rtcp-fb:112 nack pli
a=fmtp:112 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f
a=rtpmap:113 rtx/90000
a=fmtp:113 apt=112
a=rtpmap:116 red/90000
a=rtpmap:117 rtx/90000
a=fmtp:117 apt=116
a=rtpmap:118 ulpfec/90000
a=ssrc-group:FID 130771272 388261291
a=ssrc:130771272 cname:jJhO4vLtJlw1ziFr
a=ssrc:130771272 msid:eb733957-3cc6-4765-b18f-e0ed14f25327 6306e127-1df4-4d8e-b6c2-d860a5dedd74
a=ssrc:388261291 cname:jJhO4vLtJlw1ziFr
a=ssrc:388261291 msid:eb733957-3cc6-4765-b18f-e0ed14f25327 6306e127-1df4-4d8e-b6c2-d860a5dedd74

会话描述

o=- 4849970681842256719 2 IN IP4 127.0.0.1 

媒体描述

m=audio:音频媒体流的负载类型在a=rtpmap行中定义。例如,a=rtpmap:111 opus/48000/2表示负载类型111对应于opus编解码器。
m=video:视频媒体流的负载类型同样在a=rtpmap行中定义。例如,a=rtpmap:96 VP8/90000表示负载类型96对应于VP8编解码器。


3、在提供的SDP中,负载类型102和104都对应于H.264编解码器,

  参数配置(fmtp):不同

   - 对于负载类型102:`a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f`
   - 对于负载类型104:`a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f`

   注意到这两个负载类型在`packetization-mode`参数上有所不同。对于负载类型102,设置为1,而对于负载类型104,设置为0。这表示在负载类型102中使用了分片(packetization),而负载类型104中没有使用分片。

 RTCP反馈(rtcp-fb):是相同的

   - 负载类型102的RTCP反馈:`a=rtcp-fb:102 goog-remb`, `a=rtcp-fb:102 transport-cc`, `a=rtcp-fb:102 ccm fir`, `a=rtcp-fb:102 nack`, `a=rtcp-fb:102 nack pli`
   - 负载类型104的RTCP反馈:`a=rtcp-fb:104 goog-remb`, `a=rtcp-fb:104 transport-cc`, `a=rtcp-fb:104 ccm fir`, `a=rtcp-fb:104 nack`, `a=rtcp-fb:104 nack pli`

   这些RTCP反馈配置是为了支持不同的功能,如拥塞控制(REMB、Transport-CC)、请求关键帧(CCM FIR)、重传(NACK)和重要帧指示(NACK PLI)。这些反馈可能在负载类型102和104之间的具体实现或优先级上有所不同。


4、负载类型102和104之间的分片模式(packetization mode)的差异会对视频传输产生具体的影响。

负载类型102中的分片模式设置为1(packetization-mode=1),表示使用分片模式。这意味着H.264视频帧在传输时将被分割成更小的数据包(也称为分片)进行传输。这种分片模式通常被称为"Single NAL Unit Mode",即每个RTP包中仅包含一个NAL单元。

相比之下,负载类型104中的分片模式设置为0(packetization-mode=0),表示不使用分片模式。这意味着H.264视频帧将作为完整的NAL单元进行传输,而不进行分割。

具体影响如下:

1. 延迟:使用分片模式(负载类型102)可以将视频帧拆分为较小的数据包,这可能有助于降低传输延迟。较小的数据包可以更快地传输和处理,从而减少端到端的延迟。

1. 丢包恢复:在负载类型102中使用分片模式,即每个RTP包仅包含一个NAL单元,如果发生丢包,只丢失单个NAL单元而不会影响整个视频帧。这使得丢失的单元可以更容易地通过重传(NACK)或其他恢复机制进行补偿。

1. 压缩效率:分片模式(负载类型102)会增加一些额外的开销,因为每个RTP包都需要包含NAL单元的头部和额外的RTP头部。相比之下,非分片模式(负载类型104)将整个NAL单元作为一个单一的数据包进行传输,从而减少了一些额外的开销。

需要注意的是,分片模式的选择可能根据网络条件、传输需求和设备兼容性等因素进行调整。因此,在实际应用中,选择合适的分片模式可以根据具体情况进行评估和调整。


5、rtcp-fb为什么有这么多个

在SDP中,"rtcp-fb"(RTCP Feedback)用于定义RTCP的反馈机制,以支持各种功能,如拥塞控制、容错机制和质量反馈等。每个"rtcp-fb"参数对应一个特定的功能或反馈类型。

在提供的SDP中,有多个"rtcp-fb"参数是因为不同的视频编解码器和传输配置可能需要不同的RTCP反馈机制。每个"rtcp-fb"参数都指定了相应的负载类型(payload type),以及支持的具体反馈类型。

例如,"rtcp-fb:96 goog-remb"指定了负载类型96(对应VP8编解码器),并启用了Google的拥塞控制反馈(REMB)。"rtcp-fb:102 transport-cc"指定了负载类型102(对应H.264编解码器),并启用了传输层拥塞控制(Transport-CC)。其他的"rtcp-fb"参数也类似地指定了不同的编解码器和反馈类型的组合。

这些"rtcp-fb"参数的存在是为了满足不同编解码器和传输需求的灵活性和互操作性。具体使用哪些"rtcp-fb"参数取决于通信双方的支持和协商
 

你可能感兴趣的:(网络,c语言,音视频)