HLS协议解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: HLS协议解析

介绍

HLS(HTTP Live Streaming) 协议是APPLE 提出的一种替代rtmp协议的直播传播协议

HLS 使用HTTP作为底层传输协议,传输的内容包括了m3u8文件和TS分片,其中m3u8文件用于记录可以播放哪些分片,

M3u8解析

TS解析

ts分片中包含header+Payload

  • header用于描述Payload中数据的类型
  • Payload中既可以是PSI(Program Specific Information)元数据 也可以是音视频数据

苹果推出的HLS协议对MPEG2规范中的PSI/SI数据种类做了精简 只保留了两种最基本的PSI数据,也就是PAT(Program Association Table)和PMT(Program Map Table)

PAT用于指明PMT使用的PID(Program ID)

PMT用于指明音视频流中的PID

TS header 结构图

每个TS包由Header和Payload组成,其中Header占4字节,Payload占184字节,TS包总长度为188字节

Header的四个字节分为8个段

一般通过PID判断Payload数据类型 比如PID==0x00表示Payload中存放的是元数据类型

adaptation_filed_control 为0b10或0b11时存在适配域 该域结构如下

适配域中各字段及其含义如下:

PAT与PMT作用

PAT是PSI/SI数据(元数据)的一种PSI/SI包括很多种数据,如PAT PMT SDT等 主要作用是帮助查找具体的频道。

比如TS流中包含了两个视频通道1和2通过PSI找到对应通道的PID 然后再通过PID找到对应的音视频流即可

在PSI数据中 最重要的两种数据是PAT和PMT PAT和PMT之间的树型关系,PAT中记录了有多少了PMT PMT则代表一个频道,通过PMT就能拿到

音视频数据对应的PID,从而获得到音视频数据。

PAT与PMT会周期发送 发送间隔一般为100ms 最小的间隔最好不超过25ms 如果间隔太小的话PSI占用的带宽就会增多,从而导致音视频延时变大

播放器播放TS流的基本过程 :解析TS流时,首选获得PAT信息,之后通过PAT找到PMT,在通过PMT找到音视频流,。。。

PAT数据的PID是固定值0x00解析TS流时,首先需要对每个传过来的TS包进行遍历,直到找到TS Header中的PID值为0x00的包,然后从Payload中找到PAT数据

需要注意的是如果TS Header中adaptation_field_control域指明存在adaption_field域,则在Payload中要跳过该域;另外,如果在TS Header中payload_unit_start_indicator置位,则说明真实数据之前还有一个字节的指针域,跳过这个域才能拿到真正的数据

PAT与PMT 部分相同的数据

PAT特有的数据

table_item

每个table_item 代表一个PMT 通过它可以找到想要观看的频道

PMT特有的数据

stream_info包含的字段

PMT 中stream_info中的信息是最关键的,它包含了数据流的类型和自身PID,可以根据这个两个字段判断PMT描述的是音频流还是视频流以及如何拿到该音视频流

TS中的音视频流

通常音视频编码器出来的数据时ES(Elementary Stream)基本流。以视频为例ES是指编码后的一个个视频帧,每个视频帧称为一个NAL(Network Abstraction Layer)单元。

在ES前面加上一个header 就形成了PES(Packet Elementary Stream)而 TS中的音视频流指的是具有共同时间基的一系列PES包形成的数据流

从上图中可以发现 ES 、PES 与TS之间的关系,

音视频原始数据经过音视频编码器后生成的压缩后的一系列音视频帧;再经过PES打包器打包之后,这些音视频帧就变成了PES包;最后对每一个PED包进行切割,将切割后的数据塞到TS包中(切割时候就会塞入红色的TS Header),这样就形成了TS的音视频流

PES Header

PES 由PES Header和PES Payload构成

PES Header 由Base Header和Optional Header组成

其中Base Header 占用6字节

Optional Header 可由3~259个字节组成

Base Header 分为3个域,分别为start_code 用于标识PES包的开始,stream_id用于标识是音频流还是视频流

其中0xCD~0xDF标识音频 0xE0~0xEF标识视频,packet_length PES的长度,这个长度是从packet_length 字段后的第一个字节开始算起,此值为0表示长度不受限制

start_code与stream_id组成的4字节成为PES的起始码,两个起始码之间的长度是一个PES包的总长度。

Optional Header

从上图中可知 Optional Header的前两位是固定值 必须位0b10后面的几个标志位不重要一般忽略,

PTS_DTS_flags标志位很重要,存在4种值

  • 0b00 代表PTS和DTS都不存在
  • 0b10 代表只有PTS 没有DTS
  • 0b11 表示PTS DTS 同时存在
  • 0b01 被禁止的 不能使用

header_info_length 标识了Optional Header 中是否有信息区域,如果值不为0的话说明后面还跟着信息区。而信息区中的内容就是根据前面Optional Header的几个标志位来决定 比如是否包含PTS DTS

PTS(Presentation Timestamp) DTS(Decode Timestamp)每个字段包含了40个bit 其中高4位是固定值 0010代表PTS 而0001代表DTS 剩下的36bit分为三部分

  • 3bit+1
  • 15bit+1
  • 15bit+1
目录
相关文章
|
2月前
|
缓存 中间件 测试技术
SOME/IP协议实践指南:精选开发与测试工具解析
SOME/IP协议实践指南:精选开发与测试工具解析
117 0
|
2月前
|
传感器 安全 中间件
深入浅出:SOME/IP协议中的服务发现机制解析
深入浅出:SOME/IP协议中的服务发现机制解析
169 0
|
2月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
201 0
|
1月前
|
算法
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
178 1
|
2月前
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
DNS协议 是什么?说说DNS 完整的查询过程? _
|
4天前
|
网络协议 Linux 分布式数据库
【Linux】DNS系统,ICMP协议,NAPT技术详解
NAPT(Network Address Port Translation),也被称为端口地址转换,是一种NAT(网络地址转换)的形式。NAPT允许多个设备在内部网络上使用私有IP地址,并通过单个公共IP地址与外部网络进行通信。NAPT通过改变传输层的端口号来实现这一点,从而允许多个内部设备共享同一个公共IP地址。
10 0
|
9天前
|
传感器 监控 网络协议
Modbus协议详细解析与案例分享
Modbus协议详细解析与案例分享
20 0
|
1月前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
10天前
|
网络协议 前端开发 数据安全/隐私保护
技术笔记:SOCKS5协议解析
技术笔记:SOCKS5协议解析
|
1月前
|
存储 安全 网络协议
邮件协议揭秘:SMTP与IMAP的双重功能解析
SMTP和IMAP是电子邮件系统的核心协议,SMTP负责邮件发送,通过SSL/TLS保证安全,而IMAP则处理邮件接收和管理,支持服务器存储及状态同步。这两种协议相辅相成,为现代邮件系统提供了坚实基础。它们广泛应用于各种邮件客户端,确保了兼容性、功能丰富性和安全性,满足用户对电子邮件的多样化需求。
44 3

推荐镜像

更多