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