摘 要:討論了一種分布式視頻服務器的設計與實現" title="設計與實現">設計與實現。重點從磁盤和文件調度與節目流調度策略兩個方面討論提高數字電視視頻服務器" title="數字電視視頻服務器">數字電視視頻服務器整體性能的技術。?
關鍵詞:數字電視 視頻服務器 節目調度
????
????數字電視是從電視節目錄制、播出到發射、接收全部采用數字編碼與數字傳輸技術的新一代電視。它具有可實現雙向交互業務、抗干擾能力強、頻率資源利用率高等優點。
視頻服務器是數字電視的關鍵技術之一。視頻服務器類型可分為基于通用計算機的服務器、基于高級工作站的服務器、基于專用硬件平臺的服務器、分布式層次結構服務器等幾類。分布式視頻服務器結構對每個播出服務器的性能要求不是很高,因此,可以將大量廉價的服務器結合起來,通過合理的控制和調度達到一個高性能服務器的功能。本文討論了一種分布式視頻服務器的設計與實現。
1 分布式視頻服務器的設計
1.1 數字電視視頻服務器網絡結構
本文設計的分布式視頻服務器網絡結構如圖1所示。它可以完成從播出計劃、節目存儲、播出管理、碼流復接等一系列工作。 ?
圖1 數字電視視頻服務器網絡結構圖?
1.2 分布式視頻服務器的功能構成
節目單服務器的功能是生成電子節目單。它提供人機交互功能,可以根據播出計劃生成電子節目單,并可對已有的電子節目單進行編輯、查詢等操作。此外它還可以對每一個節目提供附加信息,如節目簡介等。當電子節目單發生變化時通知節目單代理服務器。
鏈表,例如根據節目是否重播,是否在多個視頻服務器上播放相同的節目等。節目單代理服務器根據更新的節目單生成相應的PSI/SI各種表復接到TS流中播發出去。由節目單數據庫形成播出系統的基本指令是數字電視特有的系統流程,是網絡化播出的基礎,它使流媒體" title="流媒體">流媒體高效連續的自動化播出得以實現。
播出服務器根據節目單代理服務器提供的播放列表維護節目的播放狀態,實現自動播出。播出服務器一般由多個服務器組成,由節目單代理服務器調度。節目單代理服務器和播出服務器通過底層套接字通信。節目單代理服務器向播出服務器發送消息,然后播出服務器解釋該消息以便決定要執行什么操作,如在特定的時間播出特定的節目。節目播控是數字電視節目平臺播控系統中重要的組成部分,它的正確、穩定、高效運行是節目播出,安全、優質的保證。整個節目播出過程為自動播出無須人工干預,但可以通過客戶端對播出過程進行調整。
2 視頻服務器實現的關鍵問題
視頻服務器涉及的技術很多,如流調度、磁盤I/O、磁盤存儲、VCR功能實現等。本文重點從磁盤和文件調度與節目流調度策略兩個方面討論提高數字電視視頻服務器的整體性能的技術。
2.1視頻服務器的磁盤和文件調度
數字電視視頻服務器與普通操作系統的磁盤調度不同,需采用帶有在規定時間限制內完成的實時調度算法。適合流媒體的調度算法有EDF、RM、DSr等。LMD(Least Missed Deadline)算法是對服務超時限數作為優化對象的實時調度算法。本文采用一種稱為貪婪LMD的調度算法GLMD。GLMD算法的核心為:(1)精確地計算服務每一個請求的時間,提高優化結果的可信度;(2)尋找服務超時限數最小的服務隊列為最佳隊列;(3)在滿足服務時限的請求時,利用SCAN算法服務處在其移動路線上的請求。
設原服務隊列為?鄢q,新加入的服務請求為?鄢r,best_Deadline為原最佳服務隊列超時限數,new_Deadline為插入新請求后服務隊列超時限數,best_time為原最佳服務隊列總服務時間,new_time為插入新請求后服務隊列總服務時間,具體的GLMD算法如下所示:
void sbull_request(request_queue * q,request * r)?
{ ? ??? 表1 GLMD算法實驗數據?
Windows2000? UNIX? UNIX +EDF? UNIX +GLMD? 12h? 24h? 12h? 24h? 12h? 24h? 12h? 24h? 0? 0? 0? 0? 0? 0? 0? 0? 5路節目? 0? 0? 0? 1? 0? 0? 0? 0? 6路節目? 1? 2? 1? 2? 0? 0? 0? 0? 7路節目? 2? 3? 2? 2? 0? 0? 0? 0? 8路節目? 12? 22? 15? 29? 1? 2? 0? 0? 9路節目? 50? 104? 34? 62? 5? 11? 0? 0? 10路節目? 63? 128? 39? 87? 13? 26? 2? 5?
best_Deadline=+∞;
new_time=+∞;
while(1)
{for(i=0;i
add_queue( * r,i);/ * 把請求插入隊列i的位置 * /
int new_Deadline=compute_Deadline( * q);/ * 計算當前
/ * 超限數Deadline * /
if(new_Deadline
{best_queue= * q;/ * 當小于原服務超時限數,該服務 * /
best_Deadline=new_Deadline;}/ * 隊列為最佳服務隊列 * /
if(new_Deadline==best_Deadline)
{new_time=compute_time( * q);/ * 計算當前總服務時間 * /
if(new_ time
{best_queue= * q;/ * 當小于原服務時間,該服務隊列 * /
best_Deadline=new_Deadline;}/ * 為最佳服務隊列 * /
} } } }
函數compute_Deadline( * q)主要計算當前隊列是否有請求超時限以及有多少個請求超時限。函數 compute_time( * q)主要計算磁頭尋道延時、磁盤旋轉延時、數據傳輸延時" title="傳輸延時">傳輸延時、總線傳輸延時和命令處理延時五部分。總線傳輸延時和命令處理延時大小相對穩定;數據傳輸延時由磁盤讀取帶寬和數據大小決定;磁頭尋道模型有加速、勻速、減速和定位四個階段,其中加速和減速的加速度恒定。當磁頭尋道的距離d為1~4個磁道時,僅有定位階段;當磁頭尋道的距離d(磁道數)為4
磁盤旋轉延時為旋轉等待時間,可取其數據期望值,即磁盤旋轉一周所需時間的一半。
在Windows平臺實現時,有二種途徑:(1)寫一個lower filter掛在disk.sys下,GLMD算法在lower filter中實現。(2)直接改寫DISK.SYS,其中DISK.SYS的源代碼可以由Microsoft的DDK(Windows Driver Development Kit)得到。在Unix平臺實現時,磁盤設備屬于區塊設備, GLMD算法主要改寫區塊設備request等相關函數,磁盤設備的驅動程序在drivers/ide/下,區塊設備的驅動程序的request方法定義在linux/blkdev.h中。
為了檢驗GLMD算法的效果,找到單個服務器吞吐量上限(調度條件),本文做了大量實驗,實驗數據如表1所示。 ?
<=4路節目?
播出節目為同一個節目,平均帶寬為4.2MB,每一路節目為該節目的一個備份,所得結果為12h和24h檢測到的超時限次數。服務器硬件配置為:PⅢ Xeon 800/512MB內存/SCSI硬盤/100MB自適應網卡。
2.2 節目流調度策略
MPEG碼流不是碼率恒定的。本文實現的視頻服務器采用內存緩沖平滑策略:每次磁盤訪問連續讀取相對大數據量的數據,數據首先緩存于內存中,平滑MPEG碼流的突發碼流,并減少磁盤訪問次數。在實際處理時,針對不同的視頻流" title="視頻流">視頻流碼率和當前總輸出緩沖區的情況,對每一個視頻流確定一個讀取文件的輸入緩沖區。總輸出碼率與所有數據文件的總碼率有關。
2.2.1視頻流文件讀取
實驗表明,通過讀取大的請求(64KB),一次讀取磁盤上的若干數據塊,繞過文件系統作緩存可以使處理器開銷減小一個數量級,從以前的每字節兩個機器指令減少到每字節0.2個機器指令。對于所有大于8KB的請求,無緩沖的順序讀取達到了磁盤傳輸率的極限,并且磁盤控制器的預取機制起到了流水線的并行作用,使驅動器讀操作可以達到內部傳輸率的極限。經過實驗,本文選擇了每隔0.3s進行連續文件訪問,每次I/O操作讀取數據為64KB的讀取方式。
2.2.2 輸入緩沖區
輸入緩沖區操作根據2個閾值進行,即大于A%為滿,小于B%為空。A、B這兩個閾值的選擇很重要。每次進行輸入緩沖區操作前,檢測輸入緩沖區的狀態。當緩沖區快滿時,暫停并等待下一次進行輸入緩沖區操作;同樣,每次完成輸入緩沖區操作后,檢測輸入緩沖區的狀態。當緩沖區快空時,重復輸入緩沖區操作,防止緩沖區出現下溢,處理更多的傳輸流分組。具體操作如下。
(1)輸入緩沖區操作
while(!EndOfFile){
每隔0.3s處理如下操作
if(緩沖區的狀態 do{進行緩沖區操作} until (緩沖區的狀態>B%)
}
}
(2)參數選擇
輸入緩沖區參數選擇:A=65,B=35,主要依賴于表2實驗數據。 ?
表2 輸入緩沖區參數實驗數據?
|
大于X%為滿, |
| ||||
70? |
65? |
60? |
40? |
35? |
30? | |
緩沖區上溢次數? |
2? |
0? |
0? |
0? |
0? |
0? |
緩沖區下溢次數? |
0? |
0? |
0? |
0? |
0? |
2? |
緩沖區暫停操作次數? |
5? |
5? |
6? |
6? |
5? |
5? |
|
1? |
1? |
3? |
2? |
1? |
1? |
(3)輸入緩沖區操作舉例
當三個輸入流的緩沖區占用情況分別為圖2所示的50%、71%、32%時,若此時正處于0.3s輸入緩沖區操作周期,對于流A和C進行輸入緩沖區操作,對于流B暫停并等待下一次進行輸入緩沖區操作;若此時剛完成輸入緩沖區操作,則對于流A和B暫停并等待下一次輸入緩沖區操作,對于流C重復輸入緩沖區操作,如圖2所示。 ?
?
2.2.3輸出緩沖區
MPEG傳輸流的時間信息保存在PCR中,MPEG節目流音視頻的時間信息保存在視頻、音頻流中攜帶的PTS、DTS中。所以視頻服務器需要進行計算得到輸出碼流中每一路節目的分碼率,并根據每一路節目的分碼率進行輸出緩沖區操作,把每一路節目的輸入緩沖區的數據加上時間信息(PCR)發送到輸出緩沖區。
?
?????
由于視頻服務器的輸出速率基本恒定,所以視頻服務器還需要根據傳輸速率與每一路節目的分碼率總和的差向輸出緩沖區加入空的數據包。這樣輸出緩沖區就可以按照恒定的傳輸速率發送數據。
本文提出的數字電視視頻服務器設計方案已成功應用于遼寧鞍山數字電視系統中,收到了良好的經濟和社會效益。該設計也可以推廣應用到分布式視頻服務器、視頻點播服務器(VOD)、準視頻點播服務器(NVOD)中。這樣對每個視頻服務器的性能要求不是很高,可以將大量廉價的服務器結合起來,通過合理的控制和調度,完成一個高性能數字電視視頻服務器集群的功能。
參考文獻
1 彭廣習,余勝生,周敬利.基于磁盤性能模型的優化調度算法.計算機工程,2002;28(5)
2 Edward C,Molina H G.Effective memory use in a media server.
??In:Proceeding of the 23rd VLDB Conference,Athens,1997
3 鐘玉琢.流媒體和視頻服務器.北京:清華大學出版社,2003
4 楊學良,張占軍.分布式多媒體計算機系統教程.北京:電子工業出版社,2002