当前位置:首页 > 物联网 > 网络协议
[导读]   HLS常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple

  HLS常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple 公司的 HTTP Live Streaming 是这个方面的代表。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流。现在见到在桌面也有很多应用了,HTML5 是直接支持这个。

  但是HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费。如果要实现数天的时移,索引量将会是个巨额数字,并明显影响请求速度。因此,HLS协议对存储I/O要求相当苛刻。对此,也有公司提出了非常好的解决方案。

  新型点播服务器系统,独创了内存缓存数据实时切片技术,颠覆了这种传统实现方法,从根本上解决了大量切片的碎片问题,使得单台服务器的切片与打包能力不再是瓶颈。其基本原理如下:

  不将TS切片文件存到磁盘,而是存在内存当中,这种技术使得服务器的磁盘上面不再会有“数以吨计”的文件碎片,极大减少了磁盘的I/O次数,延长了服务器磁盘的使用寿命,极大提高了服务器运行的稳定性。同时,由于使用这种技术,使得终端请求数据时直接从服务器的内存中获取,极大提高了对终端数据请求的反应速度,优化了视频观看体验。

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

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

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

  HLS协议简介

  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。

  

  图片来源于苹果官网

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

  HLS的index文件

  所谓index文件就是之前说的m3u8文本文件。

  

  图片来源于苹果官网

  如上图所示,客户端播放HLS视频流的逻辑其实非常简单,先下载一级Index file,它里面记录了二级索引文件(Alternate-A、Alternate-B、Alternate-C)的地址,然后客户端再去下载二级索引文件,二级索引文件中又记录了TS文件的下载地址,这样客户端就可以按顺序下载TS视频文件并连续播放。

  一级index文件

  视频源:https://dco4urblvsasc.cloudfront.net/811/81095_ywfZjAuP/game/index.m3u8

  #EXTM3U

  #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1064000

  1000kbps.m3u8

  #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=564000

  500kbps.m3u8

  #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=282000

  250kbps.m3u8

  #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2128000

  2000kbps.m3u8

  bandwidth指定视频流的比特率,PROGRAM-ID无用无需关注,每一个#EXT-X-STREAM-INF的下一行是二级index文件的路径,可以用相对路径也可以用绝对路径。例子中用的是相对路径。这个文件中记录了不同比特率视频流的二级index文件路径,客户端可以自己判断自己的现行网络带宽,来决定播放哪一个视频流。也可以在网络带宽变化的时候平滑切换到和带宽匹配的视频流。

  #EXTM3U

  #EXT-X-PLAYLIST-TYPE:VOD

  #EXT-X-TARGETDURATION:10

  #EXTINF:10,

  2000kbps-00001.ts

  #EXTINF:10,

  2000kbps-00002.ts

  #EXTINF:10,

  2000kbps-00003.ts

  #EXTINF:10,

  2000kbps-00004.ts

  #EXTINF:10,

  。。. 。。.

  #EXTINF:10,

  2000kbps-00096.ts

  #EXTINF:10,

  2000kbps-00097.ts

  #EXTINF:10,

  2000kbps-00098.ts

  #EXTINF:10,

  2000kbps-00099.ts

  #EXTINF:10,

  2000kbps-00100.ts

  #ZEN-TOTAL-DURATION:999.66667

  #ZEN-AVERAGE-BANDWIDTH:2190954

  #ZEN-MAXIMUM-BANDWIDTH:3536205

  #EXT-X-ENDLIST

  二级文件实际负责给出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文件,如此反复进行播放。

  HLS 的请求流程是:

  1 http 请求 m3u8 的 url。

  2 服务端返回一个 m3u8 的播放列表,这个播放列表是实时更新的,一般一次给出5段数据的 url。

  3 客户端解析 m3u8 的播放列表,再按序请求每一段的 url,获取 ts 数据流。

  简单流程:

  

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

苹果手机作为现代科技产品的代表,其屏幕亮度问题一直备受关注。有时候,用户可能会遇到苹果手机屏幕突然变暗的情况,这不仅影响了用户的使用体验,还可能对视力造成不良影响。本文将从多个角度分析苹果手机屏幕突然变暗的原因,并提供相...

关键字: 苹果 手机屏幕

自3月20日起,库克先后到访上海,北京。期间亚洲最大苹果直营店在上海开门营业,库克亲临。此外,他还密会了比亚迪王传福,不知谈论些什么机要。

关键字: iPhone 苹果 AI iPhone AI手机

业内消息,苹果正在中国寻找本土生成式AI提供方,近日传与百度就在中国市场的苹果设备中使用百度的生成式人工智能技术进行了初步谈判,或将在中国市场的苹果设备提供本土AI大模型,因为中国法律要求大模型在被允许使用之前,必须得到...

关键字: 苹果 百度 AI

业内消息,爆料人Mark Gurman透露苹果公司内部已经终止了microLED显示屏项目并开始裁员。据悉,苹果公司投资了数十亿美元用于研发microLED技术,但是这种全新的显示屏技术成本过高、制造过程复杂,因此苹果决...

关键字: 苹果 microLED 裁员

据央视消息,近日苹果CEO库克在国内访问,在昨天开幕的中国发展高层论坛2024年年会现场表示,苹果首款头显设备Vision Pro将在今年年内于中国市场上市,同时该公司正持续加大在华研发方面的投资。

关键字: Vision Pro 库克 苹果

业内消息,上周苹果公司在一份法律文件中表示,同意支付4.9亿美元(当前约合35亿人民币)以达成一项集体诉讼和解。该诉讼指控苹果公司违反美国联邦证券法,因其首席执行官库克对公司在中国市场的业绩做出了虚假和误导性的陈述。

关键字: 苹果 库克

业内消息,此前有爆料苹果计划在今年会将“Apple ID”更换为“Apple Account(苹果账户)”,近日长期跟踪苹果公司新闻的彭博科技记者马克·古尔曼(Mark·Gurman)在其Power On通讯中确认了有关...

关键字: 苹果 Apple ID

你也许听过“Magnificent Seven”的大名。没听过?无妨,它指的是2023年美股市值最高的7家企业,也就是微软、苹果、英伟达、Alphabet、亚马逊、Meta、特斯拉。

关键字: 微软 苹果 英伟达 Alphabet 亚马逊 Meta 特斯拉

近日外媒报道,2020年初苹果公司高管们在亚利桑那州的测试跑道上,进行了一次特别的试驾活动,他们体验了一款正在研发中的原型车。这辆原型车有着圆润且紧凑的车身,采用全玻璃车顶,拥有侧滑门和白色的轮胎,苹果内部将这种设计戏称...

关键字: 苹果

业内消息,近日苹果宣布扩大在中国的应用研究实验室,以支持产品的制造。苹果表示将提升上海研究中心的能力,为所有产品线的可靠性、质量和材料分析提供支持。

关键字: 苹果 实验室
关闭
关闭