主頁(http://www.130131.com):基于AVI的網(wǎng)絡(luò)視頻監(jiān)控存儲系統(tǒng)實現(xiàn)方法(2) 原始數(shù)據(jù)為壓縮數(shù)據(jù),可以直接調(diào)用XVID的API函數(shù)對其進行解碼得到圖像數(shù)據(jù)。 3.3.2.獲得RGB格式的數(shù)據(jù) 使用AVI的API函數(shù)可以直接自動調(diào)用XVID解碼器,獲得RGB格式的數(shù)據(jù)。 1)獲取格式化信息 先獲取格式的大小,可由此判斷數(shù)據(jù)流是視頻流還是音頻流。 AVIStreamReadFormat(pVideoStream,AVIStreamStart(pVideoStream),NULL,&lSize); 獲取格式化信息內(nèi)容,如果是視頻流則轉(zhuǎn)化為BITMAPINFO格式,即可獲取格式化的具體信息,如圖像的大小,壓縮方式,顏色深度,緩沖區(qū)大小等。 AVIStreamReadFormat(pVideoStream,AVIStreamStart(pVideoStream),pChunk,&lSize); LPBITMAPINFOpInfo=(LPBITMAPINFO)pChunk; 2)設(shè)置結(jié)果的信息頭 這里我們想得到RGB格式的數(shù)據(jù)流,原始數(shù)據(jù)格式為XVID格式,這里我們只需要改變原始格式的壓縮方式和緩沖區(qū)大小就可以了。緩沖區(qū)的大小計算公式如下,它的大小和相同大小的BMP圖像數(shù)據(jù)大小是相等的。 LPBITMAPINFOHEADERpBmpih=GetStreamFormat(); pBmpih->biCompression=BI_RGB; pBmpih->biSizeImage=((pBmpih->biWidth*pBmpih->biBitCount+31)/32*4)*pBmpih->biHeight; 3)獲取RGB格式化數(shù)據(jù)流,如果pBmpih為空,將到原始數(shù)據(jù) PGETFRAMEpVideoFrame=AVIStreamGetFrameOpen(pVideoStream,pBmpih); 4)獲取RGB數(shù)據(jù),獲得的RGB數(shù)據(jù)包括40字節(jié)的圖像格式信息 LPBYTEpImage=(LPBYTE)AVIStreamGetFrame(pVideoFrame,lFrames); pImage=pImage+sizeof(BITMAPINFOHEADER); 3.4.AVI視頻播放 如果操作系統(tǒng)沒有安裝XVID編解碼器,播放器無法識別XVID格式的AVI文件。解決的方發(fā)是使用如上文的安裝方法,或者使用dshow生成的xvid.ax注冊文件。 注冊方法是在命令行輸入: “/system/regsvr32/xvid.ax” 例如:“C:/windows/system/regsvr32C:/ProgramFiles/xvid.ax”,然后復(fù)制xvidcore.dll到“/system32”,如:“C:/windows/system32”。測試是否安裝成功的方法是播放一段XVID片斷,看播放器是否正常工作。 本文使用三種方法對播放XVID視頻進行測試,都工作正常。一是利用xvidcore.dll、xvidvfw.dll和xvid.inf,然后安裝xvid.inf,使用WindowsMediaPlayer播放;二是xvidcore.dll和xvid.ax,注冊xvid.ax,使用WindowsMediaPlayer播放;三是安裝暴風(fēng)影音,使用暴風(fēng)影音的XVID編解碼器,用暴風(fēng)影音播放。 4.結(jié)論 利用AVI文件存儲XVID格式視頻流完全可行,由于大部分播放器支持A (中國集群通信網(wǎng) | 責(zé)任編輯:陳曉亮) |



