萬 瑩,夏立洋,高 微,桂健雄,余朵梅
(1. 貴州商學院計算機與信息工程學院,貴陽 550014;2. 貴州商學院管理學院,貴陽 550014)
隨著互聯網的普及,現如今的網絡應用越來越豐富,其中流媒體的出現改變了傳統多媒體播放的方式。流媒體技術是指音頻、視頻等文件以流式的方式進行傳輸[1]。隨著流媒體技術的發展,視頻點播在各種應用中取得了突破性進展。在采用流式傳輸方式的視頻點播系統中,不需要像傳統視頻播放系統一樣要完整下載整個視頻文件才能進行播放,采用切片傳輸可以實現邊下載邊播放的功能。由于將視頻進行切片后傳輸,用戶僅用等待短暫的幾十秒緩沖延時,即可在系統上對接收的視頻流進行解碼和觀看,極大地提升了用戶的觀影體驗[2]。鑒于此,研究高效的流媒體分發技術在視頻點播領域具有很大的實用價值。在目前流行的流媒體技術發布榜單中,HLS 的使用最具有代表性。隨著5G 網絡的發展及普及,HLS 將會成為未來視頻點播技術的研究熱點。
HLS(Helix server)是一款功能強大、界面簡潔的主流視頻點播服務器,它可以為點播視頻提供跨瀏覽器、多平臺播放的服務[3]。同時其可實現流媒體視頻的分發、視頻切片、管理用戶等功能,而且與其它流媒體分發服務器相比較,進行HLS 設置也十分簡單,因此將基于HLS 開發的視頻點播系統推向市場,將會受到廣大用戶的歡迎。HLS 是一種基于HTTP 的自適應流媒體技術,它可以根據當前用戶網絡帶寬的變化,通過普通的Web 服務器端自動切換成不同編碼速率的文件,向用戶提供更舒適的觀影環境[4]。
HLS 的工作原理是對整個視頻流進行切片分段,下載后放入不同的備用源。當視頻切片正在播放時,點播系統的客戶端將根據網絡情況進行備用源選擇,以不同的速率下載相同的資源,并且允許點播窗口適應不同的數據速率。根據HLS 的工作原理,將其分為三部分:內容準備服務器、視頻內容分發器及點播客戶端[5]。其中內容準備服務器由編碼器和流分割器組成。內容準備服務器可以對用戶上傳的視頻進行編碼,并將編碼后的視頻進行切片,保存為TS 文件。為了方便找到TS 文件,切片的同時也生成了索引文件m3u8。視頻內容分發器利用HTTP協議,通過Web 服務器將m3u8 格式的索引文件及TS文件傳輸至點播客戶端,點播客戶端則將下載好的TS 文件進行組合,最后進行解碼播放[6]。HLS進行視頻流處理的基本架構如圖1所示。

圖1 HLS基本架構
FFmpeg是一個常見于處理視頻、數字音頻的命令行工具。可以通過它來對視頻流進行記錄、轉換、切片等。FFmpeg采用兩種許可證進行視頻流的處理。通過FFmpeg將輸入的視頻或音頻進行流編碼,然后進行切片。同時生成索引文件m3u8,為后期在視頻播放界面的內容分發做前期準備。FFmpeg主要由三個部分組成:第一部分包括音視頻轉碼、用于播放視頻的播放器ffplay.exe、將視頻進行轉換的轉換器ffmpeg.exe、流媒體服務器ffserver.exe 和視頻流分析器ffprobe.exe;第二部分提供了各個不同平臺編譯完成的庫,常見的如音視頻編碼器和解碼器libavcodec;第三部分是它擁有多個依賴的第三方接口。
FFmpeg 可以部署在多個平臺下進行調用,以ertong.rmvb 視頻為例介紹FFmpeg 的常用功能:轉碼和切片[7]。
(1)轉碼命令如下:

(2)切片:是通過調用FFmpeg 的命令行工具,對轉碼的TS文件進行切片。同時生成.m3u8索引文件。其命令如下:

基于HLS 的視頻點播系統針對的用戶群體是有點播視頻需求的用戶及管理員。通過對點播視頻用戶的需求進行調研及分析,本系統將用戶分為兩類,注冊系統用戶成為會員,未注冊用戶為非會員。對會員提供的功能為:用戶登錄及注冊、會員信息管理、視頻點播、視頻上傳。對非會員只能進行視頻點播。對管理員提供的功能為:視頻管理,會員信息管理,管理員信息管理。系統功能如圖2所示。

圖2 系統功能模塊
基于HLS 的視頻點播系統使用了ThinkPHP框架進行開發,結合Vue、JavaScript 技術,統一把管理員及用戶基本信息、視頻的切片TS 文件、m3u8 索引文件存放到MySQL 數據庫表中,方便管理的同時也提高了用戶的觀影體驗。
針對系統需求,本系統的數據庫設計三張表,其中一張用于存儲用戶信息(表1),一張用于存儲管理員信息(表2),一張用于存儲視頻信息(表3)。

表1 用戶表

表2 管理員表

表3 視頻信息表
隨著大數據時代的來臨,大量多媒體內容的引入,目前瀏覽器服務器的頁面容量逐漸增加。在小數據負載下,服務器的性能尚好,但如果有人上傳大量視頻,勢必會造成進程與線程的多開銷,用戶訪問系統的延遲性增加,吞吐率也會降低,嚴重時可能導致CPU 瓶頸,系統崩潰[8]。這會給一個視頻點播系統帶來毀滅性的打擊。因此,在數據庫設計時,本系統也考慮到了用戶訪問頻率增大、視頻量激增等問題出現時的解決方案。本系統在Web 服務器緩沖算法和預讀策略采用的是近期最少使用算法(LRU),該算法可以通過跟蹤并保持內核文件緩沖有足夠多的空閑空間,來減少乃至消滅內核的管理線程運行的機會,達到由應用程序控制系統緩沖的目的[9]。LRU 算法的原理是讀取大容量數據的磁盤速度較快,在其他條件相近時優先考慮替換大容量數據,通過這種替換算法可以使緩沖的命中率得到提高,同時將保留的空間存儲更多的小對象,以便播放視頻時給用戶提供更便捷的使用性。
進入視頻點播系統,即可看到如圖3所示的界面。

圖3 PC端與移動端主界面
最上面是用戶可以點播的視頻分類,用戶可以通過該分類選擇點播影片視頻、搞笑視頻、會員原創視頻等六類視頻。中間輪播圖部分展示的是視頻推薦模塊,隨便點擊一個視頻,即可進入播放界面觀看視頻。若不進行選擇,視頻播放界面將默認選擇HLS 播放源進行播放。點擊界面中的播放按鈕開始播放,如圖4所示。

圖4 PC端與移動端播放界面
打開火狐瀏覽器的Firebug,如圖5 所示,可以看到Firebug中視頻在播放時TS文件分片的詳細情況。

圖5 TS分片GET情況
本文提出了一種基于HLS 技術的視頻點播系統,該系統可以很好地實現視頻流媒體的分發、管理用戶、快速播放視頻、管理視頻分發等功能。該系統可以滿足用戶跨平臺、不同流媒體分發系統播放、跨瀏覽器的用戶。相對于其它流媒體播放器,該視頻點播系統界面更為簡潔,設置起來也比較簡單,會受到更多用戶的點播歡迎。