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