李 娟,王冬星,張 華,孫 濤,許有軍
(大慶師范學院 計算機科學與信息技術學院,黑龍江 大慶163712)
基于嵌入式技術,綜合計算機網絡通信技術和QT 編程開發技術,開發了基于嵌入式Linux 的交互式視頻點播(Video on Demand,即VOD)系統,該系統作為便攜式、可移動終端設備,控制各種音視頻媒體的傳輸、緩存、存儲、播放、自動搜索與切換等功能,為用戶提供實時、交互、按需點播服務。隨著嵌入式軟件、微處理器和無線網絡的發展,嵌入式VOD 系統在遠程教育等領域將得到更加廣泛的應用。
點對點(Peer-to-Peer,P2P)結構是流媒體系統目前所采用的主流設計結構[1],考慮無線網絡帶寬的局限性和存儲空間小、客戶端資源有限等因素,本文設計的VOD 系統采取經典C/S 模式架構。對S3C2410 ARM 硬件平臺和嵌入式ARM-Linux2.4 系統進行了研究、裁剪及優化整合,以滿足嵌入式環境對交互性、易用性、穩定性等要求。
本文搭建的嵌入式Linux 視頻點播系統總體架構如圖1所示。

圖1 總體架構
本系統由FTP 服務器、目錄服務器、VOD 客戶端和Mplayer 四部分構成,其組成分別介紹如下:
(1)FTP 服務器:主要提供接受與處理客戶端請求、視頻文件的加載等片源服務,同時進行系統資源管理和用戶管理等。本文選擇SERVERU 服務器軟件,它不僅提供文件下載,還為用戶的系統安全提供全面保護,如為FTP 設置密碼、設置各種用戶級的訪問許可等等。
(2)目錄服務器:與FTP 服務器同在一臺機器上,由本服務器提供影片的主要信息,包括影片名稱,演員列表,影片內容介紹,片長大小等,并實現片名和影片實際地址的映射。
(3)VOD 客戶端:選擇嵌入式設備作為客戶端,實現人機交互功能。用戶運行客戶端程序時,向服務器提交請求并處理從服務器返回的響應信息。采用QTE 圖形界面設計,以列表方式顯示影片全部信息,并取得各影片的實際存儲地址,最后調用Mplayer 播放器播放影片。
(4)播放器(Mplayer):被VOD 客戶端調用,以便播放影片。
目前對流媒體服務器的研究已經很多,因此本文主要工作在于客戶端軟件設計及存儲管理功能實現。
嵌入式VOD 客戶端是整個系統的核心部分。每個客戶端都承擔著獲取資源、下載資源和視頻播放的任務。系統由ARM-Linux2.4 內核構成,主要負責進程調度、內存管理、虛擬文件系統、網絡接口、進程間通信、各種中斷響應、事件響應、系統資源分配等。
為了實現高效的點播資源交換,嵌入式VOD 客戶端軟件需要四大功能的支持,一是設計客戶端用戶界面;二是完成網絡的訪問功能,完成與FTP 視頻服務器的連接;三是與視頻服務器連接完成后,實現視頻播放功能;四是數據存儲,不同于直播系統[2]的是,如果沒有存儲功能,點播系統的共享性和整體性在很大程度上會降低,因為資源交互是在觀看同一個資源的同一播放點的節點時進行的。因此采用模塊化設計將系統劃分為客戶端用戶界面模塊、視頻資源訪問模塊、視頻播放模塊與數據存儲模塊四個大模塊。VOD 客戶端模塊劃分如圖2所示。下文將對各個模塊的設計進行具體描述。

圖2 VOD 客戶端模塊
本模塊的程序主要負責實現與用戶的交互,由用戶登錄,影片列表和影片播放三個界面組成。本文是在Linux 平臺上開發,使用QT 制作一個視頻點播界面,Qt/Embedded(簡稱QTE)是一個專門為嵌入式系統設計的圖形用戶界面工具包,它支持Linux 平臺。此界面包含四部分:按鈕、文本框、標題欄、列表框。按鈕分為兩個,一個用來網絡IP 的連接,當點擊此按鈕就會與FTP 服務器連接上獲得FTP 目錄服務列表;另一個按鈕用于退出視頻點播界面。Text Label 用于接收用戶所輸入的FTP 服務器的IP;標題欄說明此界面為視頻點播界面;而List Box 用于顯示連接FTP 服務器后,目錄服務器內容和點擊的影片也將在此用Mplayer 播放視頻。
網絡視頻資源訪問模塊首先需要在嵌入式設備中進行開發模式的選擇,FTP 是C/S 模式,HTTP 可以是B/S 模式。在實際應用中,FTP 服務器,一般需要客戶端用QTE 編輯瀏覽器,這樣可以將其延伸為B/S架構,易形成友好的點播界面,同時提供更豐富的網絡功能,如資源搜索等。本文采用的是FTP 服務器。
在S3C2410 硬件平臺上對網卡支持的前提下,有多種開源的媒體播放軟件可以選擇。基于技術上的成熟度,Mplayer 播放器具有便于嵌入式平臺移植以及支持多種流行的音視頻編解碼方式等優勢,經過多次試驗,筆者在嵌入式平臺上用Mplayer 實現了視頻的點播,同時采用QT 來編寫播放的點播界面。
本模塊功能是管理一段內存緩沖區,提供與基本文件操作類似的讀取、寫入和刪除操作的接口。設計此模塊目的是在媒體播放過程中,需要一個被全局共享的內存緩沖區,由視頻資源訪問模塊實時接收數據,并將其臨時的存儲在這段內存緩沖區,同時讀取視頻數據塊并實時播放,為此設計了讀取和寫入接口。提供刪除操作接口是為了節省有限內存存儲資源,以便將播放過的視頻數據實時的刪除。
進行異步讀寫是數據存儲模塊在讀寫磁盤過程中的具體實現途徑。一般視頻資源的磁盤文件較大,讀寫過程耗費系統時間,執行同步讀寫操作會阻塞讀寫文件的函數進程,而且讀寫函數直到文件讀寫結束后才返回到調用處,嚴重影響了程序執行效率。而進行異步讀寫操作時,即使磁盤讀寫操作沒有結束,讀寫操作轉入后臺進行。在后臺執行結束后,回調函數通知應用程序讀寫結束,異步讀寫以應答方式與系統通信,可以顯著地提高整個系統的效率。
VOD 在視頻數據傳輸過程中存在大碼率、傳輸時間長等特點,使得VOD 對服務器的帶寬以及響應延遲的要求都很高。應用數據緩存技術,可以減少磁盤讀寫次數,降低數據請求響應延遲,提高服務器并發處理能力。本文通過對數據分塊、順序預取、緩存替換等策略來提高緩存數據塊的命中率[3]。
視頻緩存以傳統網絡緩存為基礎,傳統網絡緩存算法[4]有基于最近最少使用的緩存算法、基于訪問頻率的緩存算法、訪問頻率與最近最少使用的緩存算法等,在PC 機的VOD 系統上得到廣泛應用。目前,切分算法是一種較為新穎的處理視頻文件過大的方式。基于切片的視頻點播算法主要思想是針對視頻數據傳輸量大的特性,選擇不同的切分規則,將視頻數據切分成不同片段,應用不同機制來對文件進行緩存的方法,使緩存空間有效利用。
本文對有嵌入式設備需求的用戶點播特點和點播的流程進行分析,改進了基于切片的視頻點播算法,提出了一種基于數據塊讀寫隊列的數據緩存算法,這種緩存機制的主要思想類似于CPU 指令隊列的緩存策略[5]。該算法將服務器傳輸的流媒體影片文件信息流均勻固定切塊(Fixed segment ),將視頻數據流均勻分成n 個數據塊,當有用戶t 時間段訪問視頻時,將首個數據塊先傳遞給用戶,若用戶選擇播放,則從服務器將視頻流分塊傳遞給客戶端,采用隊列機制,在此排隊等候,當用戶客戶端沒有足夠的緩存空間緩存當前視頻流數據塊時,采用內存-緩存和磁盤-緩存相結合,借助SDRAM、LCD 緩存和輔存SD 卡等存儲介質,在客戶端預留至少1G 的空閑存儲區,對資源信息進行二級緩存,以降低服務器負載,減少傳輸延遲。并且采用異步讀寫方式,以提高系統的效率。這種方式適用于嵌入式設備,其移動便攜、操作簡便,但其硬件資源有限,難以獲得更為精確的用戶點播規律,該算法只有通過降低算法復雜度實現。
3.1.1 數據塊寫入隊列算法流程
對數據塊的寫入操作包括兩部分,一是將請求到達的點播資源分塊寫入緩沖區或者存儲到本地磁盤,二是對相鄰數據塊的請求進行回應,視頻數據分數據塊寫入隊列的操作流圖如圖3所示。

圖3 數據塊寫入隊列操作流圖
3.1.2 數據塊讀出隊列算法流程
數據存儲模塊中,當有本地資源被提出請求的時候,數據塊的讀出隊列操作流圖如圖4所示。
通過集成的LCD 控制器,ARM 處理器可以利用SDRAM 控制器,使顯示緩沖和系統共享RAM,從而能夠直接讀/寫顯示緩沖。這樣做能有效地節省顯示緩存并且不用添加額外的顯示緩存控制器,節約成本,但是會占用一部分系統總線帶寬。每當開啟LCD 控制器的掃描,系統總線就要分出一部分帶寬來滿足對LCD 的不間斷掃描。這種方法對系統總線的占用情況與LCD 的大小和類型有關。
實際操作中,用戶只需要將要顯示的數據塊,按特定的格式寫入顯示緩存,屏幕就會顯示相應圖像。在軟件設計中,只要準確得到這個顯示緩存的地址,對它進行相應的操作即可。Linux 的幀緩沖(Framebuffer)設備驅動程序是專為顯示設備提供的。筆者在本系統中,通過修改調試這個程序驗證數據塊讀寫隊列的緩存算法的有效性,經過反復多次測試,達到了理論的預期效果。

圖4 數據塊讀出操作流圖
系統啟動后,在開發板上的LCD 顯示屏上可見VOD 客戶端界面,如圖5所示。輸入FTP 地址后,點擊鏈接按鈕,可鏈接到FTP 服務器上;當屏幕上出現視頻資源,選擇觀看的視頻,點擊播放按鈕,在LCD 屏上即可播放視頻,如圖6所示。

圖5 VOD 客戶端視頻播放前

圖6 VOD 客戶端視頻播放后
實驗結果表明,以數據塊為粒度研究的數據緩存機制,有效地避免了點播過程中造成的點播延遲。依據用戶的點播行為進行分塊緩存,對提高點播系統的交互性能是十分必要的,對VOD 系統技術具有很重要的實際意義。在今后的工作中,為提高VOD 系統的整體性能,還需要對影片在磁盤上的分布策略和優化調度算法做進一步的研究。
[1]李裕.基于手持設備移動流媒體播放器的設計與實現[D].南京:南京郵電大學碩士學位論文,2011:28-33.
[2]聞婷婷.P2P 點播系統存儲管理研究與實現[D].武漢:華中科技大學碩士學位論文,2011:13-23.
[3]蘇杭,王勁林.VoD 系統的數據緩存策略研究[J].微計算機應用,2009;30(11):34-37.
[4]周程.視頻點播系統緩存算法研究[D].杭州:浙江大學碩士學位論文,2011:7-13.
[5]胡玉琦.視頻點播系統中代理緩存及流調度技術研究[D].沈陽:東北大學博士學位論文,2005:24-30.