HLS协议详解[通俗易懂]

HLS协议详解[通俗易懂]今天来介绍一下HLS协议,这个协议是由苹果公司提出并推广开来的。来一段维基百科的定义。HTTPLiveStreaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTimeX和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

今天来介绍一下HLS协议,这个协议是由苹果公司提出并推广开来的。来一段维基百科的定义。

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

HLS只请求基本的HTTP报文,与
实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的
防火墙或者
代理服务器。它也很容易使用
内容分发网络来传输媒体流。

苹果公司把HLS协议作为一个
互联网草案(逐步提交),在第一阶段中已作为一个非正式的标准提交到
IETF。但是,即使苹果偶尔地提交一些小的更新,IETF却没有关于制定此标准的有关进一步的动作。
[1]

协议简介

HLS协议规定:

  • 视频的封装格式是TS。
  • 视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。
  • 除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)。

为什么苹果要提出HLS这个协议,其实他的主要是为了解决RTMP协议存在的一些问题。比如RTMP协议不使用标准的HTTP接口传输数据,所以在一些特殊的网络环境下可能被防火墙屏蔽掉。但是HLS由于使用的HTTP协议传输数据,不会遇到被防火墙屏蔽的情况(该不会有防火墙连80接口都不放过吧)。

另外于负载,RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。而HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。

 

另外HLS协议本身实现了码率自适应,不同带宽的设备可以自动切换到最适合自己码率的视频播放。其实HLS最大的优势就是他的亲爹是苹果。苹果在自家的IOS设备上只提供对HLS的原生支持,并且放弃了flash。Android也迫于平果的“淫威”原生支持了HLS。这样一来flv,rtmp这些Adobe的视频方案要想在移动设备上播放需要额外下点功夫。当然flash对移动设备造成很大的性能压力确实也是自身的问题。

但HLS也有一些无法跨越的坑,比如采用HLS协议直播的视频延迟时间无法下到10秒以下,而RTMP协议的延迟最低可以到3、4秒左右。所以说对直播延迟比较敏感的服务请慎用HLS

HLS协议详解[通俗易懂]

         来解释一下这张图,从左到右讲,左下方的inputs的视频源是什么格式都无所谓,他与server之间的通信协议也可以任意(比如RTMP),总之只要把视频数据传输到服务器上即可。这个视频在server服务器上被转换成HLS格式的视频(既TS和m3u8文件)文件。细拆分来看server里面的Media encoder的是一个转码模块负责将视频源中的视频数据转码到目标编码格式(H264)的视频数据,视频源的编码格式可以是任何的视频编码格式(参考
《视频技术基础》)。转码成H264视频数据之后,在stream segmenter模块将视频切片,切片的结果就是index file(m3u8)和ts文件了。图中的Distribution其实只是一个普通的HTTP文件服务器,然后客户端只需要访问一级index文件的路径就会自动播放HLS视频流了。

 

HLS的index文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXT-X-DISCONTINUITY
#EXTINF:9.067, no desc
livestream-0.ts
#EXTINF:7.394, no desc
livestream-1.ts
#EXTINF:7.656, no desc
livestream-2.ts
#EXTINF:7.592, no desc
livestream-3.ts
#EXTINF:7.701, no desc
livestream-4.ts
#EXTINF:8.712, no desc
livestream-5.ts

Jetbrains全家桶1年46,售后保障稳定

         二级文件(.ts)实际负责给出ts文件的下载地址,这里同样使用了相对路径。#EXTINF表示每个ts切片视频文件的时长。#EXT-X-TARGETDURATION指定当前视频流中的切片文件的最大时长,也就是说这些ts切片的时长不能大于#EXT-X-TARGETDURATION的值。#EXT-X-PLAYLIST-TYPE:VOD的意思是当前的视频流并不是一个直播流,而是点播流,换句话说就是该视频的全部的ts文件已经被生成好了,#EXT-X-ENDLIST这个表示视频结束,有这个标志同时也说明当前的流是一个非直播流。

播放模式

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

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

       客户端在播放VOD模式的视频时其实只需要下载一次一级index文件和二级index文件就可以得到所有ts文件的下载地址,除非客户端进行比特率切换,否则无需再下载任何index文件,只需顺序下载ts文件并播放就可以了。但是Live模式下略有不同,因为播放的同时,新ts文件也在被生成中,所以客户端实际上是下载一次二级index文件,然后下载ts文件,再下载二级index文件(这个时候这个二级index文件已经被重写,记录了新生成的ts文件的下载地址),再下载新ts文件,如此反复进行播放。

总结

其他的一些细节不想写了,发现简书上有一个作者写的很好了,其实我上面的总结和他的文章相比也没有什么新的内容。建议去看他的文章《HTTP Live Streaming (HLS) – 概念》.

转载自:http://www.jianshu.com/p/426425cad08a

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228003.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月19日 下午9:22
下一篇 2025年6月19日 下午10:01


相关推荐

  • 手机能识别外接硬盘电脑不能了怎么回事,手机能读取硬盘

    手机能识别外接硬盘电脑不能了怎么回事,手机能读取硬盘

    2026年3月13日
    3
  • C语言的printf输出格式

    C语言的printf输出格式1、控制小数点后有多少位:printf(“%.10lf\n”,f_a); //将浮点数f_a输出时,输出其小数点后10位,默认是输出小数点后6位。2、控制一共(小数点前后以及小数点)输出多少位:printf(“%10.7f\n”,f_b); //将浮点数f_b输出时,输出其小数点前2位,小数点后7位(加上小数点共10位)。3、输出时让正数带”+”号,负数带”-“号:printf(“%+f\

    2022年7月24日
    18
  • 寒衣节有感而发_春寒叹表达了诗人什么感情

    寒衣节有感而发_春寒叹表达了诗人什么感情寒衣节有感而发

    2022年4月20日
    58
  • archlinux安装教程以及自己踩过的坑

    archlinux安装教程以及自己踩过的坑引言 linux 是一种哲学 最近喜欢上了 arch 的简洁 可高度定制化 滚动更新和设计哲学 准备日常办公从 ubuntu 转向 arch 目前已完成安装 正在使用 arch 写这篇博客 而事实证明 arch 确实没让我失望 它的确是一个非常不错的发行版 安装环境 cpu i5ram 12G 台式电脑一块硬盘 有剩余空间或新硬盘都可以 我这里用的是 1T 新硬盘 GPT 分区 UEFI 启动 一块 8GU 盘从

    2026年3月17日
    2
  • A-KAZE论文研读

    A-KAZE论文研读AKAZE是KAZE的加速版本。KAZE在构建非线性空间的过程中很耗时,在AKAZE中将FastExplicitDiffusion(FED)加入到金字塔框架可以dramaticallyspeed-up。在描述子方面,AKAZE使用了更高效的ModifiedLocalDifferenceBinary(M-LDB),可以从非线性空间中利用梯度信息gradientinformation。M…

    2022年6月24日
    25
  • Android Binder机制(超级详尽)

    1.binder通信概述   binder通信是一种client-server的通信结构,   1.从表面上来看,是client通过获得一个server的代理接口,对server进行直接调用;   2.实际上,代理接口中定义的方法与server中定义的方法是一一对应的;   3.client调用某个代理接口中的方法时,代理接口的方法会将client传递的参数打包成为Pa

    2022年4月6日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号