rtp协议

news2024/11/26 3:11:39

RTP协议

在实时音视频通话中,我们通常使用 UDP 作为传输层协议,使用 RTP 协议包荷载音视频数据,RTP(Real-time Transport Protocol)是一种在 Internet 上传输多媒体数据的应用层协议,它通常建立在 UDP 之上(也可以建立在 TCP 上)。UDP 协议没有序号等信息,而 RTP 协议可以补充许多音视频传输必要的信息,让音视频数据到达对端后可以重新组合完整,RTP 本身只保证实时数据的传输,并不能提供可靠传输保证,也没有流量控制,拥塞控制机制,它通常与 RTCP 配合使用以提供这些服务。

协议解析

RTP 协议格式如下,红色部分为 RTP 协议可选字段,RTP 协议最小为 12 byte。
rtp协议

RTP固定头部字段介绍
固定头部字段

  • version (V): 2 bits RTP 协议版本号,固定为2即可
  • padding §: 1 bit 填充标识位,如果该位为 1,说明该 RTP 包末尾包含了一个或多个填充字节,最后一个字节的值表示填充的字节数(包含最后一个字节本身),一般在一些需要固定块大小的加密算法中才需要填充
  • extension (X): 1 bit 扩展标识位,如果该位为 1,说明有扩展头部信息(Extension header)
  • CSRC count (CC): 4 bits 共享媒体源个数,一般用于混音和混屏中,例如某个音频流是混合了其它音频后的数据,那么其它音频源就是该音频源的 CSRC
  • marker (M): 1 bit Mark 标记位,对于不同的负载类型有不同含义,例如使用 RTP 荷载 H264 码流时,如果某个帧分成多个包进行传输,可以使用该位标记是否为帧的最后一个包
  • payload type (PT): 7 bits 负载包类型,接收端可以根据该信息查找相应的解码器进行解码,Payload Type 值对应的编解码类型请参考 https://www.rfc-editor.org/rfc/rfc3551.html#page-32
  • sequence number: 16 bits 序列号,每个 RTP 包序号递增加一,接收端根据序列号可以判断传输是否丢包,序列号初始值是随机的
  • timestamp: 32 bits 相对时间戳信息,反映 RTP 数据包数据采样时间,一个帧的数据可能被分成多个 RTP 包发送,同一个帧的时间戳是相同的,不同帧的时间戳是不相同的,该值初始值是随机的,单位的含义与数据采样频率有关
  • SSRC: 32 bits 媒体源的标识,不同的 SSRC 标识不同的媒体源,例如不同用户的音频就属于不同的媒体源,具有不同的
  • CSRC list: 0 to 15 items, 32 bits each 共享媒体源列表,表示对 RTP 包内载荷起作用的媒体源,参见 CC 解释,CSRC 最多 15 个

扩展头部介绍

现有的RTP数据包头格式可能支持大多数应用程序类所需的公共函数集的完整集,但是还需要满足其他一些需求,有些特定的场合,RTP固定包头的字段内容无法满足,这就需要额外附加信息表征特性,从而RTP定义了扩展头,位于固定头最后。在RFC3550中定义的扩展头格式如下:
扩展头部字段
If the X bit in the RTP header is one, a variable-length header extension MUST be appended to the RTP header, following the CSRC list if present. The header extension contains a 16-bit length field that counts the number of 32-bit words in the extension, excluding the four-octet extension header (therefore zero is a valid length). Only a single extension can be appended to the RTP data header. To allow multiple interoperating implementations to each experiment independently with different header extensions, or to allow a particular implementation to experiment with more than one type of header extension, the first 16 bits of the header extension are left open for distinguishing identifiers or parameters. The format of these 16 bits is to be defined by the profile specification under which the implementations are operating. This RTP specification does not define any header extensions itself.

从rfc3550这段话中,注意到两点点

  • 头扩展包含一个16位的defined by profile字段和16位长度的字段表征扩展头长度,此处的长度是扩展头32位的个数,比如,扩展头长度是8字节,则length=2。
  • 两个缺陷
    • 首先在每个rtp包中最多只允许一个扩展头;
    • 其次,该规范没有提供关于如何分配16位头扩展标识符defined by profile以避免冲突的方案。

在RFC5285中针对以上两个缺陷做出了修改,针对第一个,新协议在单个RTP包中可以有多个扩展头,通过定义URI命名的扩展元素;定义在IETF规范中定义的扩展元素的IANA注册表,以及用于在命名URI和RTP数据包中携带的标识符值之间映射的会话描述协议(SDP)方法,从而消除了第二个缺陷。数据包中的每个扩展元素都具有一个本地标识符(ID)和一个长度。流中存在的本地标识符必须在带外进行协商或定义,每个不同的扩展都必须有一个唯一的ID。值0保留用于填充,不能用作本地标识符。

这些主要是应用不做详细说明,请参考 RTP扩展头这篇博客

RTP应用实践

  • 【TCP负载的RTP】
    在这里插入图片描述
    RFC4571 Framing Real-time Transport Protocol (RTP) and RTP Control Protocol (RTCP) Packets over Connection-Oriented Transport规定了基于面向连接传输协议的RTP/RTCP包的封装。
    A 16-bit unsigned integer LENGTH field, coded in network byte order (big-endian), begins the frame. If LENGTH is non-zero, an RTP or RTCP packet follows the LENGTH field. The value coded in the LENGTH field MUST equal the number of octets in the RTP or RTCP packet. Zero is a valid value for LENGTH, and it codes the null packet.
    GB28181中基于tcp的视频流传输就是根据RFC4571进行规范的

  • 【RTSP interleaved frame】

    • 背景 某些防火墙或者其他网络环境强制服务器使用同一个连接交替传输RTSP信令与视频流数据。这种交替传输方式应当避免除非有必要。因为它在复杂化客户端与服务端的通信的同时,带来额外的开销。Interleaved binary data SHOULD only be used if RTSP is carried over TCP.
    • Stream data such as RTP packets is encapsulated by an ASCII dollar sign (24 hexadecimal), followed by a one-byte channel identifier, followed by the length of the encapsulated binary data as a binary, two-byte integer in network byte order. The stream data follows immediately afterwards, without a CRLF, but including the upper-layer protocol headers. Each $ block contains exactly one upper-layer protocol data unit, e.g., one RTP packet. 简单来说就在LENGTH字段前面又添加了两个字节,第一个字节固定为0x24,第二个字节表示信道id
  • 【强制wireshark将UDP包负载解析为RTP】

    • RTP/RTCP很少单独使用,一般结合RTSP或者SIP信令来使用,后者负责协商RTP的五元组,前者负责基于协商好的五元组进行音视频流的传输。可以看出RTP的端口并不是固定的,在wireshark解析包的时候,可以根据上下文信息,自动将相关包解析为RTP,但在没有上下文信息缺失的情况,这种自动解析就失效了。
    • 选定要解析的包,右击-> Decode as …,在弹出的对话框中,字段是包过滤条件,这里是TCP Port为554的包,当前双机可以选择RTP,选好后确定即可。
      在这里插入图片描述

持续更新内容如下

  • 多种保存RTP负载的方法
  • RTP发送H264流
  • 多种从RTP包中保存H264流的方式

参考文献

  • rfc3550 RTP: A Transport Protocol for Real-Time Applications
  • rtfc3551 RTP Profile for Audio and Video Conferences with Minimal Control
  • rfc5285 A General Mechanism for RTP Header Extensions
  • rfc4571 Framing Real-time Transport Protocol (RTP) and RTP Control Protocol (RTCP) Packets over Connection-Oriented Transport
  • rfc2326 Real Time Streaming Protocol (RTSP)
    • rtp协议解析实战参考 Live555 MultiFramedRTPSource.cpp:296

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

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

相关文章

RabbitMQ学习(五):RabbitMQ持久化

一、持久化概念在上一章内容中我们已经看到了如何处理任务不丢失的情况,但是如何保障当 RabbitMQ 服务停掉后消 息生产者发送过来的消息不丢失呢?默认情况下 RabbitMQ 退出或由于某种原因崩溃时,它将忽视队列 和消息,除非告知它不…

Python 考试练习题4

1. 将元组 (1,2,3) 和集合 {4,5,6} 合并成一个列表。 tup(1,2,3) set{4,5,6} listlist(tup)list(set) print(list) 2. 在列表 [1,2,3,4,5,6] 首尾分别添加整型元素 7 和 0。 #方法1 list[1,2,3,4,5,6] list.insert(0,7) #list.append(0) 这两种也可以 #list.insert(len(list…

PowerJob的server启动都经历了哪些?代码不多也很简单,咱们来逐一理解。

这是一篇让你受益匪浅的文章,点个关注交流一下吧~ PowerJob如何使用,官方文档已经说的很详细了,即使没学过计算机的人,按照那上面的步骤来也是可以搭建出一个可以使用的例子来,所以今天就不在这里重复前人的工作&#…

DataWhale 大数据处理技术组队学习task1

DataWhale 大数据处理技术组队学习task1 一、大数据概述 1. 大数据时代(详细内容参考参考文章) 2. 大数据的概念(又或者是特点) 4V 数据量大(Volume) 数据来源:可以是计算机、手机&#xff…

Linux 常用命令——【 2.查看程序端口占用及网络连接 netstat 命令】

文章目录1. netstat 简介2.命令格式:3. 命令参数:4. 常用命令1. netstat 简介 netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,…

ACWING寒假每日一题python

ACWING寒假每日一题 一、孤独的照片 一个点一个点的来看,比如对于GHGHG中间的G,找到他的左边的G,以及右边的G的位置,l,r分别等于1,答案就要多加上11 但是如果对于 GHHGHHG 中间的G,我们可以看到l,r等于2&a…

【计算机网络期末复习】第六章 应用层

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为想复习学校计算机网络课程的同学提供重点大纲,帮助大家渡过期末考~ 📚专栏地址: ❤️如果有收获的话,欢迎点…

Echarts 修改雷达图背景分割面,分割线颜色,设置数据线颜色

第016个点击查看专栏目录Echarts的雷达图背景可以是圆形的,也可以是多边形的,背景颜色,线条颜色都可以做个性化设置,这里是改变背景灰色,设置为浅红色。分割线也变成浅蓝色。同时数据线的颜色也变成了亮色。参考源代码…

【LeetCode】最大正方形 [M](动态规划)

221. 最大正方形 - 力扣(LeetCode) 一、题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例 1: 输入:matrix [["1","0","1","0…

从零实现WebRTC(二):WebRTC的通信过程

文章目录一、WebRTC需要解决的问题二、ICE(Interactive Connectivity Establishment)三、ICE的详细步骤四、知识点四一、WebRTC需要解决的问题 WebRTC是由google提出的的一个用于端到端实现p2p音视频通信的框架。比起其他的hls, http-flv等直播方案,webrtc在公网的…

ChatGPT的来源-InstructGPT论文简要介绍

文章目录前言一、ChatGPT是什么?二、ChatGPT的前身InstructGPT论文解读论文下载地址:主要内容:模型训练数据类型结果效果示例总结前言 现在大火的ChatGPT功能十分强大,不仅可以回答用户问题,编写故事,甚至…

Spring Cloud Alibaba Sentinel 熔断降级与OpenFeign整合

熔断降级 概述 对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API&…

关于基线长度对双天线GNSS测姿精度的影响

文章目录一、GNSS测姿原理1. 载波相位双差求解基线向量2. GNSS姿态角表示二、基线长度对GNSS测姿精度的影响三、GNSS定向产品精度描述实例四、参考文献在GNSS定向模块或者板卡的指标参数中,我们一般会看到航向的测量精度和基线的长度相关。在实际使用,用…

Python if else条件语句详解

在刚学习 Python 的时候,我们看到的代码都是顺序执行的,也就是先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为顺序结构。 但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限…

BERT在CNN上也能用?看看这篇ICLR Spotlight论文丨已开源

如何在卷积神经网络上运行 BERT?你可以直接用 SparK —— 字节跳动技术团队提出的提出的稀疏层次化掩码建模 ( Designing BERT for Convolutional Networks: Sparse and Hierarchical Masked Modeling ),近期已被人工智能顶会 ICLR 2023 收录为 Spotligh…

论文投稿指南——中文核心期刊推荐(植物保护)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

JavaScript原型、原型链、原型方法

文章目录原型和原型链prototype、 __ proto __ 、constructor原型链原型方法instanceOfhasOwnPropertyObject.create()、new Object()总结原型和原型链 prototype、 __ proto __ 、constructor 首先我们看下面一段代码 // 构造函数Personfunction Person(name, age) {this.na…

无法访问org.springframework.boot.SpringApplication

问题 更新idea版本后使用过程中发生下面的错误 Error:(3, 32) java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: D:\maven-repository\org\springframework\boot\spring-boot\3.0.0\spring-boot-3.0.0.jar(org/springframework/boot/SpringApplicati…

【ChatGPT】如何使用python调用ChatGPT API?

是什么ChatGPT? ChatGPT 是由 OpenAI 开发的一个语言模型。OpenAI 是一家领先的人工智能研究机构。ChatGPT 基于变换器架构,使用深度学习生成会话风格的文本。该模型在大量文本数据上进行训练,并可以针对特定任务进行微调。例如,它…

2023年,产业互联网八大趋势

从全世界的TO B发展线来看,中国的TO B企业不是脚步最快的,但它们却也正在通过汲取中国数字经济高速发展的养料不断成长,同时主动下沉,成为新的产业数字化的底盘,做撑举起未来数字中国的无名力量。 作者|皮爷 出品|…