RTP分包模式(H264/H265)
在rfc6184-h264文档5.4章节有详细说明、以及rfc7798-h265文档4.2章节中也有部分介绍。
一、NALU Header
● H264 NALU Header(1 byte)结构图如下:
F: 1 bit
forbidden_zero_bit,禁止位,大多数情况为0,表示NAL单元类型和有效载荷不应该包含误码或其它语
法错误。值为1,表示该NAL单元类型和有效载荷可能包含误码或者其它语法错误。
NRI: 2 bit
nal_ref_idc,nal 参考级别,该值一般为00、01、10、11(二进制),表示该NAL单元重要级别,如果
为0,可能解码器丢弃,不会导致花屏现象。该值必须遵循H264编码规范。比如:sps、pps、idr等NAL
单元时,该值必须为11(二进制)
Type:5 bit
nal_unit_type,代表nal单元类型,常见的该值为7(sps)、8(pps)、5(idr)等。
● H265 NALU Header(2 byte)结构图如下:
F: 1 bit
forbidden_zero_bit,禁止位,大多数情况为0,表示NAL单元类型和有效载荷不应该包含误码或其它语法
错误。值为1,表示该NAL单元类型和有效载荷可能包含误码或者其它语法错误。
Type: 6 bit
nal_uint_type,代表nal单元类型,允许NAL单元的类型编码数比 h264/AVC多一倍,达到64类,其中32类
作用在VCL NAL单元,32类用作non-VCL NAL单元。
LayerId:6 bit
nal_layer_id,hevc中等于0,扩展标识符。该语法未来用于标识CVS中可能出现的层,其中层包括空间可
伸缩层、质量可伸缩层、纹理视图或深度视图。
TID: 3 bit
nal_temporal_id_plus1,层识别信息。表示当前NAL单元属于哪个时域子层,时域标识符的值为0~6。
二、RTP有效载荷结构(Payload Structures)

1)H264 FUs结构
H264 FU-A的RTP负载如图所示:
H264 FU-B的RTP负载如图所示:
H264 FU indicator定义如下:
1 //FU Indicator定义实际就是H264的NAL Header,H264
2 typedef struct _tagFUIndicator
3 {
4 uint8_t F : 1; /*1 bit,forbidden_zero_bit(禁止位),一般为0*/
5 uint8_t NRI : 2; /*2 bit,nal_ref_idc(nal参考级别),代表这一个NAL的重要级别,比如sps、pps、idr该值一般为11(二进制),由*/
6 uint8_t TYPE : 5; /* set to 28 or 29 */
7 } FUIndicator;
FU-A和FU-B的type字段分别为28和29,FUIndicator结构和NALU单元头定义类似,只是FU-A和FU-B中
的TYPE字段表示分片类型,而NALU单元中的TYPE为nalu_unit_type。
H264 FU header结构如下:
1 //FU Header定义,H264
2 typedef struct _tagH264FUHeader
3 {
4 uint8_t S : 1; /*1 bit,Start位,当设置为1时,Start位表示一个分片NAL单元的开始。当FU有效载荷不是分片NAL单元有效载荷起始时,该值被设置为0*/
5 uint8_t E : 1; /*1 bit,End位,当设置为1时,表示分片NAL单元的结束,即当该NAL单元分片最后一个分片时,该值为1,否则End位被设置为0*/
6 uint8_t R : 1; /*1 bit,预留位,一般为0*/
7 uint8_t Type : 5; /*5 bit,nalu_unit_type, set to nal type */
8 } H264FUHeader;
2)H265 Fus结构
H265 PayloadHdr定义(即H265的NAL Header)如下:
1 typedef struct tagH265NalHeader
2 {
3 uint8_t F : 1; /* start flag */
4 uint8_t Type : 6; /* end flag */
5 uint8_t LayerId : 6; /* end flag */
6 uint8_t Tid : 3; /* set to nal type */
7 } H265NalHeader;
H265 FU header结构如图:
1 typedef struct tagH265FUHeader
2 {
3 uint8_t S : 1; /* start flag */
4 uint8_t E : 1; /* end flag */
5 uint8_t Type : 6; /* set to nal type */
6 } H265FUHeader;
三、三种分包模式和适用场景
RTP分包模式(H264/H265)的更多相关文章
- RTP协议解析及H264/H265 音视频RTP打包分析
一 概述 实时传输协议(Real-time Transport Protocol或简写RTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的. RTP协议详 ...
- MVPHelper更新日志 --- 新增常规分包模式
MVPHelper是一款可以自动生成MVP接口以及实现类的android studio插件,彻底解放双手! MVPHelper更新版本啦. 由于之前只支持contract模式,不是很符合大众口味 所以 ...
- DirectShow的RTP发包(H264)Filter <转>
转帖地址:http://blog.csdn.net/fan2273/article/details/77653700 DirectShow的RTP发包(H264)Filter 基于DirectShow ...
- RTP中的H264的SVC相关信息
概览 本文简单的介绍了rtp中的h264的svc相关信息 h264的svc相关格式信息 从RTP Payload Format for H.264 Video可以看见264在rtp的传输过程中,在rt ...
- RTP/RTCP(一)-H264关于RTP协议的实现
H264关于RTP协议的实现2010-07-22 13:35完整的C/S架构的基于RTP/RTCP的H.264视频传输方案.此方案中,在服务器端和客户端分别进行了功能模块设计.服务器端:RTP封装模块 ...
- Windows平台真实时毫秒级4K H264/H265直播技术方案
背景 在刚提出4K视频的时候,大多数人都觉得没有必要,4K的出现,意味着更高的硬件规格和传输要求,1080P看的很爽.很清晰,完全满足了日常的需求.随着电视的尺寸越来越大,原本1080P成像已经无法满 ...
- FFMPEG H264/H265 编码延迟问题
最新使用FFmpeg进行H264的编码时,发现视频编码有延迟,不是实时编码.进过一番研究发现,仅仅要在调用avcodec_open2函数 打开编码器时,设置AVDictionary參数就可以.关键代码 ...
- 【知识点】H264, H265硬件编解码基础及码流分析
前言 音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,vps,start code以及基本的工作原理,而大 ...
- RTSP服务端开发概述
一 概述 RTSP(Real Time Streaming Protocol),RFC2326,实时音视频流传输协议,是TCP/IP协议体系中的一个应用层协议.该协议定义了一对多应用程序如何有效地通过 ...
- rtp h264注意点(FU-A分包方式说明)
前写过一篇文章,分析了h264使用rtp进行封包的格式介绍:RTP封装h264.但里面好像没有把拆分以及一些需要注意的情况说清楚,因此这里做补充,也作为自己的备忘(自己记性好像不太好). 关于时间戳, ...
随机推荐
- 这几年专注于流程管理与RPA落地
这些年专注于流程管理与RPA落地,乙方有些辛苦,但,也得到了客户的认可,开心. 做过多个流程管理咨询,发现信息化落地后孤岛很多,RPA 刚好可以作为各个系统的有效补充,把系统有机的结合在一起. 企业信 ...
- C# winform DataGridView 一列显示星号
private void myDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventA ...
- jmeter学习-性能指标、jmeter初识
一:性能测试的指标 1. 并发/并发数/并发用户数 狭义的并发:同一时间做相同的一件事 广义的并发:同一时间做不同事情,混合场景,对服务器来说的并发 性能测试,先做简单的狭义并发,在做广义并发:先做单 ...
- manjaro安装指导
本文"指导"二字口气有点大,是说给自己听的,指导我下次的安装. 正文: 1.安装系统:在清华大学开源站上下载KDE版(本机适用19版54内核无驱动问题),用rufus烧制启动盘,以 ...
- Qt Windows上实现毛玻璃效果
首发于我的个人博客:xie-kang.com 博客内有更多文章,欢迎大家访问 原文地址 前言: 很多人看到这个需求的第一想法都是录制软件窗口后的桌面内容,并且加上个高斯模糊就能实现了. 思路没有错,操 ...
- centos7下安装Node.js MongoDB Nginx
一.Node.js 方法1(笔者采用).如果对Node.js环境有比较高的要求,建议选择源码安装的方式进行安装,通过wget命令下载Node.js官网上的tar.gz文件包到centos服务器上,进 ...
- 【LeetCode回溯算法#06】复原IP地址详解(练习如何处理边界条件,判断IP合法性)
复原IP地址 力扣题目链接(opens new window) 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 ...
- 网络如何运作——详细DNS、HTTP、网站
详细的DNS 什么是DNS? DNS(域名系统)为我们提供了一种简单的方式来与互联网上的设备进行通信,而无需记住复杂的数字.就像每个房子都有一个唯一的地址可以直接向它发送邮件一样,互联网上的每台计算机 ...
- 【新版】使用 go-cqhttp 扫码登录,一键接入 ChatGPT 机器人到 QQ 群
目录 项目效果 安装 go-cqhttp 虚拟文件 启动 ChatGPT 项目效果 由于 ChatGPT 目前只能在漂亮国使用,所以想要在国内使用 ChatGPT 必然险阻重重 不仅时时刻刻要跟企鹅公 ...
- 安装node.js教程------深入使用Vue
教程 1.下载nodejs引擎 网址:https://nodejs.org/en/download/ 选择32-bit或者64-bit都行 2.下载最新版npm.zip压缩包 网址:http://no ...