聶長(zhǎng)君
(作者單位:德陽(yáng)市廣播電視臺(tái))
HLS協(xié)議是蘋(píng)果公司研發(fā)的一種動(dòng)態(tài)碼率自適應(yīng)技術(shù)。包含了一個(gè)m3u(8)索引文件和TS媒體分片文件以及key加密串文件(可選)。它主要用于電腦和蘋(píng)果設(shè)備終端的音視頻服務(wù)。
HLS文件是后綴為m3u8的文本列表文件,用記事本打開(kāi)就可以看到結(jié)構(gòu)。m3u文件的utf-8格式而已,里面的視頻列表就是ts。直播時(shí),播放器會(huì)定時(shí)反復(fù)請(qǐng)求這個(gè)文件,文件隨時(shí)更新就成直播,建議是10 s。
IP組播技術(shù)有其獨(dú)特的優(yōu)越性:在組播網(wǎng)絡(luò)中,即使用戶數(shù)量成倍增長(zhǎng),主干帶寬不需要隨之增加。這個(gè)優(yōu)點(diǎn)使它成為當(dāng)前網(wǎng)絡(luò)技術(shù)中的研究熱點(diǎn)之一。IP組播在一些多用戶定向發(fā)送的網(wǎng)絡(luò)應(yīng)用中使用非常普遍,如遠(yuǎn)程多媒體會(huì)議、遠(yuǎn)程教學(xué)、視頻點(diǎn)播、定向電子商務(wù),以及ISP的IPTV(網(wǎng)絡(luò)電視)等。
一個(gè)組播IP地址能夠標(biāo)識(shí)網(wǎng)絡(luò)不同位置的多個(gè)用戶主機(jī),多播地址范圍為224.0.0.0~239.255.255.255。
Nginx是一款輕量級(jí)的HTTP(Web服務(wù)器)/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like協(xié)議下發(fā)行。其特點(diǎn)是并發(fā)能力強(qiáng),占有內(nèi)存少,事實(shí)上Nginx的并發(fā)能力在同類(lèi)型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好。目前,使用Nginx網(wǎng)站的用戶有:淘寶、騰訊、京東、百度、新浪、網(wǎng)易等。
FFmpeg不僅可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,還能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。FFmpeg使用LGPL或GPL許可證,具有非常強(qiáng)大的功能,包括視頻抓圖、視頻格式轉(zhuǎn)換、視頻采集功能、給視頻加水印等。它使用了非常先進(jìn)的音視頻編解碼庫(kù)libavcodec,為保證超高的編解碼質(zhì)量和可移植性,libavcodec里很多code都是從頭開(kāi)發(fā)的。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。
VLC是一款開(kāi)源的跨平臺(tái)多媒體播放器,可在所有平臺(tái)上運(yùn)行(Windows,Linux, Mac OS X, Unix, iOS, Android)。它支持眾多音頻與視頻解碼器,如常見(jiàn)的:MPEG*、DIVX、WMV、MOV、3GP、FLV、H.264、FLAC。有多種訪問(wèn)形式:文件、光盤(pán)、http、ftp、mms、TCP/UDP、RTP/RTSP、IP組播、IPv4/IPv6等。它還能夠作為unicast或 multicast的流服務(wù)器,可以在IPv4或 IPv6的網(wǎng)絡(luò)環(huán)境下使用。此外,其還融合了FFmpeg的解碼器以及l(fā)ibdvdcss程序庫(kù),帶有播放多媒體文件以及加密DVD影碟的功能。它完全免費(fèi)、無(wú)間諜軟件、無(wú)廣告、無(wú)跟蹤用戶隱私的行為,是我們常用的一款流媒體及視音頻播放軟件。
圖1 Windows下HLS直播流的搭建(本文服務(wù)器:LMT-959)流程圖
圖1是基于Windows的HLS直播流的搭建(本文服務(wù)器:LMT-959)流程圖,具體步驟如下。
解壓Nginx軟件后,打開(kāi)配置文件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ù)管理器中沒(méi)有ngnix的兩個(gè)進(jìn)程,則未啟動(dòng)成功。解決方案如下:
第一,關(guān)閉Windows防火墻。
第二,80端口被占用了(80端口為Nginx默認(rèn)的配置,本文使用8081作為測(cè)試端口號(hào))。需要修改文件conf ginx.conf,將里面的
server{
listen 80;//改為其他未被占用的端口號(hào)。
第一,使用RJ45雙絞線把服務(wù)器與IPTV編碼器連接起來(lái),使服務(wù)器能夠讀取出IPTV編碼器的UDP流。
用VLC打開(kāi)網(wǎng)絡(luò)串流(本文地址:udp∶//231.3.106.3∶1001)查看是否正常。
第二,編輯批處理文件運(yùn)行或在C MD下運(yùn)行。
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打開(kāi)網(wǎng)絡(luò)串流(本文地址:http∶//lmt-959∶8081/dytv.m3u8)播放測(cè)試,如圖2所示。
圖2 播放測(cè)試
第四,要想在互聯(lián)網(wǎng)上播放此HLS流地址,可以使用帶有固定IP出口的路由器端口映射到Nginx服務(wù)器。至此,蘋(píng)果、安卓、微軟等系統(tǒng)的手機(jī)、平板、電腦等都能播放此HLS直播流。
HLS協(xié)議相較于RTMP、RTSP、MMS等直播流媒體協(xié)議,不同在于:在服務(wù)器端,HLS將直播數(shù)據(jù)流存儲(chǔ)為連續(xù)的、很短時(shí)長(zhǎng)的MPEG-TS格式媒體文件,而客戶端則不斷下載并播放這些連續(xù)的TS小文件。我們可以這樣認(rèn)為,HLS是以點(diǎn)播的技術(shù)方式來(lái)實(shí)現(xiàn)直播。由于使用HTTP協(xié)議傳輸,所以完全不用考慮防火墻及代理的問(wèn)題,加上分段文件時(shí)長(zhǎng)很短,客戶端可以快速選擇和切換碼率,以適應(yīng)不同帶寬環(huán)境條件下的播放。但由于HLS的這種技術(shù)特點(diǎn),它的延遲一般會(huì)高于普通的流媒體直播協(xié)議。
HTTP漸進(jìn)下載(如:HLS協(xié)議)和基于RTSP/RTP的實(shí)時(shí)流媒體協(xié)議,是兩種完全不同的東西,目前比較好用又方便的是用HTTP漸進(jìn)下載方法。其中,Apple公司的HLS協(xié)議是這方面的代表。它最初是蘋(píng)果公司針對(duì)iPhone、iPad等移動(dòng)設(shè)備開(kāi)發(fā)的流媒體直播協(xié)議。現(xiàn)在,HTML5直接支持HLS,安卓(Android)也原生支持HLS,而微軟從Internet Explorer 9(簡(jiǎn)稱(chēng)IE9)就開(kāi)始支持HTML5了,所以HLS是全平臺(tái)直播流。