RTSP中TS流结构分析

  • UDP数据包整体结构
  • RTP Header结构
  • TS Header结构
  • PAT结构
  • PMT结构
  • PES Header结构
  • ES层
  • Wireshark抓取TS包

UDP数据包整体结构

在使用UDP传输TS流时,整个数据包结构如下:

RTP Header结构

RTP结构如下图:

各字段的含义如下:

字段 含义
V RTP协议的版本号,2位,当前协议版本号为2
P 填充标志,1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组
X 扩展标志,1位,如果X=1,则在RTP报头后跟有一个扩展报头
CC CSRC计数器,4位,指示CSRC 标识符的个数
M 标记,1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束。
PT 有效荷载类型,7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。
Sequence number 序列号,16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序,序列号的初始值是随机的,同时音频包和视频包的sequence是分别记数的。
timestamp 时戳(Timestamp),32位,必须使用90 kHz 时钟频率。时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
SSRC 同步信源(SSRC)标识符:32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
CSRC 特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

TS Header结构

TS结构如下图:

各字段的含义如下:

字段 含义
sync_byte 8位,同步字节,固定为0x47
transport_error_indicator 1位,传输错误指示符,表明在ts头的adapt域后有一个无用字节,通常都为0,这个字节算在adapt域长度内
payload_unit_start_indicator 1位,表示TS包的有效净荷带有PES或PSI数据的情况;当TS包的有效净荷带有PES包数据时,payload_unit_start_indicator为1,表示TS包的有效净荷以PES包的第一个字节开始;为0,表示TS包的开始不是PES包;当TS包带有PSI数据时,payload_unit_start_indicator为1,表示TS包带有PSI部分的第一个字节,即第一个字节带有指针pointer_field,为0表示TS包不带有一个PSI部分的第一个字节,即在有效净荷中没有指针pointer_field;对于空包的包,play_unit_start_indicator应该置为0;
transport_priority 1位,传输优先级,0为低优先级,1为高优先级,通常取0
pid 13位,PID值
transport_scrambling_control 2位,传输加扰控制,00表示未加密
adaptation_field_control 2位,是否包含自适应区,‘00’保留;‘01’为无自适应域,仅含有效负载;‘10’为仅含自适应域,无有效负载;‘11’为同时带有自适应域和有效负载。
continuity_counter 4位,递增计数器,从0-f,起始值不一定取0,但必须是连续的

PAT结构

PAT说明了此TS流中有多少个节目以及每个节目对应的PID,每个节目都有一个对应的PMT表,然后根据此PID可以查找PMT,PMT有该节目对应的视频PID和音频PID以及对应的编码格式。

字段 含义
table_id 8位,PAT表固定为0x00
section_syntax_indicator 1位,固定为1
zero 1位,固定为0
reserved 2位,固定为11
section_length 12位,后面数据的长度
transport_stream_id 16位,传输流ID,固定为0x0001
reserved 2位,固定为11
version_number 5位,版本号,固定为00000,如果PAT有变化则版本号加1
current_next_indicator 1位,固定为1,表示这个PAT表可以用,如果为0则要等待下一个PAT表
section_number 8位,固定为0x00
last_section_number 8位,固定为0x00
开始循环
program_number 16位,节目号为0x0000时表示这是NIT,节目号为0x0001时,表示这是PMT
reserved 3位,固定为111
PID 13位,节目号对应的PID值,解析出此PID后,就可以找到PMT表了
结束循环
CRC32 32位,前面数据的CRC32校验码
剩余的数据 未满188byte,填充0xff

PMT结构

字段 含义
table_id 8位,PMT表取值随意,0x02
section_syntax_indicator 1位,固定为1
zero 1位,固定为0
reserved 2位,固定为11
section_length 12位,后面数据的长度
program_number 16位,频道号码,表示当前的PMT关联到的频道
reserved 2位,固定为11
version_number 5位,版本号,固定为00000,如果PAT有变化则版本号加1
current_next_indicator 1位,固定为1
section_number 8位,固定为0x00
last_section_number 8位,固定为0x00
reserved 3位,固定为111
PCR_PID 13位,PCR(节目参考时钟)所在TS分组的PID,指定为视频PID
reserved 4位,固定为1111
program_info_length 12位,0x000表示没有
开始循环
stream_type 8位,流类型,标志是Video还是Audio还是其他数据,h.264编码对应0x1b,aac编码对应0x0f,mp3编码对应0x03
reserved 3位,固定为111
elementary_PID 13位,与stream_type对应的PID
reserved 4位,固定为1111
ES_info_length 12位,描述信息,0x000表示没有
结束循环
CRC32 32位,前面数据的CRC32校验码
剩余的数据 未满188byte,填充0xff

PES Header结构

字段 含义
pes start code 3byte,固定为0x000001
stream id 1byte,音频取值(0xc0-0xdf),通常为0xc0,视频取值(0xe0-0xef),通常为0xe0
pes packet length 2byte,后面pes数据的长度,0表示长度不限制,只有视频数据长度会超过0xffff
flag 1byte,通常取值0x80,表示数据不加密、无优先级、备份的数据
flag 1byte,取值0x80表示只含有pts,取值0xc0表示含有pts和dts
pes data length 1byte,后面数据的长度,取值5或10
pts 5byte,33bit值,显示时间戳
dts 5byte,33bit值,解码时间戳

ES层

ES层包含音视频数据
H.264视频数据:
H.264数据由多个nalu构成,nalu包括nalu header,nalu data,nalu 之间用0x00000001(帧开始)或0x000001(帧中)分割。h.264的数据是由slice组成,slice的内容包括:视频,sps,pps等。nalu header中的type决定了后面的数据内容。

字段 含义
F 1位,forbidden_zero_bit,h.264规定必须取0
NRI 2位,nal_ref_idc,取值0~3,指示这个nalu的重要性,I帧、sps、pps通常取3,P帧通常取2,B帧通常取0
type 5位,参考下表
nal_unit_type 说明
0 未使用
1 非IDR图像,IDR指关键帧
2 片分区A
3 片分区B
4 片分区C
5 IDR图像片,即关键帧
6 补充增强信息单元(SEI)
7 SPS序列参数集
8 PPS图像参数集
9 分解符
10 序列结束
11 码流结束
12 填充
13~23 保留
24~31 未使用

打包es层数据时pes头和es数据之间要加入一个type=9的nalu,关键帧slice前必须要加入type=7和type=8的nalu,而且是紧邻。

Wireshark抓取TS包

如下图:

RTSP中TS流结构分析相关推荐

  1. 基于FFmpeg接收RTSP的ts流

    RTSP用于建立的控制媒体流的传输,通过wireshark抓包可以看到rtsp消息交互的过程: 1. 第一步:查询服务器端可用方法 C->S:OPTION request     // 询问S有 ...

  2. DVB中TS流数据解析

    引  言 数字生活方式是现代文明的一个重要标志.在与人们工作生活密切相关的电脑.手机和电视三大信息平台中,电脑和手机已实现了数字化和网络化,为人们带来了多姿多彩的资讯和娱乐服务,也为相关企业带来了巨额 ...

  3. hls中ts流格式简介

    1.ts简介      ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多大十几个,视频格式主要是mpeg2.苹果公司发明的http live stream流媒体是基于ts文件的,不过他大 ...

  4. TS流结构分析(PAT和PMT)

    TS流也是由一个或多个PES组合而来的,他们可以具有相同的时间基准,也可以不同.其基本的复用思想是,对具有相同时间基准[color="#000000"]的多个PES现进行节目复用, ...

  5. PS-TS-PES-ES流结构分析

    相关链接:https://blog.csdn.net/knowledgebao/article/details/84776869 目录 概念普及: TS层(ts header+adaption+PAT ...

  6. TS流解析【PCR】自己的总结

    http://www.cnblogs.com/ztteng/articles/3166025.html http://blog.csdn.net/liuhongxiangm/article/detai ...

  7. TS流中BAT与SDT等表的解析

    TS流的文章不少,但都比较难读:TS码流分析的软件挺多,但思路都雷同. 本文章从另外一个角度来理解和分析TS流,不过只是我个人的理解,错误在所难免,不当之处,请大家多多指教(本文可能经常更新). 由于 ...

  8. mp4/ts流中的extra data

    mp4中,对h264/h265来说,sps/pps/vps都包含在extra data中. h264, extra data存在于trak->mdia->minf->stbl-> ...

  9. ts流中的时间概念: pcr,pts,dts 实例解说

    ts流中的时间概念: pcr,pts,dts 实例解说 ---------------------------------------- PCR OPCR ---------------------- ...

最新文章

  1. UVA 11383 Golden Tiger Claw 金虎爪(KM算法)
  2. c语言文件打开函数,C语言fopen函数中文件打开方式(参数值)
  3. 无线传感器主要应用领域及发展趋势
  4. java: 程序包com.github.pagehelper不存在_Rust语言正在兴起,Java、Python、C的末日来临?...
  5. windows防火墙ntp服务器_NTP教学续集已发送,请你查收!
  6. lua游戏开发实践指南光盘_Godot游戏开发实践之一:用High Level Multiplayer API制作多人游戏(上)
  7. 第九章——计数器/定时器和多功能接口芯片
  8. php笔试有多少分钟,PHP研发工程师笔试题(半小时)
  9. OpenCV基本线条操作
  10. 国内电波钟和石英钟表相比有何优势?
  11. 小米 html5定位失败,小米手表GPS定位慢怎么办 GPS定位失败及室内无法定位解决方法...
  12. Html基本标签(斜体em、空格nbsp、段落p、标题h1、换行br、大于号gt、小于号lt、引号quot、版权符号copy、图片img、水平线hr)
  13. 武汉java开发工资一般多少_武汉Java开发工资是否还会增长?工资为什么那么高?...
  14. 创业者的噩梦 -商业竞争究竟有多残酷和黑暗
  15. 我们要做一个靠谱的人~以信而立天下
  16. 塔望食业洞察|植物肉行业发展趋势 品牌竞争格局及未来发展
  17. The Sandbox 与美国时装设计师协会(CFDA)达成合作,为 Web3 和时尚搭建桥梁
  18. python selenium学习之新浪微博
  19. 20200422his系统实施工程师经验分享(助产士系统实施过程总结)
  20. 海思开发板海图科技测评,海图海思开发板怎么样

热门文章

  1. Microsoft Dynamics CRM 分销行业解决方案
  2. 数据是AI的土壤,如何耕种和管理非常重要 | 算法干货
  3. 来自平凡世界而不平凡的他---飞扬浩天(feiyanghaotian) >>点开详细页
  4. 【收集贴】常见RSS阅读器记录
  5. 卷积核膨胀(dilation)解析
  6. C 和 C++ 混合编程
  7. 招商信用卡消费短信温馨提醒
  8. 用golang实现一个自动保存windows10锁屏壁纸的小软件
  9. Spring——事务注解@Transactional【建议收藏】
  10. 布兰特原油飙升至多年高位