聶長君
(作者單位:德陽市廣播電視臺)
HLS協(xié)議是蘋果公司研發(fā)的一種動態(tài)碼率自適應(yīng)技術(shù)。包含了一個m3u(8)索引文件和TS媒體分片文件以及key加密串文件(可選)。它主要用于電腦和蘋果設(shè)備終端的音視頻服務(wù)。
HLS文件是后綴為m3u8的文本列表文件,用記事本打開就可以看到結(jié)構(gòu)。m3u文件的utf-8格式而已,里面的視頻列表就是ts。直播時,播放器會定時反復(fù)請求這個文件,文件隨時更新就成直播,建議是10 s。
IP組播技術(shù)有其獨特的優(yōu)越性:在組播網(wǎng)絡(luò)中,即使用戶數(shù)量成倍增長,主干帶寬不需要隨之增加。這個優(yōu)點使它成為當(dāng)前網(wǎng)絡(luò)技術(shù)中的研究熱點之一。IP組播在一些多用戶定向發(fā)送的網(wǎng)絡(luò)應(yīng)用中使用非常普遍,如遠程多媒體會議、遠程教學(xué)、視頻點播、定向電子商務(wù),以及ISP的IPTV(網(wǎng)絡(luò)電視)等。
一個組播IP地址能夠標識網(wǎng)絡(luò)不同位置的多個用戶主機,多播地址范圍為224.0.0.0~239.255.255.255。
Nginx是一款輕量級的HTTP(Web服務(wù)器)/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個BSD-like協(xié)議下發(fā)行。其特點是并發(fā)能力強,占有內(nèi)存少,事實上Nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。目前,使用Nginx網(wǎng)站的用戶有:淘寶、騰訊、京東、百度、新浪、網(wǎng)易等。
FFmpeg不僅可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,還能將其轉(zhuǎn)化為流的開源計算機程序。FFmpeg使用LGPL或GPL許可證,具有非常強大的功能,包括視頻抓圖、視頻格式轉(zhuǎn)換、視頻采集功能、給視頻加水印等。它使用了非常先進的音視頻編解碼庫libavcodec,為保證超高的編解碼質(zhì)量和可移植性,libavcodec里很多code都是從頭開發(fā)的。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。
VLC是一款開源的跨平臺多媒體播放器,可在所有平臺上運行(Windows,Linux, Mac OS X, Unix, iOS, Android)。它支持眾多音頻與視頻解碼器,如常見的:MPEG*、DIVX、WMV、MOV、3GP、FLV、H.264、FLAC。有多種訪問形式:文件、光盤、http、ftp、mms、TCP/UDP、RTP/RTSP、IP組播、IPv4/IPv6等。它還能夠作為unicast或 multicast的流服務(wù)器,可以在IPv4或 IPv6的網(wǎng)絡(luò)環(huán)境下使用。此外,其還融合了FFmpeg的解碼器以及l(fā)ibdvdcss程序庫,帶有播放多媒體文件以及加密DVD影碟的功能。它完全免費、無間諜軟件、無廣告、無跟蹤用戶隱私的行為,是我們常用的一款流媒體及視音頻播放軟件。

圖1 Windows下HLS直播流的搭建(本文服務(wù)器:LMT-959)流程圖
圖1是基于Windows的HLS直播流的搭建(本文服務(wù)器:LMT-959)流程圖,具體步驟如下。
解壓Nginx軟件后,打開配置文件confmime.types,為了支持hls協(xié)議,需要修改內(nèi)容:
在 application/zip zip;這一行后面增加2行:
application/x-mpegURL m3u8;
application/vnd.apple.mpegurl m3u8;
在 video/x-msvideoavi;行后,增加1行:
video/MP2Tts;
注意:不要有中文路徑,若任務(wù)管理器中沒有ngnix的兩個進程,則未啟動成功。解決方案如下:
第一,關(guān)閉Windows防火墻。
第二,80端口被占用了(80端口為Nginx默認的配置,本文使用8081作為測試端口號)。需要修改文件conf ginx.conf,將里面的
server{
listen 80;//改為其他未被占用的端口號。
第一,使用RJ45雙絞線把服務(wù)器與IPTV編碼器連接起來,使服務(wù)器能夠讀取出IPTV編碼器的UDP流。
用VLC打開網(wǎng)絡(luò)串流(本文地址:udp∶//231.3.106.3∶1001)查看是否正常。
第二,編輯批處理文件運行或在C MD下運行。
d∶ffmpeg64inffmpeg-iudp∶//231.3.106.3∶1001 -strict -2 -c∶v libx264-b 1000000 -c∶aaac -hls_time 10 -hls_wrap 3 -f hls D∶ ginx-1.10.3htmldytv.m3u8
第三,在客戶端電腦中使用VLC打開網(wǎng)絡(luò)串流(本文地址:http∶//lmt-959∶8081/dytv.m3u8)播放測試,如圖2所示。

圖2 播放測試
第四,要想在互聯(lián)網(wǎng)上播放此HLS流地址,可以使用帶有固定IP出口的路由器端口映射到Nginx服務(wù)器。至此,蘋果、安卓、微軟等系統(tǒng)的手機、平板、電腦等都能播放此HLS直播流。
HLS協(xié)議相較于RTMP、RTSP、MMS等直播流媒體協(xié)議,不同在于:在服務(wù)器端,HLS將直播數(shù)據(jù)流存儲為連續(xù)的、很短時長的MPEG-TS格式媒體文件,而客戶端則不斷下載并播放這些連續(xù)的TS小文件。我們可以這樣認為,HLS是以點播的技術(shù)方式來實現(xiàn)直播。由于使用HTTP協(xié)議傳輸,所以完全不用考慮防火墻及代理的問題,加上分段文件時長很短,客戶端可以快速選擇和切換碼率,以適應(yīng)不同帶寬環(huán)境條件下的播放。但由于HLS的這種技術(shù)特點,它的延遲一般會高于普通的流媒體直播協(xié)議。
HTTP漸進下載(如:HLS協(xié)議)和基于RTSP/RTP的實時流媒體協(xié)議,是兩種完全不同的東西,目前比較好用又方便的是用HTTP漸進下載方法。其中,Apple公司的HLS協(xié)議是這方面的代表。它最初是蘋果公司針對iPhone、iPad等移動設(shè)備開發(fā)的流媒體直播協(xié)議?,F(xiàn)在,HTML5直接支持HLS,安卓(Android)也原生支持HLS,而微軟從Internet Explorer 9(簡稱IE9)就開始支持HTML5了,所以HLS是全平臺直播流。