RTP分析

2023-05-16

参考

RTP(A Transport Protocol for Real-Time Applications–实时传输协议,rfc3550)
RTP Payload Format for H.264 Video(rfc6184)
https://en.wikipedia.org/wiki/Real-time_Transport_Protocol
RTP包组成:
image.png

头部

RTP头部最小12字节(没有CSRC没有扩展头部)
image.png

  • V (Version): (2位) RTP协议版本号,rfc3550规定是2。
  • P (Padding): (1位) 如果设置了padding位,则数据包的末尾包含一个或多个额外的填充字节(八位),它们不是有效负载的一部分。填充的最后一个八位字节包含应忽略的字节数,包括其本身。某些具有固定块大小的加密算法或在较低层协议数据单元中承载多个RTP数据包可能需要填充。
  • X (Extension): (1位) 如果设置了扩展位,则RTP头部后面必须紧跟一个扩展头部,格式见第5.3.1节。
  • CC (CSRC count): (4位) 表示SSRC后面的CSRC数量。
  • M (Marker): (1位) 标记一帧的结束,由负载类型决定含义。当多个RTP包携带1帧数据时,前面的RTP包的marker标志设置为0,最后一个RTP包marker标志设置为1。
  • PT (Payload type): (7位) 表示RTP负载类型。可以被动态赋值,例如在RTSP的Describe响应的SDP媒体描述中包含a=rtpmap:96 H264/90000行,表明RTP负载类型96对应的是H264。
  • Sequence number: (16位) RTP包的序列号,每发送一个RTP包,序列号加1。接收器可使用序列号检测数据包丢失并恢复数据包序列。序列号的初始值应该是随机的(不可预测的),以使对加密的已知明文攻击更加困难。RTSP PLAY响应包括序列号和时间戳的初始值。
  • Timestamp: (32位) 时间戳反映RTP数据包中第一个八位字节的采样瞬间。时间戳的初始值应该是随机的。RTP时间戳在RTP同步中是非常重要的,它确保接收方能够以正确的速率和顺序播放媒体数据,并保持与发送方的同步。
  • SSRC: (32位) 同步源标识符。应随机选择该标识符,确保同一个RTP会话的两个同步源(音频流和视频流)不会有相同的SSRC标识符。
  • CSRC: (32位) 可选的,当CC大于0存在该字段。用于标识当前RTP数据包中参与数据生成和发送的所有同步源(标识参与当前媒体数据采集、编码或发送的所有同步源)。它可以帮助接收方进行同步和混音,并提高RTP流的安全性和可靠性。CSRC的数量由CC字段表示。在一个RTP会话中,每个RTP数据包可以包含多个CSRC值,最多可以包含15个。
  • Header extension: 可选的,当设置了扩展标志位,存在该扩展头部。第一个32位包括配置文件特定的标识符(16位)和长度标识符。

image.png

H.264的RTP负载格式

对于单个NALU和非交错分组模式,序列号用于确定NALU的解码顺序。
RTP时间戳设置为内容的采样时间戳。必须使用90 kHz的时钟频率。

负载结构有三种,根据RTP负载的第一个字节的后5位来判断

  1. Single NAL Unit Packet(单个NAL单元数据包)
  2. Aggregation Packet(聚合数据包)
  3. Fragmentation Unit(分片单元)

Single NAL Unit Packet即1个RTP包承载1个NALU
Aggregation Packet即1个RTP包承载多个NALU
Fragmentation Unit即多个RTP包承载1个NALU(例如1个IDR帧很大,需要分成多个RTP包)
image.png

RTP包负载的第一个字节

forbidden_zero_bit

占1位,禁止位,H.264规定为0。rfc6184规定为1时表示NALU有比特错误或者语法错误。

nal_ref_idc

占2位,表示该NALU的重要程度。SPS,PPS,IDR不应该为0,值越大越重要。为0表示该NALU不用来重建参考图像,可能会被某些解码器丢弃。

nal_unit_type

占5位,指定了NALU单元的数据类型。1-23是Single NAL Unit Packet,24-27是Aggregation Packet,28-29是Fragmentation Unit。
image.png
其中NAL unit和FU-A最常见。

Single NAL Unit Packet(单NAL单元数据包)

image.png

FU-A分片

image.png

FU indicator

FU indicator字节的格式如下:
image.png
Type字段中等于28和29的值分别表示FU-A和FU-B。

FU header

FU header具有以下格式:
image.png
S:1位,起始位。设置为1时表示分片NAL单元的开始。
E:1位,结束位。设置为1时表示分片NAL单元的结束。
R:1位,保留位。必须等于0,并且必须被接收者忽略。
Type:5位,NAL单元负载类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTP分析 的相关文章

  • (一)Wireshark 抓包解析出视频流ts

    这里简单介绍下Wireshark WS 解析出视频流的方法 其他过滤方法可以百度搜到更具体的 打开一个网络封包 一般是 pcap 或者 cap 抓包方式多样 若在嵌入式设备上面抓包 可以用工具TCPDUMP这个工具 若是android手机抓
  • rtp协议分析

    感谢原作者 http blog csdn net rootusers article details 41864387 网络模型 网络通信分为7层 OSI 是一个理论模型 由高到低分别是 应用层 文件传输 电邮 文件服务等 HTTP Tel
  • H264 NAL 单元前缀

    我需要对 H264 NAL 单位分隔符前缀进行一些澄清 00 00 00 01 and 00 00 01 我正在使用 Intel Media SDK 生成 H264 并将其打包到 RTP 中 问题是到目前为止我只是在寻找00 00 00 0
  • Android:通过 RTP (G.711 PCMU) 将 .wav 发送到 SIP 电话,基于 SipDroid/MjSIP,声音非常嘈杂、噼啪作响

    我想将 wav 文件从我的 Android 传输 仅发送 到软件电话 x lite 以便 x lite 上的被叫方可以听到 wav 文件的声音 场景如下 Android 和 x lite 都在同一个 WLAN 中 并且都连接到 FreeSw
  • 通过 rtp 流发送 Android h264 捕获

    我正在为 android 编写一个 rtp 视频流媒体 它从 Android 本地套接字读取 h264 编码数据并将其打包 问题是我做到了 但我在客户端 Voip 不断收到黑框 通信过程如下 Android gt Asterisk gt J
  • 使用 Scapy 解码基于 UDP 的 RTP

    如何使用 Scapy 2 3 2 解码 和操作 基于 UDP 的 RTP 我有一个名为 rtp pcap 的捕获文件 其中包含到 224 0 1 11 5016 的 RTP 音频流 当您启用 RTP over UDP 协议时 默认关闭 Wi
  • Android 移动设备上的 RTP 客户端应用程序

    大家好 我正在 Android 设备上开发一个 RTP 客户端 它可以播放来自服务器的流媒体视频 我很困惑我应该如何开始 我正在考虑使用 HTML CSS 和 Javascript 开发一个 Web 应用程序 稍后可以将其封装在 Andro
  • 无法在 Samsung Galaxy S2 的 VideoView 中播放 RTSP 视频

    我正在尝试播放实时 RTSP 视频 来自rtsp media2 tripsmarter com LiveTV BTV using VideoView 这是我的代码 public class ViewTheVideo extends Acti
  • 我可以使用WebRTC接收标准RTP视频流吗?

    我有两台计算机在同一网络上 其中一个使用 RTP 协议传输电影 H264 是否可以创建一个简单的 JavaScript 应用程序来在第二台计算机上接收此流并显示在视频标签中 到目前为止 我对WebRTC的印象是它被设计为在浏览器之间使用 都
  • 如何将 rtp 数据包有效负载字节转换为任何音频数据?

    我正在用java制作一个项目 不使用任何第三方库 我已经使用以下命令成功建立了 udp 连接DatagramSocket 然后我开始使用sip协议进行通信 我已经顺利通过了注册和邀请阶段 这就是我获取音频数据流将传输到的主机和端口的方式 然
  • 从 RTP 流中解码 h264 帧

    我正在使用 live555 和 ffmpeg 库从服务器获取和解码 RTP H264 流 视频流由 ffmpeg 编码 使用 Baseline 配置文件和 x264 param default preset m params veryfas
  • 如何计算音频流中每个数据包的 RTP 时间戳

    我阅读了 RTP 规范 但似乎无法理解 RTP 数据包时间戳 我尝试在我的服务器中以不同的方式实现它 但我无法让玩家正确播放它 我在这里的 错误 行为是 我使用 VLC 播放器播放 RTSP url 到我的服务器 我发现玩家的日志说 缓冲太
  • 在 Gstreamer 上流式传输 MP4 视频文件

    我第一次使用 gstreamer 并尝试使用 Gstreamer RTP 和 UDP 将 MP4 视频文件从服务器流式传输到客户端 我尝试使用的命令行 在服务器端 gst launch 1 0 v filesrc location file
  • 如何对 H265/HEVC 的 RTP 数据(通过 UDP)中的碎片帧进行解包?

    我正在尝试对原始 RTP H265 流进行解包并重建它 以便解码器可以读取它 我已经能够通过识别 NAL 和 FU 详细信息从 RTP 缓冲区中提取单个和碎片单元 但是 我无法找到有关处理放置在碎片单元缓冲区前面的 NAL 的精确细节 这是
  • 使用 gstreamer-1.0 的 H264 RTP 流

    我尝试从带有摄像头模块的 Raspberry Pi 3 到视频标签制作 H264 RTP 流 使用以下代码启动流 raspivid t 0 h 720 w 1080 fps 25 hf b 2000000 o gst launch 1 0
  • 如何在 HTML5 中流式传输实时视频?

    我正在寻找一种方法来广播从植根于 PC 的网络摄像头或相机拍摄的实时视频 广播应该使用标签 我认为支持 rtp 和 rtsp 显示在 HTML5 页面中 查看流的用户不必安装任何插件或视频播放器 例如 QuickTime 我需要视频为 mp
  • Android RTP/RTCP 堆栈

    我正在寻找一个堆栈 库 它可以让我充分利用 Android 下 RTP 和 RTCP 协议的所有标头字段 我不知道这是否重要 但我想将它与我用于 SIP 和 SDP 的 JAIN SIP 堆栈结合起来 有没有人有任何经验或建议 The an
  • ffmpeg创建RTP流

    我正在尝试使用 ffmpeg 进行编码和流式传输 libavcodec libavformat MSVC x64 with Zeranoe builds 这是我的代码 很大程度上改编自编码示例 删除了错误处理 include stdafx
  • 适用于 iPhone 和 Android 的 sip 堆栈

    我正在寻找适用于 Android 和 iPhone 的 SIP 堆栈 我发现了很多类似的问题 有时已经很老了 我不太关心解决方案是商业的 但这是首选 还是开源的 到目前为止我发现 RADVISION 的 Android 商业解决方案 iPh
  • 使用webrtc时可以关闭SRTP吗

    现在我测试webrtc与SIP客户端 sx20 的通信 我使用 webrtc sdp 发送邀请消息 但 sip 客户端答案没有指纹 并且 sip 客户端的答案不是 SRTP 只是 RTP 所以我需要关闭WEBRTC中的SRTP 我可以做吗

随机推荐

  • grafana接入openldap认证

    首先两个文件开启ldap的支持 文件1 xff1a etc grafana grafana ini auth ldap enabled 61 true config file 61 etc grafana ldap toml allow s
  • Wireshark的常见提示

    概述 本文主要介绍Wireshark中出现的一些常见提示 详细信息 Wireshark简介 Gerald Combs是堪萨斯城密苏里大学计算机科学专业的毕业生 1998年发布了第一版Ethereal工具 xff0c Ethereal工具使用
  • shell报错bad substitution 解决办法

    bin bash a 61 34 hello 34 b 61 34 hi is a 34 echo b echo a echo a echo a 1 2 执行脚本方式不同出现的结果不同 xff1a 方式1 xff1a sh shell sh
  • centos8软件安装dnf命令

    DNF是新一代的rpm软件包管理器 它首先出现在 Fedora 18 这个发行版中 而目前 xff0c 它取代了yum xff0c 正式成为从 Fedora 22 起 Fedora 版本的包管理器 DNF包管理器克服了YUM包管理器的一些瓶
  • 多目标规则在 Makefile 中的应用与示例

    在 Makefile 中 xff0c 如果一个规则有多个目标 xff0c 而且它们之间用空格分隔 xff0c 我们称之为 34 多目标规则 34 这意味着这个规则适用于列出的所有目标 在目标下面的命令是 C 64 xff0c 它通常与 ma
  • 计算机中内存、cache和寄存器之间的关系及区别

    1 寄存器是中央处理器内的组成部份 寄存器是有限存贮容量的高速存贮部件 xff0c 它们可用来暂存指令 数据和位址 在中央处理器的控制部件中 xff0c 包含的寄存器有指令寄存器 IR 和程序计数器 PC 在中央处理器的算术及逻辑部件中 x
  • dell 台式电脑设置每天定时开机和关机

    每天定时开机设置 xff1a 戴尔电脑通过CMOS设置实现自动开机的设置过程如下 xff1a 1 首先进入 CMOS SETUP 程序 大多数主板是在计算机启动时按DEL或F2键进入 xff1b 2 然后将光条移到 Power Manage
  • windows批处理自动获取电脑配置信息

    39 2 gt nul 3 gt nul amp cls amp 64 echo off 39 amp rem 获取本机系统及硬件配置信息 39 amp set 61 Any question amp set 64 61 WX amp se
  • Centos7搭建cisco ocserv

    一 安装的部分直接yum安装即可 yum y install ocserv 二 配置文件根据实际情况调整 auth方式有两种 1 系统账号认证 配置的话就是 xff1a auth 61 34 pam 34 2 本地文件认证 配置的话就是 x
  • 私有harbor部署(docker方式)

    环境准备 docker compose v Docker Compose version v2 14 2 wget https github com docker compose releases download v2 14 2 dock
  • ORACLE扩展表空间

    一 查询表空间使用情况 SELECT UPPER F TABLESPACE NAME 34 表空间名 34 D TOT GROOTTE MB 34 表空间大小 M 34 D TOT GROOTTE MB F TOTAL BYTES 34 已
  • Oracle 常用性能监控SQL语句

    1 查看表锁 SELECT FROM SYS V SQLAREA WHERE DISK READS gt 100 2 监控事例的等待 SELECT EVENT SUM DECODE WAIT TIME 0 0 1 34 Prev 34 SU
  • Nginx出现“ 413 (499 502 404) Request Entity Too Large”错误解决方法

    1 Nginx413错误的排查 修改上传文件大小限制 在使用上传POST一段数据时 xff0c 被提示413 Request Entity Too Large xff0c 应该是nginx限制了上传数据的大小 解决方法就是 打开nginx主
  • 查看弹出广告来自哪个软件

    打开VS的Spy 43 43 将指针移到广告处 xff0c 然后点OK xff0c 在Process标签页可以看到进程id和线程id将获得的16进制进程id xff08 例如 xff1a 000025F8 xff09 通过计算器转成10进制
  • C++多态虚函数实现原理,对象和虚函数表的内存布局

    基本概念 我们知道C 43 43 动态多态是用虚函数实现的 xff0c 而虚函数的实现方式虽说C 43 43 标准没有要求 xff0c 但是基本都是用虚函数表实现的 xff08 编译器决定 xff09 所以我们有必要了解一下虚函数表的实现原
  • C++ STL中递归锁与普通锁的区别

    在多线程编程中 xff0c 保护共享资源的访问很重要 xff0c 为了实现这个目标 xff0c C 43 43 标准库 xff08 STL xff09 中提供了多种锁 xff0c 如std mutex和std recursive mutex
  • VS+Qt开发环境

    VS Qt下载 VS下载 xff1a https visualstudio microsoft com zh hans vs Qt下载安装 xff1a https www bilibili com video BV1gx4y1M7cM VS
  • windows下使用ShiftMediaProject编译调试FFmpeg

    为什么要编译FFmpeg xff1f 定制模块调试源码 windows下编译 推荐项目ShiftMediaProject FFmpeg 平时总是看到一些人说windows下编译FFmpeg很麻烦 xff0c 这时候我就都是微微一笑 xff0
  • RTSP分析

    RTSP使用TCP来发送控制命令 xff08 OPTIONS DESCRIBE SETUP PLAY xff09 xff0c 因为TCP提供可靠有序的数据传输 xff0c 而且TCP还提供错误检测和纠正 RTSP的报文格式可以参考HTTP的
  • RTP分析

    参考 RTP xff08 A Transport Protocol for Real Time Applications 实时传输协议 xff0c rfc3550 xff09 RTP Payload Format for H 264 Vid