当前位置: 首页 > news >正文

HLS协议

        HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于 HTTP 流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

        在开始一个流媒体会话 ,客户端会下载一个包含元数据的 extended M3U (m3u8)playlist 文件,用于寻找可用的媒体流。HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

        在服务器端,流媒体文件被切割成一个一个的小分片,这些小分片有着相同的时长(常用 10s),每一个小分片是一个 ts 文件。同时 产生一个索引文件(m3u8),索引文件里存放了 ts 文件的 URL

客户端请求方式分两种,一种是点播(vod),一种是直播(live

Video on demand:视频点播,有求才播放

vod:客户端一次获取整个 m3u8 文件,按照里面的 URL 获取 ts 文件,采用 HTTP 协议。

live:由于 M3u8 文件时实时更新的,所以客户端每隔一段时间获取 m3u8 文件,再根据里面的 URL 获取 ts 文件,采用 HTTP 协议。

HLS总体架构

1、 服务器将媒体文件转换为 m3u8 ts 分片;对于直播源,服务器需要实时动态更新。

2、 客户端请求 m3u8 文件,根据索引获取 ts 分片;点播与直播服务器不同的地方是, 直播的 m3u8 文件会不断更新,而点播的 m3u8 文件是不会变的,只需要客户端在开始时请求一次即可。

HLS优劣势

优势:

客户端支持简单,只需要支持 HTTP 请求即可,HTTP 协议无状态,只需要按顺序下载媒体片段即可。使用 HTTP 协议网络兼容性好,HTTP 数据包也可以方便地通过防火墙或者代理服务器。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样资源(多码流自适应,允许流媒体会话适应不同的数据速率。

劣势:

因其自身的实现方式,HLS 存在延迟(最少有一个分片),对于直播等实时敏感的场景,

体验不好。

M3U8 详解

HLS 协议很大一部分内容即是对 M3U8 文本协议的描述。 M3U8 即播放索引文件,也称为 Playlist,是由多个独立行组成的文本文件,必须通过URI(.m3u8 或 .m3u) 或 者 HTTP Content-Type 来 识 别 (application/vnd.apple.mpegurl 或 audio/mpegurl)。

每行由用 \n 或者 \r\n 来标识换行。每一行可以是一个 URI、空白行或是一个 以# 号开头的字符串。

# 开头的是 tag 或者注释,以 #EXT 开头的是 tag, 其余的为注释, 在解析时应该忽略。URI 表示一个 ts 分片地址或是 Playlist 地址。URI 可以用绝对地址或者相对地址,如果使用相对地址,那么是相对于当前 Playlist 的地址。有些 tag 带有属性值,多个属性用逗号分隔。常见的 m3u8 文件如下所示:

一级M3U8:

二级M3U8:

详解

HLS 是提供一个 m3u8 地址。

Apple Safari 浏览器直接就能打开 m3u8 地址,譬如:

http://demo.srs.com/live/livestream.m3u8

Android 不能直接打开,需要使用 html5 video 标签,然后在浏览器中打开这个页面即可,

譬如:

<!-- livestream.html -->

<video width="640" height="360"

autoplay controls autobuffer

src="http://demo.srs.com/live/livestream.m3u8"

type="application/vnd.apple.mpegurl">

</video>

HLS 协议规定

视频的封装格式TS

视频的编码格式H264,音频编码格式MP3AAC 或者 AC-3

除了 TS 视频文件本身,还定义了用来控制播放的 m3u8 文件(文本文件)

        点播 VOD 的特点就是当前时间点可以获取到所有 index 文件和 ts 文件,二级 index 文件中记录了所有 ts 文件的地址。这种模式允许客户端访问全部内容。上面的例子中就是一个点播模式下的 m3u8 的结构。

        Live 模式就是实时生成 M3u8 ts 文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级 index 文件,以获得最新生成的 ts 文件播放视频。如果一个二级 index 文件的末尾没有#EXT-X-ENDLIST 标志,说明它是一个 Live 视频流。

TS文件

        ts 文件为传输流文件(MPEG2 - tranport stream),视频编码主要格式 h264/mpeg4,音频为 acc/MP3

ts 文件分为三层

ts Transport Streampes Packet Elemental Streames Elementary Stream。

es 层就是音视频压缩数据,pes 层是在音视频数据 es 上加了时间戳(pts,dts)等对数据帧的说明信息,ts 层就是在 pes 层加入数据流的识别和传输必须的信息。


http://www.mrgr.cn/news/44645.html

相关文章:

  • 【C++前缀和】2420. 找到所有好下标|1695
  • 【数据结构】深度解析堆排序
  • 计算机中科学中有哪些空间换时间的操作??
  • 苹果手机UDID查询设备型号源码
  • Ubuntu有关redis的命令
  • 职场人的AI必修课,12个行动,助力职场提升!
  • RTOS系统移植
  • 基于SpringBoot+Uniapp的家庭记账本微信小程序系统设计与实现
  • OpenJudge | Shortest Prefixes
  • 单细胞组学大模型(6)--- LangCell,医学/细胞文本知识增强模型效果
  • 数据结构和算法简介
  • 《数字图像处理基础》学习01-数字图像处理的相关基础知识
  • cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)
  • HTB:Funnel[WriteUP]
  • 基于单片机的信号选择与温度变化
  • 每日一题|871. 最低加油次数|动态规划、内层逆序遍历
  • Yocto - 使用Yocto开发嵌入式Linux系统_08 掌握软件包相关功能
  • MySQL/MariaDB如何实现数据透视表
  • 基于MindSpore的恶性皮肤肿瘤识别
  • 【java】数据类型与变量以及操作符