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-e0ed14f25327m=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-059b0210459cm=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"参数取决于通信双方的支持和协商
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生活随笔,记录我的日常点点滴滴.

前言 😘个人主页:曲终酣兴晚^R的小书屋🥱 😕作者介绍:一个莽莽撞撞的🐻 💖专栏介绍:日常生活&往事回忆 😶‍🌫️每日金句:被人暖一下就高热&…

catboost推理开GPU加速

核心设置 model.predict(feature, task_type‘GPU’) 代码参考 # 训练配置 params {"catboost": {"n_estimators": 7000,"learning_rate": 0.03,"eval_metric": "AUC","loss_function": "RMSE",&qu…

【sgDragSize】自定义拖拽修改DIV尺寸组件,适用于窗体大小调整

核心原理就是在四条边、四个顶点加上透明的div,给不同方向提供按下移动鼠标监听 ,对应计算宽度高度、坐标变化 特性: 支持设置拖拽的最小宽度、最小高度、最大宽度、最大高度可以双击某一条边,最大化对应方向的尺寸;再…

一次Linux中的木马病毒解决经历(6379端口---newinit.sh)

病毒入侵解决方案 情景 最近几天一直CPU100%,也没有注意看到了以为正常的服务调用,直到腾讯给发了邮件警告说我的服务器正在入侵其他服务器的6379端口,我就是正常的使用不可能去入侵别人的系统的,这是违法的. 排查 既然入侵6379端口,就怀疑是通过我的Redis服务进入的我的系统…

Vue基础-1.知识导航

知识导航(就问全不全) 当学习 Vue.js 时,除了基本的 HTML、CSS 和 JavaScript 知识外,还有一些其他的技术和语法需要了解,例如 ES6 和 TypeScript。以下是您可能需要学习的一些基础知识和对应的学习资源,我…

css中变量和使用变量和运算

变量: 语法:--css变量名:值; --view-theme: #1a99fb; css使用变量: 语法:属性名:var( --css变量名 ); color: var(--view-theme); css运算: 语法:属性名…

vue3 rouer params传参的问题

route.params在页面刷新的时候数据会丢失,所以vue3 弃用了params方式! 但是,vue3又更新了一个替代params的方式:history API import { useRouter } from "vue-router" const router userRouter; // 跳转路由&#xff…

JDBC封装与设计模式

什么是 DAO ? Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用,将数据在实体类和数据库记录之间进行转换。 ----------------------------------------------------- DAO模式的组成部分 …

数据结构--拓扑排序

数据结构–拓扑排序 AOV⽹ A O V ⽹ \color{red}AOV⽹ AOV⽹(Activity On Vertex NetWork&#xff0c;⽤顶点表示活动的⽹)&#xff1a; ⽤ D A G 图 \color{red}DAG图 DAG图&#xff08;有向⽆环图&#xff09;表示⼀个⼯程。顶点表示活动&#xff0c;有向边 < V i , V j …

计算机网络的性能指标

计算机网络的性能指标 1. 速率 速率是指数据在网络中传送的速度&#xff0c;通常用比特率或数据率来表示&#xff0c;单位是b/s&#xff0c;或bit/s&#xff0c;即比特每秒&#xff0c;或者bps(bit per second)。 速率单位&#xff1a;1 Ybps 10^24 bps(尧), 1 Zbps 10^21…

python中的lstm:介绍和基本使用方法

python中的lstm&#xff1a;介绍和基本使用方法 未使用插件 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种循环神经网络&#xff08;RNN&#xff09;的变体&#xff0c;专门用于处理序列数据。LSTM 可以记忆序列中的长期依赖关系&#xff0c;这使得它非常适合于各…

深度思考rpc框架面经之四

7 netty机制的一些理解 推荐阅读&#xff1a; 深度思考netty网络编程框架 7.1 Netty支持的端口号: Netty可以绑定到任何合法的端口号&#xff0c;这与大多数网络库类似。有效的端口范围是从0到65535&#xff0c;但通常建议使用1024以上的端口&#xff0c;因为0-1023的端口已…

算法与数据结构(二十四)最优子结构原理和 dp 数组遍历方向

注&#xff1a;此文只在个人总结 labuladong 动态规划框架&#xff0c;仅限于学习交流&#xff0c;版权归原作者所有&#xff1b; 本文是两年前发的 动态规划答疑篇open in new window 的修订版&#xff0c;根据我的不断学习总结以及读者的评论反馈&#xff0c;我给扩展了更多…

【STM32】高效开发工具CubeMonitor快速上手

工欲善其事必先利其器。拥有一个辅助测试工具&#xff0c;能极大提高开发项目的效率。STM32CubeMonitor系列工具能够实时读取和呈现其变量&#xff0c;从而在运行时帮助微调和诊断STM32应用&#xff0c;类似于一个简单的示波器。它是一款基于流程的图形化编程工具&#xff0c;类…

面试题:线程池的底层工作原理

线程池的几个重要的参数&#xff1a; 1、corePoolSize&#xff1a;线程池的核心线程数&#xff08;也是默认线程数&#xff09; 2、maximumPoolSize&#xff1a;最大线程数 3、keepAliveTime&#xff1a;允许的线程最大空闲时间&#xff08;单位/秒&#xff09; 线程池内部是…

链表之第二回

欢迎来到我的&#xff1a;世界 该文章收入栏目&#xff1a;链表 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言第一题&#xff1a;反转一个链表第二题&#xff1a;链表内指定区间反转第三题&#xff1a;判断一个链表…

opencv+ffmpeg+QOpenGLWidget开发的音视频播放器demo

前言 本篇文档的demo包含了 1.使用OpenCV对图像进行处理&#xff0c;对图像进行置灰&#xff0c;旋转&#xff0c;抠图&#xff0c;高斯模糊&#xff0c;中值滤波&#xff0c;部分区域清除置黑&#xff0c;背景移除&#xff0c;边缘检测等操作&#xff1b;2.单纯使用opencv播放…

一个案例:Vue2组件化开发组件从入门到入土

1. 环境搭建 1.1. 创建项目 npm install -g vue/clivue create vue_study_todolist1.2. 清空项目代码 清楚HelloWorld.Vue代码中的内容。 1.3. 启动空项目 1.4 项目目标 项目组件实现以下效果 2. 组件拆分代码 Vue是一个基于组件的框架&#xff0c;允许您将界面拆分成小的…

open cv学习 (五) 图像的阈值处理

图像的阈值处理 demo1 # 二值化处理黑白渐变图 import cv2 img cv2.imread("./img.png", 0) # 二值化处理 t1, dst cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow("img", img) cv2.imshow("dst", dst) cv2.waitKey() cv2.des…

Golang使用MinIO

最近在使用Golang做了一个网盘项目&#xff08;学习&#xff09;&#xff0c;文件存储一直保存在本地&#xff08;各厂商提供的oss贵&#xff09;&#xff0c;所以就在思考怎么来处理这些文件&#xff0c;类似的方案很对hdfs、fastdfs&#xff0c;但这其中MinIO是最近几年比较火…