如何生成HLS协议的M3U8文件
HLS(Http Live Streaming)是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。
HLS协议应用:
由于传输层协议只需要标准的 HTTP 协议, HLS 可以方便的透过防火墙或者代理服务器, 而且可以很方便的利用CDN进行分发加速, 这样就可以很方便的解决大规模应用的瓶颈。并且客户端实现起来也容易。
HLS 目前广泛地应用于点播和直播领域,HLS协议是将音视频流通过HTTP协议传输出去,实现视频直播,HLS协议实现是关键。尤其目前直播领域的手机移动端的直播协议,基本上都是采用了苹果公司的HLS协议。可以说这个协议的出现解决了移动端的直播播放问题。
HLS协议架构图:
M3U8文件的生成和解析:
HLS 协议的主要内容是关于 M3U8 这个文本协议的, 其实生成与解析都非常简单。下面是给出实际应用的例子:
Media Playlist (媒体播放列表)
· HLS 通过 URI(RFC3986) 指向的一个 Playlist 来表示一个媒体流。
· 一个 Playlist 可以是一个 Media Playlist 或者 Master Playlist, 使用 UTF-8 编码的文本文件, 包含一些 URI 跟描述性的 tags。
· 一个 Media Playlist 包含一个 Media Segments 列表,当顺序播放时, 能播放整个完整的流。
· 要想播放这个 Playlist, 客户端需要首先下载他, 然后播放里面的每一个 Media Segment。
· 更加复杂的情况是, Playlist 是一个 Master Playlist, 包含一个 Variant Stream 集合, 通常每个 Variant Stream 里面是同一个流的多个不同版本(如: 分辨率, 码率不同)。
HLS Media Segments
· 每一个 Media Segment 通过一个 URI 指定, 可能包含一个 byte range。
· 每一个 Media Segment 的 duration 通过 EXTINF tag 指定。
· 每一个 Media Segment 有一个唯一的整数 Media Segment Number。
· 有些媒体格式需要一个 format-specific sequence 来初始化一个 parser, 在 Media Segment 被 parse 之前. 这个字段叫做 Media Initialization Section, 通过 EXT-X-MAP tag 来指定。
HLS 的优势
客户端支持简单, 只需要支持 HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可。
使用 HTTP 协议网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器, CDN 支持良好。
Apple 的全系列产品支持, 由于 HLS 是苹果提出的, 所以在 Apple 的全系列产品包括 iphone, ipad, safari 都不需要安装任何插件就可以原生支持播放 HLS, 现在, Android 也加入了对 HLS 的支持。
自带多码率自适应, Apple 在提出 HLS 时, 就已经考虑了码流自适应的问题。
HLS 的劣势
相比 RTMP 这类长连接协议, 延时较高, 难以用到互动直播场景。
对于点播服务来说, 由于 TS 切片通常较小, 海量碎片在文件分发, 一致性缓存, 存储等方面都有较大挑战。
HLS 延时问题
HLS 理论延时 = 1 个切片的时长 + 0-1个 td (td 是 EXT-X-TARGETDURATION, 可简单理解为播放器取片的间隔时间) + 0-n 个启动切片(苹果官方建议是请求到 3 个片之后才开始播放) + 播放器最开始请求的片的网络延时(网络连接耗时)。为了追求低延时效果, 可以将切片切的更小, 取片间隔做的更小, 播放器未取到 3 个片就启动播放. 但是, 这些优化方式都会增加 HLS 不稳定和出现错误的风险。
如今很多流媒体直播系统厂商都使用了HLS协议来解决安卓手机和苹果手机端的播放问题。自动生成有效的直播视频的M3U8播放链接地址,也就是HLS协议的M3U8的文件以便在第三方支持M3U8的播放器上流畅播放如VLC播放器或者和HTML5的网页技术结合通过移动端的浏览器网页观看直播视频。
示例播放代码如下:
嵌入网页的HTML代码
script type="text/javascript" src="http://192.168.1.44:8083/assets/player.js" /script script type="text/javascript" p2ps_embed("hls", "live", "http://192.168.1.44:8083/videos/live/22/39/tUabV17nAPCev", "p2ps_video", "640", "480", "10.1.0", "http://192.168.1.44:8083/assets/expressInstall.swf",{}, {allowFullScreen:true, allowScriptAccess: "always"}); /script div id="p2ps_video" h1 我们需要Flash player 10.1 或以上版本来播放。 /h1 p a href="http://www.adobe.com/go/getflashplayer" img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="安装最新的Flash player" / /a /p /div
移动端M3U8链接
http://192.168.1.44:8083/videos/live/22/39/tUabV17nAPCev/tUabV17nAPCev.M3U8
深入理解rtmp(四)之协议实现分析 接下来要实现connect,createStream,play,..,为了效率和篇幅,我们直接分析srs-librtmp的实现.srs-librtmp是从srs作者为srs服务实现的客户端库(The client library srs-librtmp of SRS),其实不止客户端,也实现了一个简单的server功能.
产品百科 |HLS 标准加密安全播放 为了加强标准加密视频在解密播放时解密秘钥的安全性,业务方需要同时提供令牌服务和解密服务,其中令牌服务生成鉴权令牌,解密服务用于验证令牌和获取解密秘钥。
FLV协议5分钟入门浅析 FLV(Flash Video)是一种流媒体格式,因其体积小、协议相对简单,很快便流行开来,并得到广泛的支持。 常见的HTTP-FLV直播协议,就是使用HTTP流式传输通过FLV封装的音视频数据。对想要了解HTTP-FLV的同学来说,了解FLV协议很有必要。
rtmp/rtsp/hls公网测试地址 相信大家在调试播放器的时候,都有这样的困惑,很难找到合适的公有测试源,以下是大牛直播SDK整理的真正可用的直播地址源。 其中,rtmp和rtsp的url,用https://github.com/daniulive/SmarterStreaming提供的播放器验证通过。
为SRS流媒体服务器添加HLS加密功能(附源码) 为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的叫做SRS的流媒体服务器,比较活跃,而且据说这个流媒体服务器的性能和功能都强大不少,但遗憾的是没有HLS加密功能。
相关文章
- python操作json文件的四种常用方法(最最详细)
- Linux命令:wget【Linux系统用于从Web下载文件的命令行工具,支持 HTTP、HTTPS及FTP协议下载文件,而且wget还提供了很多选项,例如下载多个文件、后台下载,使用代理】
- rust 多文件工程
- Python创建删除文件
- VS code 重装node后报错:无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
- Maven 指定要打包的文件
- 如何下载 Chrome CRX 文件 How to download a CRX file from the Chrome web store
- Maven的pom.xml文件结构之基本配置parent和继承结构
- java 保存和读取本地json文件
- 查找指定日期创建的文件
- linux查找删除某天前的文件(转载)
- 查询进程所对应的执行脚本文件
- 三种存储类型比较-文件、块、对象存储(转)
- 【甄选靶场】Vulnhub百个项目渗透——项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析)
- 从PFX文件中获取私钥、公钥证书、公钥
- android 向serverGet和Post请求的两种方式,android向server发送文件,自己组装协议和借助第三方开源
- js:package.json文件一些不常用字段的含义
- node系列:本地修改文件自动重启node服务器
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
- .NET(C#)反编译动态创建cs文件的几种工具
- 使用python调用wps v9转换office文件到pdf
- iOS开发网络篇—使用ASI框架进行文件下载
- 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
- 日志文件锁定问题
- 计算文件的MD5值上传到服务器 下载验证文件是否被篡改