HTTPLiveStreaming(HLS) HTTPLiveStreaming简称为HLS,是一个基于HTTP的视频流协议,由APPLE公司提出和实现。苹果公司的很多产品都支持HLS协议,譬如MacOS上的QuickTime、Safari以及iOS上的Safari。苹果2009年提出该协议,HLS是iOS设备默认要求的视频流标准。安卓也支持HLS,见文章GuidetoMobileVideoStreamingwithHLSMuxblog Sincethen,Androidhasaddedsupport,ashavemostotherplatforms。 HLS因为以下几个原因比较受欢迎。HLS几乎可随处播放。几个大平台web、mobile、tv基本都有免费的HLS播放器支持。苹果要求HLS。如果你想在iOS设备直播,逃不了的。HLS相对简单。它使用了普遍且已经存储的视频格式(MP4或TS,伴随着H。264和AAC等编解码器),另外附加了一个丑陋但人类可读的文本格式(m3u8)。它通过HTTP工作。不需要跑特殊的服务(不像老旧校风派的RTMP协议或者新潮的WebRTC协议)。HLS可以方便的透过防火墙或者代理服务器,而且可以很方便的利用CDN进行分发加速,并且客户端实现起来也很方便。原理 HLS协议基于HTTP,而一个提供HLS的服务器需要做两件事:编码:以H。264格式对图像进行编码,以MP3或者HEAAC对声音进行编码,最终打包到MPEG2TS(TransportStream)容器之中;分割:把编码好的TS文件等长切分成后缀为ts的小文件,并生成一个。m3u8的纯文本索引文件 HLS把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。HLS协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP是传输协议,M3U8是索引文件,TS是音视频的媒体信息。 浏览器使用的是m3u8文件。在HTML5页面上使用HLS非常简单,直接videosrca2020imgdataimg。jpgdatasrcexample。m3u8controlsvideo 或者videocontrolssourcesrca2020imgdataimg。jpgdatasrcexample。m3u8sourcevideo HLS的index文件就是m3u8的文件,先下载一级indexfile(masterplaylist。m3u8),它里面记录了二级索引文件的地址(AlternateA、AlternateB、AlternateC)的地址,然后客户端再去下载二级索引文件,二级索引文件中又记录了TS文件的下载地址,这样客户端就可以按顺序下载TS视频文件并连续播放。 一个典型的一级索引m3u8文件格式如下:EXTM3UEXTXSTREAMINF:PROGRAMID1,BANDWIDTH2000000,CODECSmp4a。40。2,avc1。4d401fskiing720p。m3u8EXTXSTREAMINF:PROGRAMID1,BANDWIDTH375000,CODECSmp4a。40。2,avc1。4d4015skiing360p。m3u8EXTXSTREAMINF:PROGRAMID1,BANDWIDTH750000,CODECSmp4a。40。2,avc1。4d401eskiing480p。m3u8EXTXSTREAMINF:PROGRAMID1,BANDWIDTH3500000,CODECSmp4a。40。2,avc1。4d401eskiing1080p。m3u8 〔免费分享〕007,资料包括《Andoird音视频开发必备手册音视频学习视频学习文档资料包大厂面试真题2022最新学习路线图》等,点击下方链接加卫星获取 FFmpegWebRTCRTMPRTSPHLSRTP播放器音视频流媒体高级开发 详细介绍如下:bandwidth指定视频流的比特率PROGRAMID无用无需关注,每一个EXTXSTREAMINF的下一行是二级index文件的路径,可以用相对路径也可以用绝对路径。例子中用的是相对路径。 一级索引m3u8文件中记录了不同比特率视频流的二级index文件路径,客户端可以自己判断自己的现行网络带宽,来决定播放哪一个视频流。也可以在网络带宽变化的时候平滑切换到和带宽匹配的视频流。 一个二级索引文件格式内容如下(skiing480p。m3u8):EXTM3UEXTXTARGETDURATION:10EXTXVERSION:3EXTXMEDIASEQUENCE:0EXTXPLAYLISTTYPE:VODEXTINF:9。97667,file000。tsEXTINF:9。97667,file001。tsEXTINF:9。97667,file002。tsEXTINF:9。97667,file003。tsEXTINF:9。97667,file004。ts 可以简单的认为二级m3u8就是包含多个ts文件的播放列表。播放器按顺序逐个播放,全部放完再请求一下m3u8文件,获得包含最新ts文件的播放列表继续播,周而复始。整个直播过程就是依靠一个不断更新的m3u8和一堆小的ts文件组成,m3u8必须动态更新,ts可以走CDN。整体架构 HLS的架构分为三部分:Server,CDN,Client。即服务器、分发组件和客户端。架构图如下: HLS缺点 HLS不是万能的,它也有一个致命的弱点:延迟现象非常明显。如果每个ts按照5秒来切分,一个m3u8放6个ts索引,那么至少就会带来30秒的延迟。如果减少每个ts的长度,减少m3u8中的索引数,延时确实会减少,但会带来更频繁的缓冲,对服务端的请求压力也会成倍增加。所以只能根据实际情况找到一个折中的点。 另外一点,HLS基于短连接HTTP,HTTP是基于TCP的,这就意味着HLS需要不断地与服务器建立连接,TCP每次建立连接时的三次握手、慢启动过程、断开连接时的四次挥手都会产生消耗。RealTimeMessagingProtocol(RTMP) RealTimeMessagingProtocol(简称RTMP)是Macromedia开发的一套视频直播协议,现在属于Adobe。 协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPTRTMPSRTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在FlashAIR平台和支持RTMP协议的流媒体交互服务器之间进行音视频和数据通信。 无法支持移动端WEB播放是它的硬伤。虽然无法在iOS的H5页面播放,但是iOS原生应用可以写解码去解析的。浏览器端,HTML5video标签无法播放RTMP协议的视频,可以通过video。js来实现。 其主要优点:实时性非常好,延时较小,通常为13s基于TCP长连接,不需要多次建连。HLS和RTMP对比 整体直播方案 如上所见,两个协议各有所长,所以实际项目中需要自己抉择到底采用哪种方案。直播整体架构如下。 【学习更多进入链接点击免费报名,即可开始学习】 【免费】FFmpegWebRTCRTMPNDKAndroid音视频流媒体高级开发学习视频教程腾讯课堂