潘 飛,王繼成
(1.沈陽農(nóng)業(yè)大學(xué)網(wǎng)絡(luò)中心,遼寧 沈陽 110866;2.沈陽農(nóng)業(yè)大學(xué)校辦公室,遼寧 沈陽 110866)
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,人們使用互聯(lián)網(wǎng)的帶寬不斷提升,流媒體技術(shù)越來越多地應(yīng)用在視頻直播和點(diǎn)播中。而在高校中,校園網(wǎng)更是匯集了最新的網(wǎng)絡(luò)技術(shù),隨著校園不斷建設(shè),高校校園網(wǎng)的速度和穩(wěn)定性越來越好,已經(jīng)成為交流,休閑娛樂,科研學(xué)習(xí)的重要媒介。在高校校園網(wǎng)內(nèi)進(jìn)行視頻直播具備了可靠的保證,校園網(wǎng)視頻直播也已經(jīng)成為學(xué)校師生員工經(jīng)常使用的服務(wù)之一。每當(dāng)學(xué)校舉辦大型活動,比如畢業(yè)典禮、新年晚會等,或者是國家重要事件比如“兩會”,或者“奧運(yùn)會”等大型體育賽事的時候,校園網(wǎng)絡(luò)直播成為了師生收看直播的重要途徑。在校園網(wǎng)中對時事新聞,重要賽事,學(xué)校大型活動,公開課程進(jìn)行直播,具有廣泛的觀看群體,具有很大的現(xiàn)實(shí)意義。
現(xiàn)在校內(nèi)的師生,使用的PC終端已經(jīng)不再局限于Microsoft Windows操作系統(tǒng),Linux、Mac OS使用率也得到了很大的提升。與此同時,手機(jī),平板電腦等智能移動終端設(shè)備在高校師生間已經(jīng)基本普及,至少已經(jīng)人手一個或者幾個。在學(xué)校范圍內(nèi),已經(jīng)基本實(shí)現(xiàn)了學(xué)校無線網(wǎng)絡(luò)的全覆蓋,為師生使用移動終端設(shè)備觀看校園網(wǎng)直播提供了完美的網(wǎng)絡(luò)保證,用智能移動終端觀看視頻直播,瀏覽學(xué)校的新聞通知已經(jīng)變成師生日常的一種重要日程。
因此,在校園網(wǎng)環(huán)境下建立一個高帶寬、穩(wěn)定的視頻直播平臺,支持多終端訪問,具有一定的研究價值。本文研究并搭建了一個基于開源系統(tǒng)CENTOS、WEB服務(wù)器軟件Nginx、多媒體視頻處理工具FFmpeg的視頻直播服務(wù)器,通過釆用HLS技術(shù)實(shí)現(xiàn)了在PC端和移動端多終端播放的功能。該直播平臺具有穩(wěn)定性好、成本低廉等特點(diǎn)。
流媒體(streaming media)是指以數(shù)據(jù)流的形式將多媒體文件在互聯(lián)網(wǎng)上進(jìn)行傳輸?shù)男滦兔襟w形式。流媒體正是因為其流式傳輸?shù)奶匦越o人們?nèi)粘I顜砹烁迂S富多彩的服務(wù),也能夠讓工作更加的方便、高效。正是由于流媒體的出現(xiàn)使得電視電話會議、視頻聊天、網(wǎng)絡(luò)電視直播等互聯(lián)網(wǎng)應(yīng)用變成了現(xiàn)實(shí)[1]。
目前,主要應(yīng)用的流媒體直播技術(shù)主要有以RTMP為代表的面向連接的流媒體傳輸技術(shù),以及現(xiàn)階段互聯(lián)網(wǎng)上大多數(shù)的視頻網(wǎng)站所使用的面向無連接的HTTP漸進(jìn)式下載方式的流媒體傳輸技術(shù)兩種[2]。
Real Time Messaging Protocol,實(shí)時消息傳輸協(xié)議(RTMP),是Adobe Systems公司為Flash播放器和服務(wù)器之間音頻、視頻和數(shù)據(jù)傳輸開發(fā)的開放協(xié)議。協(xié)議基于TCP,是一個協(xié)議族,包括RTMP基本協(xié)議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設(shè)計用來進(jìn)行實(shí)時數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議,主要用來在Flash/AIR平臺和支持RTMP協(xié)議的流媒體/交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信。基于面向連接的流媒體傳輸技術(shù)流媒體系統(tǒng)在運(yùn)行穩(wěn)定性方面,還是在可操作性等方面都有一定的優(yōu)勢,但由于面向連接的流媒體系統(tǒng)需要架設(shè)專用的流媒體服務(wù)器和安裝客戶端,不管是在實(shí)現(xiàn)方面還是在維護(hù)方面都有一定的復(fù)雜性。除此之外,這種傳輸技術(shù)會有NAT后無法訪問或者提供服務(wù)器的端口被路由器或者防火墻關(guān)閉等問題,這些網(wǎng)絡(luò)設(shè)置相關(guān)問題都會引起基于面向連接的流媒體技術(shù)的流媒體系統(tǒng)不能在手機(jī)或者平板等設(shè)備上方便的觀看和播放,給觀看者帶來不便。
漸進(jìn)式下載方式的流媒體傳輸技術(shù)不需要搭建專門的流媒體服務(wù)器,所以和專門的移動流媒體服務(wù)器相比,只需要一個分發(fā)服務(wù)器即可,其在安裝和維護(hù)方面的工作量和復(fù)雜性都簡單了很多,工作量也降低了。這種流媒體傳輸技術(shù)也存在自身的一些缺點(diǎn)。當(dāng)觀看者不能連續(xù)觀看所選內(nèi)容的時候,已經(jīng)下載的部分所占用的帶寬資源就被浪費(fèi)了,容易造成帶寬資源的浪費(fèi)。HLS是由蘋果公司提出的基于超文本傳輸協(xié)議的流媒體網(wǎng)絡(luò)傳輸協(xié)議,全稱HTTP Live Streaming,是蘋果公司Quick Time X和iPhone IOS系統(tǒng)的一部分,該協(xié)議是當(dāng)前大多互聯(lián)網(wǎng)視頻網(wǎng)站使用的重要技術(shù)。基于標(biāo)準(zhǔn)的傳輸協(xié)議的傳送方式提高了流媒體內(nèi)容在網(wǎng)絡(luò)設(shè)備中的穿透能力,可以很好地解決NAT后無法訪問或者提供服務(wù)器的端口被路由器或者防火墻關(guān)閉等問題,這種移動流媒體傳輸技術(shù)目前被越來越多的視頻提供網(wǎng)站使用。
HLS協(xié)議的基本原理就是流媒體服務(wù)器將采集推流設(shè)備推流過來的音視頻等流信息每緩存一段時間就封包成一個新的ts文件,與此同時在服務(wù)器中會生成一個m3u8索引文件來維護(hù)最新幾個ts片段的索引。當(dāng)播放端觀看直播時,通過訪問m3u8索引文件獲取最新的ts視頻文件片段來播放,這樣就能確保用戶在任意時間觀看的時候都會看到最新的片段,得到類似直播的觀看方式。和常用的RTMP、RTSP等流媒體直播協(xié)議相比,HLS協(xié)議主要的區(qū)別在于觀看的客戶端得到的是連續(xù)的、短時長的媒體文件,而不是一個完整的數(shù)據(jù)流,客戶端持續(xù)的下載并播放這些小文件。這樣的直播形式的理論上最小的延時是一個ts文件的時間長度,一般是2到3個ts文件的時間長度,HLS的分段策略,通常采用的是10秒一個分片。HLS基于短連接HTTP,HTTP是基于TCP的,這表示著HLS需要持續(xù)的與服務(wù)器建立連接,TCP每次建立連接時的三次握手、慢啟動過程、斷開連接時的四次揮手都會產(chǎn)生消耗。所以,HLS直播也有自身的缺點(diǎn),就是有一定的演示,正常情況下HLS直播的延時為30秒左右。HLS直播方式的原理圖見圖1。
圖1 HLS直播原理圖
HLS直播方式,數(shù)據(jù)通過HTTP協(xié)議傳輸,所以采用HLS時不需要考慮NAT后無法訪問或者提供服務(wù)器的端口被路由器或者防火墻關(guān)閉等問題。使用短時長的ts文件下載播放,客戶端可以平滑地切換碼率,以適應(yīng)不同帶寬條件下的播放。HLS是蘋果推出的流媒體協(xié)議,所以使用IOS的終端設(shè)備支持的很好,直接支持觀看.m3u8視頻播放;android系統(tǒng)終端設(shè)備瀏覽器只要支持HTML5的video標(biāo)簽就基本上支持.m3u8這種類型的視頻播放,不需要安裝其他額外的軟件;對于PC端,可以在服務(wù)器端搭建基于Flash技術(shù)的網(wǎng)頁播放器,即可正常播放。
本直播系統(tǒng)設(shè)計為使用HLS協(xié)議的視頻直播系統(tǒng)。系統(tǒng)設(shè)計的基本思路為,采集視頻源和音頻源的數(shù)據(jù);對采集的原始數(shù)據(jù)進(jìn)行H264編碼和AAC編碼;將視頻和音頻數(shù)據(jù)封裝為MPEG-TS包,HLS分段生成策略及m3u8索引文件;通過WEB服務(wù)器進(jìn)行HTTP傳輸協(xié)議。支持PC機(jī)和移動終端,使用客戶端系統(tǒng)自帶瀏覽器即可觀看,無需安裝其他軟件或者插件。
采用開源操作系統(tǒng)CentOS6.4,CentOS是一個基于Red Hat Linux提供的可自由使用源代碼的企業(yè)級Linux發(fā)行版本。CentOS 是Red Hat Enterprise Linux源代碼再編譯的產(chǎn)物,而且在Red Hat Enterprise Linux的基礎(chǔ)上修正了不少已知的問題,相對于其他Linux發(fā)行版,其穩(wěn)定性更好。
使用視頻和音頻編碼應(yīng)用程序?qū)Σ杉脑家曨l和音頻進(jìn)行轉(zhuǎn)換,制作所需要的ts文件,并推送至服務(wù)器端;用編譯好的FFmpeg軟件切片生成m3u8的索引文件;部署到基于Nginx搭建的WEB服務(wù)器上進(jìn)行分發(fā),用戶連接WEB服務(wù)器觀看。
直播平臺的結(jié)構(gòu)圖如圖2所示。
圖2 直播平臺結(jié)構(gòu)圖
直播信號源主要為大型活動現(xiàn)場使用攝像機(jī)輸出的視頻信號,以及IPTV轉(zhuǎn)播使用的機(jī)頂盒輸入信號,使用PC機(jī)和采集卡來對視頻信號進(jìn)行采集,將采集的原始視頻信號通過視頻和音頻編碼應(yīng)用程序,把視頻和音頻編解碼并轉(zhuǎn)換成RTMP協(xié)議資源,MPEG-2系統(tǒng)層標(biāo)準(zhǔn)的傳輸流(TS)格式。常用的編碼程序Adobe Media Encoder和OBS(Open Broadcaster Software),使用此類軟件對原始數(shù)據(jù)進(jìn)行H.264編碼和AAC編碼往外服務(wù)器端進(jìn)行推送。
媒體流切片模塊的主要工作是按需要對傳輸ts流進(jìn)行轉(zhuǎn)碼,根據(jù)設(shè)定的時間對ts流進(jìn)行分割切片,并封裝到小的文件,并生成或更新相應(yīng)的索引文件,然后將其存儲在轉(zhuǎn)發(fā)服務(wù)器供觀看者訪問。
FFmpeg是一個開源免費(fèi)跨平臺的視頻和音頻流方案,采用LGPL或GPL許可證[3]。它的功能包含在Linux、Windows下的視頻采集,各種視頻格式的轉(zhuǎn)換以及在播放的視頻中獲取靜態(tài)圖和在視頻中添加logo[4]。具有強(qiáng)大的命令集和支持多種編碼格式,支持http、rtp、rtsp等多種協(xié)議[5]。使用FFmpeg軟件完成對視頻和音頻格式文件的編碼和切片處理,切片并生成m3u8索引文件。把切片文件存放到網(wǎng)站根目錄下,用戶使用客戶端瀏覽器直接打開m3u8文件,根據(jù)這個m3u8中的實(shí)現(xiàn)的內(nèi)容訪問相應(yīng)的直播資源。
使用FFmpeg對ts流進(jìn)行切片,并生成m3u8文件的命令為:
ffmpeg -i輸入ts流地址-c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 5 output%03d.ts。
其中segment就是切片,-segment_time表示隔幾秒進(jìn)行切一個文件,上面命令是隔5s,也可以調(diào)整成更大的參數(shù)。
本直播系統(tǒng)使用的HLS協(xié)議是面向無連接的HTTP漸進(jìn)式下載方式的流媒體傳輸技術(shù),所以視頻轉(zhuǎn)發(fā)的WEB服務(wù)器部分作為視頻下發(fā)模塊的主要部分,主要負(fù)責(zé)客戶端訪問整個流媒體服務(wù)器的重要功能,使用高性能,運(yùn)行穩(wěn)定的WEB服務(wù)來轉(zhuǎn)發(fā),至關(guān)重要,本系統(tǒng)使用Nginx軟件作為WEB服務(wù)器。
Nginx是一個高性能的HTTP和反向代理服務(wù)器,也是一個IMAP/POP3/SMTP代理服務(wù)器。Nginx的程序代碼完全使用C語言編寫,可以移植到多種體系結(jié)構(gòu)和操作系統(tǒng)的服務(wù)器上,包括:Linux、FreeBSD、Solaris、Mac OS X以及Microsoft Windows。它有著占用內(nèi)存少、并發(fā)能力強(qiáng)等特點(diǎn),同時Nginx服務(wù)器有著很高的穩(wěn)定性、豐富的功能擴(kuò)展模塊,在擁有高性能以及完善功能的同時,Nginx占有并消耗極低的系統(tǒng)資源。目前在中國多家大型互聯(lián)網(wǎng)公司都在使用Nginx服務(wù)器。Nginx為我們提供了很多可擴(kuò)展模塊,我們可以通過這些模塊來實(shí)現(xiàn)更強(qiáng)大的服務(wù)器的功能。通過使用nginx-rtmp-module來增加對HLS的支持基于Nginx的RTMP流媒體服務(wù)器,本文選擇基于Nginx的流媒體直播服務(wù)器。
直播平臺搭建完成后,通過對學(xué)校畢業(yè)典禮,迎新年晚會等大型活動進(jìn)行直播,直播平臺系統(tǒng)符合設(shè)計時候的目標(biāo),服務(wù)器能穩(wěn)定的對輸入ts流切片,流媒體服務(wù)器能正常運(yùn)行;在大流量,多訪問的情況下服務(wù)器也能穩(wěn)定工作,并且內(nèi)置的服務(wù)器模塊也能夠正常工作。
本文以HLS協(xié)議為基礎(chǔ),對HLS協(xié)議以及原理,Centos系統(tǒng),F(xiàn)Fmpeg、Nginx等軟件進(jìn)行了簡單的介紹,使用FFmpeg、Nginx等軟件進(jìn)行研究,設(shè)計并搭建了一套面向無連接的HTTP漸進(jìn)式下載方式的流媒體直播服務(wù)器,該系統(tǒng)經(jīng)過實(shí)際應(yīng)用測試,支持PC機(jī)和移動設(shè)備多終端播放,直播過程中系統(tǒng)運(yùn)行穩(wěn)定,能提供大范圍的直播應(yīng)用。
[1] 鐘玉塚,向哲,沈洪,等.流媒體和視頻服務(wù)器[M].北京:清華大學(xué)出版社,2003.
[2] 李志昂.HLS流媒體服務(wù)器的設(shè)計與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2014.
[3] 劉峰.基于RED5的HLS虛擬流媒體服務(wù)器部署方法研究與應(yīng)用[D].西安:西安電子科技大學(xué),2015.
[4] Robert Kuschnig, Ingo Kofler ,Hermann Hellwanger. Evaluation of HTTP-based Request-response Streams for Internet Video Streaming[A].Proceedings of the Second Annual ACM conference[C].USA:ACM,2011:245-256.
[5] Thorsten Lohmar,Torbj.rn Einarsson,Per Fr.jdh,Frederic Gabin,Markus Kampamann.Dynamic Adaptive HTTP Streaming of Live Content[A].World of Wireless,Moblie and Multimedia Networks(WoWMoM)[C].2011.1-8.