萬 瑩,夏立洋,高 微,桂健雄,余朵梅
(1. 貴州商學(xué)院計(jì)算機(jī)與信息工程學(xué)院,貴陽 550014;2. 貴州商學(xué)院管理學(xué)院,貴陽 550014)
隨著互聯(lián)網(wǎng)的普及,現(xiàn)如今的網(wǎng)絡(luò)應(yīng)用越來越豐富,其中流媒體的出現(xiàn)改變了傳統(tǒng)多媒體播放的方式。流媒體技術(shù)是指音頻、視頻等文件以流式的方式進(jìn)行傳輸[1]。隨著流媒體技術(shù)的發(fā)展,視頻點(diǎn)播在各種應(yīng)用中取得了突破性進(jìn)展。在采用流式傳輸方式的視頻點(diǎn)播系統(tǒng)中,不需要像傳統(tǒng)視頻播放系統(tǒng)一樣要完整下載整個(gè)視頻文件才能進(jìn)行播放,采用切片傳輸可以實(shí)現(xiàn)邊下載邊播放的功能。由于將視頻進(jìn)行切片后傳輸,用戶僅用等待短暫的幾十秒緩沖延時(shí),即可在系統(tǒng)上對(duì)接收的視頻流進(jìn)行解碼和觀看,極大地提升了用戶的觀影體驗(yàn)[2]。鑒于此,研究高效的流媒體分發(fā)技術(shù)在視頻點(diǎn)播領(lǐng)域具有很大的實(shí)用價(jià)值。在目前流行的流媒體技術(shù)發(fā)布榜單中,HLS 的使用最具有代表性。隨著5G 網(wǎng)絡(luò)的發(fā)展及普及,HLS 將會(huì)成為未來視頻點(diǎn)播技術(shù)的研究熱點(diǎn)。
HLS(Helix server)是一款功能強(qiáng)大、界面簡(jiǎn)潔的主流視頻點(diǎn)播服務(wù)器,它可以為點(diǎn)播視頻提供跨瀏覽器、多平臺(tái)播放的服務(wù)[3]。同時(shí)其可實(shí)現(xiàn)流媒體視頻的分發(fā)、視頻切片、管理用戶等功能,而且與其它流媒體分發(fā)服務(wù)器相比較,進(jìn)行HLS 設(shè)置也十分簡(jiǎn)單,因此將基于HLS 開發(fā)的視頻點(diǎn)播系統(tǒng)推向市場(chǎng),將會(huì)受到廣大用戶的歡迎。HLS 是一種基于HTTP 的自適應(yīng)流媒體技術(shù),它可以根據(jù)當(dāng)前用戶網(wǎng)絡(luò)帶寬的變化,通過普通的Web 服務(wù)器端自動(dòng)切換成不同編碼速率的文件,向用戶提供更舒適的觀影環(huán)境[4]。
HLS 的工作原理是對(duì)整個(gè)視頻流進(jìn)行切片分段,下載后放入不同的備用源。當(dāng)視頻切片正在播放時(shí),點(diǎn)播系統(tǒng)的客戶端將根據(jù)網(wǎng)絡(luò)情況進(jìn)行備用源選擇,以不同的速率下載相同的資源,并且允許點(diǎn)播窗口適應(yīng)不同的數(shù)據(jù)速率。根據(jù)HLS 的工作原理,將其分為三部分:內(nèi)容準(zhǔn)備服務(wù)器、視頻內(nèi)容分發(fā)器及點(diǎn)播客戶端[5]。其中內(nèi)容準(zhǔn)備服務(wù)器由編碼器和流分割器組成。內(nèi)容準(zhǔn)備服務(wù)器可以對(duì)用戶上傳的視頻進(jìn)行編碼,并將編碼后的視頻進(jìn)行切片,保存為TS 文件。為了方便找到TS 文件,切片的同時(shí)也生成了索引文件m3u8。視頻內(nèi)容分發(fā)器利用HTTP協(xié)議,通過Web 服務(wù)器將m3u8 格式的索引文件及TS文件傳輸至點(diǎn)播客戶端,點(diǎn)播客戶端則將下載好的TS 文件進(jìn)行組合,最后進(jìn)行解碼播放[6]。HLS進(jìn)行視頻流處理的基本架構(gòu)如圖1所示。
圖1 HLS基本架構(gòu)
FFmpeg是一個(gè)常見于處理視頻、數(shù)字音頻的命令行工具??梢酝ㄟ^它來對(duì)視頻流進(jìn)行記錄、轉(zhuǎn)換、切片等。FFmpeg采用兩種許可證進(jìn)行視頻流的處理。通過FFmpeg將輸入的視頻或音頻進(jìn)行流編碼,然后進(jìn)行切片。同時(shí)生成索引文件m3u8,為后期在視頻播放界面的內(nèi)容分發(fā)做前期準(zhǔn)備。FFmpeg主要由三個(gè)部分組成:第一部分包括音視頻轉(zhuǎn)碼、用于播放視頻的播放器ffplay.exe、將視頻進(jìn)行轉(zhuǎn)換的轉(zhuǎn)換器ffmpeg.exe、流媒體服務(wù)器ffserver.exe 和視頻流分析器ffprobe.exe;第二部分提供了各個(gè)不同平臺(tái)編譯完成的庫,常見的如音視頻編碼器和解碼器libavcodec;第三部分是它擁有多個(gè)依賴的第三方接口。
FFmpeg 可以部署在多個(gè)平臺(tái)下進(jìn)行調(diào)用,以ertong.rmvb 視頻為例介紹FFmpeg 的常用功能:轉(zhuǎn)碼和切片[7]。
(1)轉(zhuǎn)碼命令如下:
(2)切片:是通過調(diào)用FFmpeg 的命令行工具,對(duì)轉(zhuǎn)碼的TS文件進(jìn)行切片。同時(shí)生成.m3u8索引文件。其命令如下:
基于HLS 的視頻點(diǎn)播系統(tǒng)針對(duì)的用戶群體是有點(diǎn)播視頻需求的用戶及管理員。通過對(duì)點(diǎn)播視頻用戶的需求進(jìn)行調(diào)研及分析,本系統(tǒng)將用戶分為兩類,注冊(cè)系統(tǒng)用戶成為會(huì)員,未注冊(cè)用戶為非會(huì)員。對(duì)會(huì)員提供的功能為:用戶登錄及注冊(cè)、會(huì)員信息管理、視頻點(diǎn)播、視頻上傳。對(duì)非會(huì)員只能進(jìn)行視頻點(diǎn)播。對(duì)管理員提供的功能為:視頻管理,會(huì)員信息管理,管理員信息管理。系統(tǒng)功能如圖2所示。
圖2 系統(tǒng)功能模塊
基于HLS 的視頻點(diǎn)播系統(tǒng)使用了ThinkPHP框架進(jìn)行開發(fā),結(jié)合Vue、JavaScript 技術(shù),統(tǒng)一把管理員及用戶基本信息、視頻的切片TS 文件、m3u8 索引文件存放到MySQL 數(shù)據(jù)庫表中,方便管理的同時(shí)也提高了用戶的觀影體驗(yàn)。
針對(duì)系統(tǒng)需求,本系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)三張表,其中一張用于存儲(chǔ)用戶信息(表1),一張用于存儲(chǔ)管理員信息(表2),一張用于存儲(chǔ)視頻信息(表3)。
表1 用戶表
表2 管理員表
表3 視頻信息表
隨著大數(shù)據(jù)時(shí)代的來臨,大量多媒體內(nèi)容的引入,目前瀏覽器服務(wù)器的頁面容量逐漸增加。在小數(shù)據(jù)負(fù)載下,服務(wù)器的性能尚好,但如果有人上傳大量視頻,勢(shì)必會(huì)造成進(jìn)程與線程的多開銷,用戶訪問系統(tǒng)的延遲性增加,吞吐率也會(huì)降低,嚴(yán)重時(shí)可能導(dǎo)致CPU 瓶頸,系統(tǒng)崩潰[8]。這會(huì)給一個(gè)視頻點(diǎn)播系統(tǒng)帶來毀滅性的打擊。因此,在數(shù)據(jù)庫設(shè)計(jì)時(shí),本系統(tǒng)也考慮到了用戶訪問頻率增大、視頻量激增等問題出現(xiàn)時(shí)的解決方案。本系統(tǒng)在Web 服務(wù)器緩沖算法和預(yù)讀策略采用的是近期最少使用算法(LRU),該算法可以通過跟蹤并保持內(nèi)核文件緩沖有足夠多的空閑空間,來減少乃至消滅內(nèi)核的管理線程運(yùn)行的機(jī)會(huì),達(dá)到由應(yīng)用程序控制系統(tǒng)緩沖的目的[9]。LRU 算法的原理是讀取大容量數(shù)據(jù)的磁盤速度較快,在其他條件相近時(shí)優(yōu)先考慮替換大容量數(shù)據(jù),通過這種替換算法可以使緩沖的命中率得到提高,同時(shí)將保留的空間存儲(chǔ)更多的小對(duì)象,以便播放視頻時(shí)給用戶提供更便捷的使用性。
進(jìn)入視頻點(diǎn)播系統(tǒng),即可看到如圖3所示的界面。
圖3 PC端與移動(dòng)端主界面
最上面是用戶可以點(diǎn)播的視頻分類,用戶可以通過該分類選擇點(diǎn)播影片視頻、搞笑視頻、會(huì)員原創(chuàng)視頻等六類視頻。中間輪播圖部分展示的是視頻推薦模塊,隨便點(diǎn)擊一個(gè)視頻,即可進(jìn)入播放界面觀看視頻。若不進(jìn)行選擇,視頻播放界面將默認(rèn)選擇HLS 播放源進(jìn)行播放。點(diǎn)擊界面中的播放按鈕開始播放,如圖4所示。
圖4 PC端與移動(dòng)端播放界面
打開火狐瀏覽器的Firebug,如圖5 所示,可以看到Firebug中視頻在播放時(shí)TS文件分片的詳細(xì)情況。
圖5 TS分片GET情況
本文提出了一種基于HLS 技術(shù)的視頻點(diǎn)播系統(tǒng),該系統(tǒng)可以很好地實(shí)現(xiàn)視頻流媒體的分發(fā)、管理用戶、快速播放視頻、管理視頻分發(fā)等功能。該系統(tǒng)可以滿足用戶跨平臺(tái)、不同流媒體分發(fā)系統(tǒng)播放、跨瀏覽器的用戶。相對(duì)于其它流媒體播放器,該視頻點(diǎn)播系統(tǒng)界面更為簡(jiǎn)潔,設(shè)置起來也比較簡(jiǎn)單,會(huì)受到更多用戶的點(diǎn)播歡迎。