简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。 html
是苹果公司QuickTime X和iPhone软件系统的一部分。它的工做原理是把整个流分红一个个小的基于HTTP linux
的文件来下载,每次只下载一些。当媒体流正在播放时,客户端能够选择从许多不一样的备用源中以不一样的速 nginx
率下载一样的资源,容许流媒体会话适应不一样的数据速率。在开始一个流媒体会话时,客户端会下载一个包 git
含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。 github
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不一样,HLS能够穿过任何容许HTTP数据经过的防 web
火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。 redis
此协议详细内容请参考apple官方网站:https://developer.apple.com/resources/http-streaming/ bootstrap
有两种方式搭建HLSserver, ubuntu
一种是利用apple SDK, windows
一种是利用adobe 的fms,4.5版本支持hls,参考,
adobe的fms如今很强大,可是商用须要licence。有兴趣的能够研究下。
一种是利用opensouce.我比较喜欢这一种。
方法:
opensource的方法主要是使用m3u8-segmenter+ffmpeg对ts文件进行分片。
所以思路就是:
1,用编译好的ffmpeg制做所须要的ts文件,
2,安装libavformat-dev版本,
3,编译m3u8-segmenter,
4,部署到nginx
5,高级功能,流切换
6,页面
过程
1,原本想下载ffmpeg源码编译,可是由于要涉及到faac,x264,lame库。有时候ffmpeg版本对这些库的版本又有最低版本要求,在编译
faac时候遇到如下问题
最后一个问题没法解决,好像是linux(ubuntu)下同一个目录下,若是已经有一个文件了,则不能建立同名文件夹,遂放弃编译,
直接从ffmpeg网站:http://ffmpeg.org/download.html ,的linux下载页面下载编译好ffmpeg静态文件。这个静态文件的主要目的是
为了把各类文件转换成apple所规定的文件。因此须要AAC,mp3,x264库支持。
或者干脆按照2的方法。apt-get install ffmpeg.这样会获得ffmpeg可行性文件。
2,安装ffmpeg支持库,主要用于编译m3u8-segmenter,这里的ffmpeg支持库,其目的是给segmenter提供libavformat支持。不涉及编解码。
apt-get install libavformat-dev.
3,从https://github.com/johnf/m3u8-segmenter 下载m3u8-segmenter
下载后不要用它的反复编译,直接取m3u8-segmenter.c文件,
从源码来看,由于只用到了avformat库,因此只连接这一个便可。生成segmenter文件,用help命令,能够看到已经成功。
4,部署到nginx。
nginx的相关部署我在前两个博客中已经详细说明,这里在jwplayer博客的基础上部署hls。
1)目录问题:
在html/jwplayer目录下,创建hls文件夹,将m3u8文件和切割后的所有ts文件拷贝到此目录下,
在VLC PLAYER或者ipad safie浏览器或者在ffplayer(我用的是0.11版本的windows编译版本)
上的访问路径应该是http://192.168.1.10:8080/hls/stream-test.m3u8
2)文件类型问题:编辑 /usr/local/nginx/conf/mime.types 文件,添加以下类型
输入上述路径,你应该就看到视频了。
5,高级功能,流切换
上述m3u8文件,只有一个流,不具有流切换功能。在优酷上,若是是ipad客户端,能够看到有标清,高清,超清的按钮,其实那个是对应着不一样标准
的(单个)m3u8文件,来实现流切换的,不知道apple是否是这样作的,apple好像是要求“智能”流切换。即不要求用户去选择,而是根据网络情况自适应的。
apple给的sample的流切换是把各个流的m3u8写在一个m3u8文件里实现的。
相似于这样,其实原理是同样的。
若是再继续搭建一个页面,把上述地址嵌在页面里面,这样配合CSS就比较美观了。页面能够在这个基础上,用webpy去作。
页面参考:
苹果开发网:https://developer.apple.com/resources/http-streaming/
博客:http://www.nginxs.com/linux/459.html
ffmpeg开发网:http://ffmpeg.org/download.html
segmenter源码:https://github.com/johnf/m3u8-segmenter
2014.02备注:
文中所描述的切片软件可能有问题,可选择这个