rtp协议:rtcp包格式和传输间隔

RTP Control Protocol -- RTCP-rtp控制协议

实时传输控制协议(RTCP)基于对会话中的所有参与者定期传输控制包,使用与数据包相同的分发机制。底层协议必须提供数据包和控制包的多路复用,例如使用UDP时使用不同的端口号。RTCP执行四种功能:

  • 1、其主要功能是提供对数据分发质量的反馈。这是RTP作为传输协议角色的一个不可分割的部分,并且与其它传输协议的流量和拥塞控制功能相关(见第10节关于拥塞控制的要求)。这种反馈可能直接用于控制自适应编码[18,19],但通过IP组播的实验表明,从接收方获取反馈以诊断分发中的故障也是至关重要的。向所有参与者发送接收反馈报告,可以让观察到问题的人评估这些问题是局部的还是全局的。使用像IP组播这样的分发机制,也允许像网络服务提供商这样的实体(如果他们没有以其他方式参与会话)接收反馈信息,并充当第三方监控器来诊断网络问题。这种反馈功能由RTCP发送方和接收方报告执行,将在下面的第6.4节中描述。

  • 2、RTCP 携带了一个持久的传输层标识符,用于 RTP 源,称为规范名称或 CNAME,参见第 6.5.1 节。由于如果发现冲突或程序重启,SSRC 标识符可能会改变,接收方需要 CNAME 来跟踪每个参与者。接收方也可能需要 CNAME 来关联某个特定参与者在一组相关的 RTP 会话中的多个数据流,例如用于同步音频和视频。媒体间的同步还需要数据发送方在 RTCP 数据包中包含的 NTP 和 RTP 时间戳。

  • 3、前两个功能要求所有参与者发送 RTCP 数据包,因此必须控制发送速率,以便 RTP 能够扩展到大量参与者。通过让每个参与者将其控制数据包发送给所有其他参与者,每个参与者可以独立观察参与者的数量。这个数量被用来计算数据包的发送速率,如第 6.2 节所解释的。

  • 4、第四个功能是可选的,即传达最小的会话控制信息,例如在用户界面中显示的参与者标识。这在“松散控制”的会话中最有可能有用,在这样的会话中,参与者加入和离开时没有成员控制或参数协商。RTCP作为到达所有参与者的便捷通道,但不一定期望支持应用程序的所有控制通信需求。可能需要一个更高级别的会话控制协议,这超出了本文档的范围。

功能1到3应该在所有环境中使用,特别是在IP组播环境中。RTP应用程序的设计者应该避免只能工作在单播模式下且无法扩展到更大规模的机制。如第6.2节所述,RTCP的传输可以为发送方和接收方分别控制,在单向链路等情况下,接收方无法提供反馈。

非规范性注释:在称为源特定组播(SSM)的多播路由方法中,每个“通道”(源地址,组地址对)只有一个发送者,接收者(除了通道源之外)不能使用组播直接与其他通道成员通信。这里的建议仅通过第6.2节的选项来适应SSM,即完全关闭接收方的RTCP。未来的工作将指定对RTCP进行适应SSM的调整,以便可以保持来自接收方的反馈。

RTCP Packet Format-rtcp 包格式:

本规范定义了几种RTCP数据包类型,用于携带各种控制信息:

  • SR : 发送方报告,用于传输和接收活跃发送方参与者的统计信息。

  • RR:接收方报告,用于收集非活跃发送方参与者的接收统计信息,并结合发送方报告(SR),用于活跃发送方报告超过31个源的情况。

  • SDES : 源描述项,包括CNAME(规范名称)。

  • BYE  : 表示参与结束。

  • AAP :特定于应用程序的功能。

每个RTCP数据包都以与RTP数据包相似的固定部分组成,随后是结构化的元素,这些元素的长度可以根据数据包类型是可变的,但必须以32位边界结束。对齐要求和每个数据包固定部分中的长度字段被包含在内,是为了使RTCP数据包“可堆叠”。多个RTCP数据包可以不加任何分隔符地串联起来,形成一个复合的RTCP数据包,该数据包作为一个单独的下层协议数据包发送,例如UDP。复合数据包中没有明确计算个别RTCP数据包的数量,因为预期下层协议会提供整体长度以确定复合数据包的结束。

复合数据包中的每个单独的RTCP数据包可以独立处理,对数据包的顺序或组合没有要求。然而,为了执行协议的功能,施加了以下约束:

  • 接收统计信息(在SR或RR中)应尽可能频繁地发送,以便在带宽限制允许的情况下最大化统计信息的分辨率,因此每个定期传输的复合RTCP数据包必须包含一个报告数据包。

  • 新接收方需要尽快接收到某个源的CNAME(规范名称),以识别该源并开始将媒体关联起来,用于诸如音视频同步等目的,因此每个复合RTCP数据包也必须包含SDES(源描述协议)CNAME,除非复合RTCP数据包为了部分加密如第9.1节所述而被分割。

  • 为了增加第一个词中恒定位数的数量,并提高成功验证 RTCP 数据包以对抗错误地址的 RTP 数据包或其他无关数据包的概率,需要限制可能出现在复合数据包中的第一个数据包类型的数量。

因此,所有 RTCP 数据包必须以至少包含两个独立数据包的复合数据包的形式发送,格式如下:

  • 加密前缀:仅当复合数据包需要根据第9.1节中的方法进行加密时,它必须在每个传输的复合数据包前加上一个随机的32位量,且该量对于每个复合数据包都应重新绘制。如果加密需要填充(padding),则必须将其添加到复合数据包的最后一个数据包中。

  • SR和RR:复合数据包中的第一个RTCP(实时传输控制协议)包必须始终是一个报告包,以便于进行如附录A.2中描述的头部验证。即使没有发送或接收数据,也必须发送一个空的RR(接收者报告),并且即使复合数据包中唯一的另一个RTCP包是一个BYE包,也必须这样做。

  • 额外的接收者报告(RR):如果正在报告接收统计信息的源的数量超过了31个,即一个发送者报告(SR)或接收者报告(RR)包能够容纳的数量,那么应该在初始的报告包之后跟随额外的RR包。

  • SDES (源描述): 每个复合RTCP数据包中必须包含一个包含CNAME(规范名称)项的SDES(源描述)包,除非第9.1节中另有说明。如果特定应用需要,并且受到带宽限制(参见第6.3.9节),其他源描述项可以被可选地包含。

  • BYE or APP: 其他RTCP包类型,包括那些尚未定义的类型,可以以任何顺序跟随,但BYE应该是使用给定的同步源标识符(SSRC)/贡献源标识符(CSRC)发送的最后一个包。包类型可以出现一次以上。

为了正确估计每个参与者的RTCP带宽(参见第6.2节),单个RTP参与者应该在每个报告间隔内只发送一个复合RTCP数据包,除非如第9.1节所述,复合RTCP数据包被拆分以进行部分加密。如果源的数量太多,以至于无法在不超出网络路径的最大传输单元(MTU)的情况下将所有必要的接收者报告(RR)包放入一个复合RTCP数据包中,那么每个间隔只应包含能够适应一个MTU的子集。这些子集应该通过多个间隔的循环方式选择,以确保报告所有源。

建议转换器和混音器在可行的情况下,将它们转发的多个源的个别RTCP包组合成一个复合包,以分摊数据包开销(见第7节)。图1显示了一个混音器可能产生的RTCP复合包的示例。如果一个复合包的总长度将超过网络路径的最大传输单元(MTU),则应将其分割成多个较短的复合包,以便在底层协议的单独数据包中传输。这不会损害RTCP带宽估计,因为每个复合包至少代表一个不同的参与者。请注意,每个复合包必须以发送者报告(SR)或接收者报告(RR)包开始。

实现应该忽略它不认识的传入的RTCP包类型。额外的RTCP包类型可以通过互联网号码分配机构(IANA)注册,如第15节所述。

1223c4637110447249b09167c1013bd3.png

RTCP Transmission Interval-RTCP传输间隔:

RTP(实时传输协议)旨在允许应用程序在会话规模上自动扩展,从几个参与者到数千人不等。例如,在音频会议中,数据流量本质上是自我限制的,因为一次只有一到两个人会发言,所以通过多播分发,任何给定链路上的数据速率保持相对恒定,与参与者的数量无关。然而,控制流量并不是自我限制的。如果每个参与者的接收报告以固定速率发送,控制流量将随着参与者数量的增加而线性增长。因此,必须通过动态计算RTCP(实时传输控制协议)数据包传输间隔来降低速率。

对于每个会话,假定数据流量受到称为“会话带宽”的总体限制,该限制需要在参与者之间分配。这个带宽可能由网络预留,并且限制由网络强制执行。如果没有预留,可能会有其他约束,这些约束取决于环境,它们建立了会话可以使用的“合理”最大值,那就是会话带宽。会话带宽的选择可能基于某些成本或对会话可用网络带宽的先验知识。它在某种程度上独立于媒体编码,但编码选择可能受到会话带宽的限制。通常,会话带宽是预期同时活动的发送者的标称带宽之和。对于电话会议音频,这个数字通常是单个发送者的带宽。对于分层编码,每一层都是一个单独的RTP会话,具有自己的会话带宽参数。

会话带宽参数预计将由会话管理应用程序在调用媒体应用程序时提供,但媒体应用程序可以根据会话选定的编码为单发送者数据带宽设置一个默认值。应用程序还可以根据多播作用域规则或其他标准强制执行带宽限制。所有参与者必须使用相同的会话带宽值,以便计算出相同的RTCP(实时传输控制协议)间隔。

控制和数据流量的带宽计算包括底层传输和网络协议(例如,UDP和IP),因为这是资源预留系统需要知道的信息。应用程序也可以预期知道这些协议中的哪些正在使用。链路层头部不包括在计算中,因为数据包在传输过程中会被封装成不同的链路层头部。

控制流量应该限制在会话带宽的一小部分:小到不会影响传输协议的主要功能——传输数据;已知的,以便控制流量可以包含在给资源预留协议的带宽规格中,以便每个参与者可以独立计算其份额。控制流量的带宽是数据流量会话带宽之外的。建议将用于RTCP(实时传输控制协议)的会话带宽比例固定在5%。同样建议将RTCP带宽的1/4专门用于正在发送数据的参与者,这样在接收者众多而发送者较少的会话中,新加入的参与者将更快地接收到发送站点的CNAME(规范名称)。当发送者的比例超过参与者的1/4时,发送者将获得他们在整个RTCP带宽中的比例。虽然这些间隔计算中的值和其他常数的值并不关键,但会话中的所有参与者必须使用相同的值,以便计算出相同的间隔。因此,这些常数应该为特定的配置文件固定。

一个配置文件可以指定控制流量带宽可以是会话的一个独立参数,而不是会话带宽的严格百分比。使用一个独立的参数允许自适应速率的应用程序设置一个与会话带宽参数指定的最大带宽相比更低的“典型”数据带宽相一致的RTCP带宽。

该配置文件可以进一步指定,将控制流量的带宽分为两个独立的会话参数,分别用于那些活跃的数据发送者和非发送者;我们将这些参数分别称为 S 和 R。根据建议,1/4 的 RTCP 带宽应专用于数据发送者,那么这两个参数的推荐默认值分别为 1.25% 和 3.75%。当发送者的比例超过参与者中 S/(S+R) 的比值时,发送者将获得这些参数总和中相应的比例。

使用两个参数可以让 RTCP 接收报告完全关闭,即通过将非数据发送者的 RTCP 带宽设置为零,而保持数据发送者的 RTCP 带宽非零,以便仍然能够发送发送者报告以实现多媒体同步。完全关闭 RTCP 接收报告并不推荐,因为这些报告对于第 6 节开头列出的功能,特别是接收质量反馈和拥塞控制,是必需的。然而,对于在单向链路上运行的系统,或者不需要接收质量反馈和接收者存活性反馈、并且有其他方式避免拥塞的会话,这样做可能是合适的。

计算复合 RTCP 包之间的传输间隔时,还应设置一个下限,以避免在参与者数量较少且流量未按照大数定律平滑时,数据包突发传输超过允许的带宽。这也可以防止在网络暂时中断(如网络分区)期间,报告间隔变得过短,从而在网络恢复后延迟适应。在应用程序启动时,应在发送第一个复合 RTCP 包之前施加一个延迟,以便有时间接收来自其他参与者的 RTCP 包,使报告间隔更快地收敛到正确的值。这个延迟可以设定为最小间隔的一半,以更快地通知新的参与者的存在。固定最小间隔的推荐值为5秒。

实现时可以将最小 RTCP 间隔按会话带宽参数的倒数比例缩小,但有以下限制:

  • 对于多播会话,只有活跃的数据发送者可以使用缩小的最小值来计算复合 RTCP 包的传输间隔。

  • 对于单播会话,非活跃数据发送者也可以使用缩小的最小值,并且在发送初始复合 RTCP 包之前的延迟可以设为零。

  • 对于所有会话,在计算参与者超时时间间隔时(参见第 6.3.5 节),应使用固定的最小值,以确保未使用缩小值来传输 RTCP 包的实现不会被其他参与者过早超时。

  • 缩小后的最小值推荐为用 360 除以会话带宽(以千比特/秒为单位)得到的秒数。对于带宽大于 72 kb/s 的情况,这个最小值小于5秒。

第 6.3 节和附录 A.7 中描述的算法旨在实现本节中概述的目标。该算法计算发送复合 RTCP 包之间的间隔,以便在参与者之间分配允许的控制流量带宽。这使得应用程序能够在小型会话中快速响应,例如,在所有参与者的识别很重要的情况下,同时又能自动适应大型会话。该算法包含以下特性:

  • 计算得出的 RTCP 包之间的间隔与组成员的数量线性缩放。正是这个线性因子使得所有成员的控制流量总量保持恒定。

  • RTCP 包之间的间隔在 [0.5, 1.5] 倍的计算间隔范围内随机变化,以避免所有参与者出现意外的同步现象 [20]。加入会话后发送的第一个 RTCP 包也会通过随机变化延迟半个最小 RTCP 间隔。

  • 动态估算复合 RTCP 包的平均大小,包括所有接收到和发送出的包,以自动适应控制信息量的变化。

  • 由于计算的间隔取决于观测到的组成员数量,因此当新的用户加入现有会话或大量用户同时加入新会话时,可能会出现不理想的启动效果。这些新用户最初会错误地估计组成员数量,从而导致其 RTCP 传输间隔过短。如果许多用户同时加入会话,这个问题可能会很严重。为了解决这个问题,采用了一个称为“计时器重新考虑”的算法。该算法实现了一个简单的退避机制,当组规模增加时,用户会推迟 RTCP 包的传输。

  • 当用户通过发送 BYE 包或超时离开会话时,组成员数量会减少,因此计算的间隔应随之减小。使用“反向重新考虑”算法来使成员能够更快地响应组成员减少并缩短间隔。

  • BYE 包的处理方式与其他 RTCP 包不同。当用户离开组并希望发送 BYE 包时,可以在下一个预定的 RTCP 包之前发送。然而,BYE 包的传输遵循一种退避算法,以避免大量成员同时离开会话时产生大量的 BYE 包洪流。

  • 该算法可用于所有参与者均可发送的会话。在这种情况下,会话带宽参数是每个发送者的带宽乘以参与者数量的乘积,RTCP 带宽为其 5%。

算法的详细操作在接下来的章节中进行描述,附录 A.7 给出了一个示例实现。

Maintaining the Number of Session Members(维护会话的数量):

RTCP 包间隔的计算依赖于对会话中参与站点数量的估计。当听到新的站点时,将其加入计数,并应在一个以 SSRC 或 CSRC 标识符(参见第 8.2 节)为索引的表中为每个站点创建一个条目以进行跟踪。新的条目可以在接收到携带该 SSRC 的多个数据包之前,或在接收到包含该 SSRC 的 SDES RTCP 包(其中包含 CNAME)之前被视为无效(参见附录 A.1)。当接收到包含相应 SSRC 标识符的 RTCP BYE 包时,可以从表中删除该条目,但有可能在 BYE 包之后仍会收到一些拖延到达的数据包并导致重新创建该条目。因此,应将该条目标记为已接收到 BYE,然后在适当的延迟后再删除。

如果在多个(建议为 5 个)RTCP 报告间隔期间未收到 RTP 或 RTCP 包,参与者可以将另一个站点标记为不活动,或者如果该站点尚未被视为有效,则可以将其删除。这提供了一定的抗丢包能力。为了使该超时机制正常工作,所有站点必须具有相同的倍数值,并且必须计算出大致相同的 RTCP 报告间隔值。因此,此倍数值应为特定配置文件固定。

对于拥有大量参与者的会话,维护一个存储所有 SSRC 标识符和状态信息的表可能不切实际。实现可以使用 SSRC 采样,如 [21] 所述,以减少存储需求。实现可以使用任何其他具有类似性能的算法。一个关键要求是,任何考虑使用的算法不应严重低估组的大小,尽管可以高估。

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

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

相关文章

2024年医疗人工智能研究报告-生成式AI爆发,医疗人工智能走到新的十字路口(附下载)

前言 2024的医疗AI,既是坎坷,又是新生。 快速发展的大语言模型,携着生成式AI掠过医疗领域。过往的互联网医疗、医学影像、新药研发……一个一个场景经由新一代AI重塑,焕发出前所未有的价值。 不过,发现价值并不意味着…

网络请求自定义header导致跨域问题

我记得我的项目之前已经解决了跨域问题。 后来在功能开发着,需要添加一个自定义的header,发现又出现跨域报错。 于是又开始一通摸索折腾。 我的项目前面端是用axios网络请求,通过拦截器添加header,代码如下: //添加请…

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式,然后能在虚拟机上用,最起码新版的macOS镜像是不能用UltraISO,dmg2iso这种软件了,你直接转放到VMware里绝对读不出来,办法就是,在Mac系统中转换为cdr,然后再转成iso&am…

大语言模型数据流程源码解读(基于llama3模型)

文章目录 前言一、数据进入LlamaForCausalLM(LlamaPreTrainedModel)类二、数据进入LlamaModel(LlamaPreTrainedModel)类1、input_ids的embedding编码2、position_ids位置获取3、causal_mask因果mask构建1、causal_mask调用2、因果mask代码解读(_update_causal_mask)4、hidden_s…

MATLAB人脸考勤系统

MATLAB人脸考勤系统课题介绍 该课题为基于MATLAB平台的人脸识别系统。传统的人脸识别都是直接人头的比对,现实意义不大,没有一定的新意。该课题识别原理为:先采集待识别人员的人脸,进行训练,得到人脸特征值。测试的时…

Http 状态码 301 Permanent Rediret 302 Temporary Redirect、 重定向 重写

HTTP状态码301和302是什么? 1、HTTP状态码301 HTTP状态码301表示永久性转移(Permanent Redirect),这意味着请求的资源已经被分配了一个新的URI,以后的引用应该使用资源现在所指的URI。 HTTP 301状态码表示请求的资源…

如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?

在OA系统或者合同管理系统中,我们会经常遇到网页在线编辑Word文档形式的公文及合同的情况,并且需要上级对下级的公文进行批注等操作,或者不同部门的人需要签字审核,这就需要用到文档流转功能,如何用猿大师办公助手实现…

前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML

HTML 基础入门&#xff1a;从零开始构建网页骨架 目录 1. 什么是 HTML&#xff1f;HTML 的核心作用 2. HTML 基本结构2.1 DOCTYPE 声明2.2 <html> 标签2.3 <head> 标签2.4 <body> 标签 3. HTML 常用标签详解3.1 标题标签3.2 段落和文本标签3.3 链接标签3.4 图…

力扣hot100-->递归/回溯

目录 递归/回溯 1. 17. 电话号码的字母组合 2. 22. 括号生成 3. 39. 组合总和 4. 46. 全排列 5. 78. 子集 递归/回溯 1. 17. 电话号码的字母组合 中等 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到…

[MySQL#4] 表约束(1) | NULL | default | zerofill | 主键 | 自增长

目录 1. 表约束概述 2. 空属性&#xff08;null/not null&#xff09; 3. 默认值&#xff08;default&#xff09; 4. 列描述&#xff08;comment&#xff09; 5. zerofill 6. 主键&#xff08;primary key&#xff09; 7. 自增长&#xff08;auto_increment&#xff09…

Android中常用adb命令

目录 1.adb连接安卓模拟器 2.adb列出所有已经连接的设备 3.adb显示设备的日志信息 4.adb 电脑文件推送到安卓模拟器中 5.adb 手机传送文件到电脑 6.adb获取安卓应用的包名和Activity名 附录 1--命令 1&#xff09;adb devices 2&#xff09;adb install 路径> 3&#xff09;…

【项目管理】PMP冲刺真题200题 (题目+解析)乱序版 【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

尚硅谷 | Nginx | 学习笔记

尚硅谷 | Nginx | 学习笔记 尚硅谷Nginx教程由浅入深&#xff08;一套打通丨初学者也可掌握&#xff09;_哔哩哔哩_bilibili 文章目录 尚硅谷 | Nginx | 学习笔记一、Nginx相关概念1.Nginx是什么2.正向代理和反向代理正向代理反向代理 3.负载均衡和动静分离负载均衡动静分离 二…

小米迎来「新起点」:硬核创新从超越到引领,小米SU7 Ultra 发布

发布 | 大力财经 10月29日&#xff0c;小米15系列暨小米澎湃OS 2新品发布会在北京召开&#xff0c;小米集团创始人、董事长兼CEO雷军宣布了小米汽车原型车在纽北跑出6分46秒874的圈速&#xff0c;登顶“纽北全球最速四门车”的好消息&#xff0c;并领衔发布了小米15系列手机、…

若依微服务架构遇到的一些问题记录

一、nacos启动问题 需要看官网的准备工作&#xff0c;认真看&#xff0c;版本问题卡了两天 https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html#%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C 1.下载nacos&#xff0c;版本需要对应上 版本说明链接 2.记得运行数据库&#xff0…

【工具】Charles对360浏览器抓包抓包

Charles 和 switchy sharp 配合&#xff0c;可以对 Chrome 进行抓包也可以配合对360安全浏览器抓包。 本文以Windows 电脑中的配置为例&#xff0c;介绍如何实现抓包。&#xff08;Mac中操作基本一致&#xff09; 1.安装Charles 可根据自己的电脑下载对应的版本&#xff1a;…

小小猫棒onu替换家用光猫,薅运营商带宽羊毛,突破1000M

小小猫棒onu 一、总体步骤 1 记录原来光猫信息 主要包括SN&#xff0c;ploam密码&#xff0c;loid、loid密码、 mac、上网的vlan id等 一般gpon采用SN、ploam密码、SNploam密码三种中的一种认证方式 一般Epon采用loid&#xff08;逻辑id&#xff09;、mac、loid mac三种中…

Kafka-代码示例

一、构建开发环境 File > New > Project 选择一个最简单的模板 项目和坐标命名 配置maven路径 添加maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kaf…

vue2项目在发布后更新,提示用户刷新页面

1、在项目根目录创建resetVersion.js的文件&#xff0c;内容如下 &#xff08;具体路径可能会有点问题&#xff0c;但是不影响&#xff09; const path require(path); const fsExtra require(fs-extra);const runBuild async () > {try {const OUTPUT_DIR public; // …