【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包
【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包
【1】基本概念
NAL 单元 (Network Abstraction Layer Unit)
字段 | 长度 | 说明 |
F | 1 位 | forbidden_zero_bit,标记该 NAL 包是否出现错误,出错置 1,否则置 0 |
NRI | 2 位 |
nal_ref_idc,值越大代表该 NAL 单元的重要程度越高 取值 00 时表示该帧不用于在重建参考图像的内部预测,可以丢弃 |
Type | 5 位 | nal_unit_type,指示 NAL 单元载荷类型 |
载荷结构 (Payload Structures)
- Single NAL Unit Packet,一个 RTP 载荷中仅仅包含一个 NAL 单元
- Aggregation Packet,将多个 NAL 单元聚合成一个 RTP 载荷
- Single-Time Aggregation Packet type A (STAP-A)
- Single-Time Aggregation Packet type B (STAP-B)
- Multi-Time Aggregation Packet (MTAP) with 16-bit offset (MTAP16)
- Multi-Time Aggregation Packet (MTAP) with 24-bit offset (MTAP24)
- Fragmentation Unit,将一个 NAL 单元拆分成多个 RTP 包
- FU-A
- FU-B
分包模式 (Packetization Modes)
- 单一 NAL 单元模式 (Single NAL unit mode),packetization-mode = 0 或者无此字段时缺省
- 非交错模式 (Non-interleaved mode),packetization-mode = 1
- 交错模式 (Interleaved mode),packetization-mode = 2
- 单一分包和非交错模式用于通信系统,人与人对话交流的场景,因此必须考虑低时延,按照解码的顺序传递数据包
- 交错模式的场景一般是对时延并不是特别敏感的场景,传递包的顺序也可以不按照解码顺序,因此交错模式下的包中都需要携带一个 DON (Decoding order number)
载荷类型、载荷结构与分包模式的对应关系
【2】打包方式
- Single NAL Unit Packet
Single NAL Unit Packet,一个 RTP 载荷中仅仅包含一个 NAL 单元;
- Aggregation Packet
Single-Time Aggregation Packet (STAP),具有相同 NAL 时间的聚合 NAL 单元,STAP-A 不具备 DON (Decoding order number),STAP-B 包含 DON (Decoding order number);
Multi-Time Aggregation Packet (MTAP),具有不同 NAL 时间的聚合 NAL 单元,MTAP16 即 NAL 单元时间戳偏移 (16 位),MTAP24 即 NAL 单元时间戳偏移 (24 位);
Aggregation Packet 打包规则
- RTP 时间戳必须设置为所有聚合的 NAL 单元中的最早时间
- 仅当所有聚合的 NAL 单元的 F 位为 0 时,F 域设置为 0,否则设置为 1
- NRI 的值必须为所有聚合的 NAL 单元中的最大值
- Type 域必须设置为下图所示类型
Single-Time Aggregation Packet (STAP)
STAP-A
STAP-B
Multi-Time Aggregation Packet (MTAP)
- DONB (decoding order number base),必须包含第一个 NAL 单元的解码方向值 (decoding order number,DON);
- DOND (decoding order number difference),与基准的差值
- TS offset (timestamp offset),时间戳偏差值
MTAP16
MTAP24
- Fragmentation Unit
注意,目前 Fragmentation Unit 仅用于单个 NAL 单元分片
优势,1. 将大数据包分片成小的数据包,有利于网络传输;2. 将单个 NAL 单元分片有利于前向纠错机制的应用;
FU-A (28)
FU-B (29)
FU indicator 格式
FU header 格式
字段 | 长度 | 说明 |
S | 1 位 |
取值 1 标识分片 NAL 单元的起始 取值 0 非起始 NAL 单元 |
E | 1 位 |
取值 1 标识分片 NAL 单元结束 取值 0 非终止 NAL 单元 |
R | 1 位 | 保留位 |
Type | 5 位 | NAL 单元的载荷类型 |
参考致谢
本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。
【1】H264 的 RTP 格式封装
【2】RFC 6148
【3】RTP H264组包之单个NAL包和FU-A方式解析
【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包相关推荐
- 【网络通信 -- 直播】网络通信协议简介 -- SRTP/SRTCP
[网络通信 -- 直播]网络通信协议简介 -- SRTP/SRTCP [0]简介 安全实时传输协议 (Secure Real-time Transport Protocol,SRTP) 是在实时传输协 ...
- 【网络通信 -- 直播】网络通信协议简介 -- SSL/TLS 与 DTLS
[网络通信 -- 直播]网络通信协议简介 -- SSL/TLS 与 DTLS [1]网络传输中加密的一般概念 对称密钥加密技术,加密过程和解密过程使用的是同一个密钥: 常见的对称加密算法有 DES.3 ...
- 【网络通信 -- 直播】FFMPEG 简介与常用命令总结
[网络通信 -- 直播]FFMPEG 简介与常用命令总结 [1]FFMPEG 简介 FFmpeg,项目的名称来自 MPEG 视频编码标准,"FF"代表"Fast Forw ...
- H264视频传输、编解码----RTP协议对H264数据帧拆包、打包、解包过程
H264帧需要通过RTP协议进行传输,这其中就涉及到H264数据帧的封包.拆包和解包等过程. RTP协议格式 下面是 RFC 3550 中规定的 RTP 头的结构: 0 1 2 3 40 1 2 3 ...
- android player通过rtp协议接收h264视频数据播放
android recorder通过rtp发送h264视频数据给vlc播放 android player通过rtp协议接收h264视频数据播放 Android recorder通过rtp发送aac数据 ...
- RTP协议封装H264/H265/AAC
<RTSP实时音视频传输介绍> 目录 一.前言 二.RTP基本格式介绍 1.RTP 固定头 2.RTP 扩展头 3.RTP 载荷 三.RTP封装H264 1.封装包类型 四.RTP封装H2 ...
- 22.1 网络编程:软件结构、网络通信协议、UDP与TCP协议、(网络编程三要素:协议、ip地址、端口号)、查看ip地址、检测网络是否连通、判断ip是否可用
目录 网络编程 软件结构 网络通信协议 TCP/IP协议 协议分类 UDP TCP 网络编程三要素 协议 IP地址 列:查看本机ip地址 检查网络是否连通.判断ip是否可用 端口号 网络编程 软件结构 ...
- Java中的网络和TCP/IP协议
网络和TCP/IP协议 一.网络通信协议 1.1 协议和七层模型 1.2 TCP/IP协议 二.网络通信的实现 2.1 TCP协议通信 2.2 UDP协议通信 前言: 有时候我们会不理解,我们在QQ上 ...
- 直播网络 的协议选择
转自:http://www.cnblogs.com/ningskyer/articles/5534512.html 上篇我们讲述了如何让直播内容以"最短"路径从主播到观众上,传输层 ...
- rtp协议详解/rtcp协议详解
1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...
最新文章
- Centos7上yum安装mongodb(安装epel中的版本可能会比较老)
- git reset --hard HEAD
- 【机器学习】最近邻算法KNN原理、流程框图、代码实现及优缺点
- [转]C++中sleep()函数的使用
- Jar包部署-指定jsp打包配置
- react项目在ie空白解决
- MySQL性能优化 分区
- LDA主题模型简介及Python实现
- r语言如何下载carzip包本地安装_R语言安装R package的2种方法
- 观点 | 滴滴 AI Labs 负责人叶杰平教授:深度强化学习在滴滴的探索与实践+关于滴滴智能调度的分析和思考+滴滴派单和Uber派单对比
- NHibernate(一) 转自止于至善
- 如何在 5 分钟内成为游戏引擎的行家
- 基于百度的UidGenerator改造的全局唯一id生成器
- 2021年数学建模国赛湖北赛区推荐国奖名单
- MongoDB数据库的简介与安装步骤
- window10如何开启telnet
- 【主色提取】模糊C均值(FCM )聚类算法和彩色图像快速模糊C均值( CIQFCM )聚类算法
- Data Analysis - Day2 - Matplotlib 案例
- uClinux 内核编译常见错误及解决方法(zt)
- tyvj2032 升降梯上