基于網(wǎng)絡的多通道超寬視頻系統(tǒng)的研究
近年來隨著數(shù)字壓縮技術、計算機及網(wǎng)絡技術不斷成熟和發(fā)展,人們對視頻和網(wǎng)絡有了更多的需求?,F(xiàn)在的數(shù)字視頻顯示畫面一般太小,無法適合眾多觀眾的觀看,而多通道超寬視頻系統(tǒng)就是一種從實時切割輸出、網(wǎng)絡同步播放顯示的基于網(wǎng)絡的不同PC間同步播放多媒體文件的技術體系,是使用一組單通道的顯示系統(tǒng)橫向拼接起來的多通道超寬比例的特殊顯示系統(tǒng)。它的拼接數(shù)目可以自由選擇。本系統(tǒng)的多通道播放控制軟件平臺是在XP操作系統(tǒng)下VC++.net的編譯環(huán)境中調試通過的。下面闡述其實現(xiàn)過程和方法。
系統(tǒng)方案
本系統(tǒng)的控制方式采用了如圖1所示的星型總線拓撲結構,它不僅可以方便地進行多臺PC的集中控制,而且還可方便地進行數(shù)據(jù)的傳輸及通過局域網(wǎng)連接進行控制,更好地實現(xiàn)了用戶的一些特殊要求,例如結合Windows的其他軟件實現(xiàn)對多臺客戶計算機的遠程控制。
圖1 網(wǎng)絡集成管理方案示意圖
多媒體系統(tǒng)中的同步
多媒體系統(tǒng)的同步是指兩個或多個多媒體事件按一定的時間順序關系播放,同時也是一種用于協(xié)調多個媒體事件在時間域中播放的機制或過程。同步操作可以協(xié)調和控制兩個或多個媒體事件在并行播放過程中由用戶指定的或由其內在本質所決定的進展和聯(lián)系。按時間關系,同步可分為3類:媒體對象之間的同步,媒體流之間的同步,媒體流內的同步。這3類同步構成多媒體同步的3個層次,最高層是多媒體對象之間同步,最低層是媒體流內的同步。其中媒體流內的同步在一個時間相關媒體流內(主要是等時媒體流內)進行,因此,與時間無關的媒體,如文字、圖像等不存在這種同步問題。媒體對象之間同步要解決的是多媒體合成時的高層同步問題。圖2給出了一個多媒體系統(tǒng)中各個媒體對象之間的時序關系。
圖2 媒體對象之間的時序關系
媒體流之間同步的主要任務是保證不同媒體流之間的時間關系,例如視頻和音頻之間的時態(tài)關系、音頻和文本之間的時態(tài)關系等。流間同步的復雜性與需要同步的媒體數(shù)目有關。媒體流內同步主要針對等時媒體(音頻和視頻)而言。本系統(tǒng)中的同步最重要的是對象間同步。
因為多媒體系統(tǒng)引入了許多時間相關性數(shù)據(jù)類型,而這些多媒體數(shù)據(jù)的時間相關性可能隱含在建立過程中(如活動視頻圖像序列),也可能是由用戶定義的。時間相關性必須體現(xiàn)在多媒體系統(tǒng)中。另外在數(shù)據(jù)演示過程中。由于存儲、通信和計
基于全局時間軸的同步是通過把相互獨立的對象依附到一個時間軸上來描述,丟掉或更改一個對象不影響其他對象的同步。這種描述要維持一個全局時間 (world time)軸。每個對象可將此全局時間映射到局部時間,并沿此局部時間前進。當全局時間和局部時間誤差超出一個給定范圍時,則要求與全局時間重新進行同步。時間軸同步能較好地表達源于媒體對象內部結構的抽象定義。在這方面,它優(yōu)于分層同步法,它定義了一個與視頻流中某圖像相關的說明文字的演示的起始位置,而不再要求有相關視頻幀的知識。由于同步僅能基于固定的時間點定義,若媒體對象無確定的演示時間,這種方法就能力有限了。
在本系統(tǒng)中,由于我們采用時間軸同步法,所以需要在不同PC間通過網(wǎng)絡傳送播放時間的數(shù)據(jù)。我們采用了基于C/S(客戶機/服務器)模式,其功能模塊圖如圖3所示。
圖3 系統(tǒng)功能模塊框圖
服務端功能模塊主要有視頻處理模塊、服務器網(wǎng)絡功能模塊、用戶管理模塊等控制模塊,它們都通過服務器應用程序被統(tǒng)一管理調用??蛻舳斯δ苣K主要有客戶機網(wǎng)絡功能模塊、視頻處理顯示模塊、用戶管理模塊等,它們都通過客戶機應用程序被統(tǒng)一管理調用。服務器和客戶機之間通過網(wǎng)絡進行相互通信控制和數(shù)據(jù)傳輸。
網(wǎng)絡功能模塊分為服務器網(wǎng)絡功能模塊和客戶機網(wǎng)絡功能模塊。服務器網(wǎng)絡功能模塊主要負責監(jiān)控前端視頻播放時間數(shù)據(jù)的網(wǎng)上發(fā)送、對客戶機請求的偵聽及響應和對客戶機控制信息的接收及處理等;客戶機網(wǎng)絡功能模塊主要負責對服務器傳來的視頻播放時間數(shù)據(jù)的接收、對服務器請求連接和控制信息的發(fā)送等。這些都由軟件實現(xiàn),本軟件使用VC++.Net,采用Windows套節(jié)字(WinSock),利用TCP/IP協(xié)議實現(xiàn)網(wǎng)絡編程。在編程中,還利用了套節(jié)字的異步I/O模型及Windows多線程機制進行循環(huán)內存隊列管理等方法。通過這些手段,較好地解決了實時視頻播放時間數(shù)據(jù)傳輸中的各種問題。
實時視頻處理
無論在服務器還是客戶機應用程序中都有視頻處理模塊,其主要的功能是使多媒體系統(tǒng)能實時進行視頻圖像切割并顯示出來。其實現(xiàn)方法如下:
在Windows系統(tǒng)中我們將使用微軟提供的一些方法和類來實現(xiàn)實時視頻圖像切割播放的算法。首先將使用設備環(huán)境作為幀讀取的緩沖區(qū)。設備環(huán)境是一個由圖形設備接口管理的包含有設備信息的數(shù)據(jù)結構,所有對繪圖函數(shù)的調用都要通過使用設備環(huán)境對象來完成。它封裝了Windows的繪畫函數(shù),并允許在視窗中以設備的獨立性來繪制圖形。支持設備獨立性的軟件包括兩個動態(tài)鏈接庫:圖形設備接口Gdi.dll和設備驅動程序。系統(tǒng)要將圖像輸出到對話框,就要得到對話框的設備環(huán)境,方法大體有兩種:①在對話框類的函數(shù)中,用函數(shù)GetDC()得到一個對話框設備的指針;②以對話框的指針為參數(shù)生成一個設備環(huán)境對象,如CDChdc(this)。微軟還提供了一些播放視頻的函數(shù)(如DrawDibDraw函數(shù)),實現(xiàn)了將文件中讀出的視頻圖像數(shù)據(jù)輸出到顯示緩沖區(qū)的某個區(qū)域,利用此函數(shù)可以將每幀圖像切割,顯示我們所要顯示的畫面(原來視頻畫面的一部分);而顯示的圖像數(shù)據(jù)可以以CBitmap的形式從顯示器的設備環(huán)境中獲得,其中CBitmap是微軟提供的一個位圖類,它封裝了視窗的圖形設備接口,并且提供了操縱位圖的成員函數(shù)。
系統(tǒng)是在CPU為P4117GHz、VideoCard為NVIDIAQua
其具體程序如下:
CDC hdc;
LONG 1 Frame;
BYTE abFormat[1024];
LPBITMAPINFOHEADER 1pbi;
1pbi=(LPBITMAPINFOHEADER)abFormat;
1Frame=AVIStream Time To Sample(m_Pstream,1Time);
//從當前媒體流中得到當前時間為1Time的樣本
1pbi=(LPBITMAPINFOHEADER)AVIStreamGetFrame
(m_PAviStream,1Frame);
//得到當前幀的地址
If (1pbi)
{
xwidth=lpbi->biWidth/total;
//得到客戶機上顯示的視頻畫面的寬度
ywidth=1pbi->biHeight;
xSrc=x_n*xwidth;
//得到源顯示畫面開始顯示點的x坐標
//利用DrawDibDraw函數(shù)將視頻切割顯示
DrawDibDraw(m_hDrawDib,hdc,
rcFrame left,rcFrame.top,
rcFrame right-rcFrame.left,
rcFrame bottom-rcFrame.top,
1pbi,NULL,xSrc,0,xwidth,ywidth,
DDF_SAME_DRAW);
結束語
本系統(tǒng)采用多媒體同步技術,實現(xiàn)了基于網(wǎng)絡通信的不同PC間進行同步通信播放影像文件和實時視頻圖像切割處理的功能,是一種性價比較高的解決方案。該系統(tǒng)對于網(wǎng)絡視頻、視頻切割的研究提供了有意義的經驗和借鑒。
評論