簡介: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備註:
文中所描述的切片軟件可能有問題,可選擇這個