HLS协议解析

简介: 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
目录
相关文章
|
XML 监控 网络协议
云深处绝影四足机器人协议学习解析
本文详细介绍并解析了云深处绝影X20四足机器人的通信协议,包括TCP服务端端口号、基于Service的请求/响应通信机制、通信帧结构、消息类型、常见的通信示例如获取状态和导航请求,以及运动控制的参数和命令。文中还提出了对协议中某些未明确说明或可能存在的问题的疑惑。
302 0
云深处绝影四足机器人协议学习解析
|
5月前
|
网络协议
为何UDP协议不可靠?DNS为何选择UDP?
总的来说,UDP和TCP各有优势,选择哪种协议取决于应用的具体需求。UDP可能不如TCP可靠,但其简单、快速的特性使其在某些场景下成为更好的选择。而DNS就是这样的一个例子,它利用了UDP的优势,以实现快速、高效的名字解析服务。
280 14
|
12月前
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
422 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
|
11月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
610 3
|
7月前
|
存储 缓存 网络协议
DNS协议详解
通过本文,您可以全面了解DNS协议的各个方面,从而更好地理解和应用这一重要的互联网基础服务。
1491 44
|
6月前
|
编解码 监控 网络协议
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
330 5
|
缓存 网络协议 安全
【网络攻防战】DNS协议的致命弱点:如何利用它们发动悄无声息的网络攻击?
【8月更文挑战第26天】DNS(域名系统)是互联网的关键组件,用于将域名转换为IP地址。然而,DNS协议存在安全漏洞,包括缺乏身份验证机制、缓存中毒风险及放大攻击的可能性。通过具体案例,如DNS缓存中毒和DNS放大攻击,攻击者能够误导用户访问恶意站点或对目标服务器实施DDoS攻击。为了防范这些威胁,可以采用DNSSEC实现数字签名验证、利用加密的DNS服务(如DoH或DoT)、限制DNS服务器响应以及及时更新DNS软件等措施。理解并应对DNS的安全挑战对于确保网络环境的安全至关重要。
422 2
|
9月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
488 3
|
10月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
267 3
|
10月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
758 3

推荐镜像

更多
  • DNS