摘 要:傳統的視頻監控系統是將數據存儲在硬盤上,存在價格高、壽命短等缺點。為了用DVD光盤代替硬盤存儲數據,提出了將MPEG-2壓縮后的視頻數據生成DVD視頻數據的解決方案,并用C語言實現。分析所生成的文件數據,符合DVD Forum標準,使用該方法生成的文件在DVD播放機上播放,畫面質量良好,播放流暢。表明用該方法生成的DVD視頻碼流是成功的。
關鍵詞:視頻監控; DVD視頻數據; VOB; IFO
中圖分類號:TN919.8-34
文獻標識碼:A
文章編號:1004-373X(2012)01-0139-04
Research and realization of DVD video streaming for video monitoring system
WU Dong-mei1, HE Ce1, SHEN Yan2
(1.Department of Communication, Xi’an University of Science and Technology, Xi’an 710054, China;
2.Jiangsu Environmental Monitoring Center, Nanjing 210004, China)
Abstract:
The traditional video monitoring system stores data on hard disk, which has high price and short life span. In order to use DVD disk to replace hard disk storing data, a solution is presented which makes video data compressed by MPEG-2 generate DVD video data and is implemented by C language. By analyzing the data of the generated document and conforming to DVD Forum standard, using the method to generate document is played in DVD player, the video picture quality is good and fluency. It indicates that the DVD video stream generated by the method is successful.
Keywords: video monitoring; DVD video data; VOB; IFO
收稿日期:2011-08-01
基金項目:陜西省工業攻關計劃資助項目(2011K09-36)
0 引 言
當今視頻監控系統被廣泛應用于各個領域,成為金融、交通、住宅和社區等安全監控的重要手段。但是視頻監控系統數據量大,為了解決巨大的存儲開銷問題,需要開發存儲容量較大且價格便宜的存儲器。目前國內的視頻監控系統主要以嵌入式硬盤錄像機(DVR)為主,實現了數字化高保真存儲,并且存儲容量較大,但硬盤怕震動,散熱性差,保存數據缺乏穩定和可靠性,并且硬盤壽命短、價格較高。
DVD光盤也是一種普遍的存儲器,相對于硬盤而言,DVD光盤有著價格便宜,數據存儲穩定可靠,使用壽命長等優點。因此DVD光盤特別適用于儲存視頻、音頻等信息量特別巨大的數據,在多媒體數據處理領域應用前景十分廣泛。
因此,在視頻監控系統中用DVD光盤替代硬盤,符合市場發展的規律。如何將壓縮后的視頻數據生成DVD格式的視頻數據,是其中的關鍵技術,因此本文提出了將MPEG-2壓縮后的視頻數據生成DVD視頻數據的解決方案,并實現了視頻數據在DVD光盤上的存儲。
1 系統框架
在整個視頻監控系統中,原始視頻流生成DVD視頻碼流的整個過程框架如圖1所示。
圖1 方案系統框架
首先視頻監控系統中的攝像頭將采集到的視頻傳送給編碼器進行編碼,經過MPEG-2編碼后生成的碼流是基本流(ES流),ES流在服務器上進行打包生成基本流包(PES),然后將PES生成VOB文件,再根據VOB里面的信息生成相應的IFO文件,然后將VOB和IFO刻錄在光盤上。這樣就將監控到的視頻數據生成標準的DVD數據流存儲在DVD光盤中。如果將視頻數據在客戶端進行刻錄,則將壓縮后的視頻數據首先轉化為DVD數據,然后由服務器端通過網絡傳送到客戶端,就可以刻錄了。
2 DVD光盤文件及其結構分析
2.1 DVD光盤文件
在DVD視頻光盤中有兩個文件夾,分別是“AUDIO_TS”和“VIDEO_TS”,“AUDIO_TS”文件是為了DVD音頻光盤準備的;“VIDEO_TS”文件存儲DVD-VIDEO所有數據。一個標準的VIDEO-TS目錄中包含有3種類型的文件IFO,VOB,BUP[1]。
(1) IFO(InFOrmation):存放的導引信息可以讓DVD播放器通過這些信息找到相應的播放內容。該文件包含怎樣以及何時播放VOB文件中數據的控制信息,比如電影的一個章節在哪里開始,如何匹配音頻流、視頻流與字幕流等。
(2) VOB(Video OBject):存放的是影片播放數據。VOB主要包含播放數據和導航數據,其中導航數據包含播放控制信息(PCI)與數據索引信息(DSI)兩部分。
(3) BUP(BackUP):由于IFO文件對于光盤的正常播放起到非常重要的作用,因此對IFO文件建立一個副本,保存在BUP文件中,其內部數據與IFO文件完全一致。
2.2 視頻對象集文件(VOB)的數據結構
VOB文件存儲的是一個MPEG-2 PS流。由于DVD扇區存儲數據是以2 048個字節為一包,所以每個PS包大小是固定的2 048 B。VOB文件可由一個或多個VOB組成。一個VOB由一個或多個節目單元(Cell)組成,Cell可以包含任意數目的VOBU。VOBU是比Cell更小的一個邏輯結構,VOBU包含視頻數據、音頻數據、字幕及導航數據。每個VOBU開始首先是導航包,緊跟著是視頻包、音頻包或者字幕包。視頻只能包含1個視頻流,音頻最多是8個音頻流,字幕最多是32個字幕流。一個VOBU其實包含的視頻數據是一個圖像組(GOP),圖像組以I幀開始,其次是P幀,最后是B幀。一個圖像組結束后,就是一個新的VOBU開始,一般來說一個圖像組包含12幀圖像[2]。VOB文件結構如圖2所示。
2.3 DVD視頻配置文件數據結構
IFO文件包含視頻管理信息(VMG IFO)和視頻標題集信息(VTS IFO)兩種文件,由于VMG IFO和VTS IFO結構類似,本文就只介紹視頻標題集信息。VMGI描述整張光盤中卷集的相關信息,而VTSI則描述卷內的多個或一個視頻標題和視頻標題集菜單(VTSM)的相關信息。每一個VTS都有與之對應的VTSI[3]。VTSI共9個表,分別是視頻標題集信息管理表、視頻標題集章節搜索指針表、視頻標題集節目鏈信息表、視頻標題集菜單節目鏈單元表、視頻標題集時間映射表、視頻標題集菜單節目單元地址表、視頻標題集菜單VOBU地址映射表、視頻標題集節目單元地址表、視頻標題集VOBU地址映射表。
圖2 VOB文件的結構圖
3 DVD視頻文件實時生成設計
3.1 ES流生成VOB
從MPEG-2的ES流中提取一幀圖像數據,從序列頭和圖像頭中判斷所獲得的幀類型,如果是I幀,則首先生成導航包,在DVD中,每包數據是2 048 B,接著在I幀數據上封裝PS頭和PES頭,組成一個視頻數據包。然后判斷剩余的I幀數據是否能夠和PS頭及PES頭組成一個視頻數據包,如果夠用,則再生成一個視頻數據包,再次判斷I幀數據,依次循環下去,如果最后剩余I幀不夠用,則可以后面用P幀的數據補上,這樣就可以生成一包完整的視頻文件了。如果是P幀或B幀,則不用生成導航包,直接在P幀或B幀數據上封裝上PS頭和PES頭,組成一個視頻數據包,P幀或B幀判斷剩余字節和I幀的方法一樣,惟一不同的地方是,在一個GOP中的最后一個P幀或B幀的剩余字節不夠時,用填充數據0xFF填充,組成一個視頻數據包。這樣就生成一個VOBU,其結構是導航包+I幀+P幀+B幀+B幀+…+音頻幀+P幀+B幀。生成VOB的流程如圖3所示。
每個VOBU是以一個導航包開始的,所以必須先生成一個導航包[4],導航包的結構定義如下:
struct NAVPACK
{ uint8_t PACK_HEADER[14];
uint8_t SYSTEM_HEADER[24];
uint8_t PCI_PACKET_HEADER[6];
uint8_t PCI_SUBSTREAMID;
uint8_t PCI_DATA[979];
uint8_t DSI_PACKET_HEADER[6];
uint8_t DSI_SUBSTREAMID;
uint8_t DSI_DATA[546];
uint8_t reserved[471];
};
生成導航包后,則開始封裝視頻數據,具體的封包函數是MakePSStream,其返回是一個整形,如果封包成功,則返回0,否則返回1。函數原型如下:
Static int MakePSStream(char*ESbuffer,int ESlenght,int FreameType, _int64 Pts, _int64 Dts, MAKEPACKETOOL*Mpt)
每當一個GOP封裝成一個VOBU后,在開始封裝下一個VOBU時,須將打包管理器Mpt中VOBU的起始地址設置為Mpt->StartAddress=Mpt->EndAddress,這樣生成的VOBU地址才連續,即后一個VOBU緊跟著前一個VOBU。
圖3 生成VOB的流程圖
3.2 VTS IFO的生成
根據生成的VOB,可以生成對應的VTS IFO文件。首先定義一個結構體workset,用來存儲VOB文件有關信息,為 workset結構體中的各個成員變量分配空間并初始化,打開一個VOB文件,從VOB文件中每次讀取2 048 B的數據存儲在buffer中,判斷前4個字節是否等于0x000001BA,如果是,則獲取MPEG-2頭中時間信息SCR。接著判斷buffer[14],buffer[15],buffer[16],buffer[17]是否等于0x000001E0,如果是,則獲取PES包頭中視頻時間信息PTS和DTS。如果buffer[14],buffer[15],buffer[16],buffer[17]等于0x000001BD,獲取PES包頭中的音頻時間信息PTS和DTS[5]。如果等于0x000001BB,表明讀取的數據是導航包,循環從VOB文件中讀取2 048 B數據,直到指針指到文件結尾,循環結束,即可知一個VOB文件中的VOBU數和每個VOBU的開始地址和結束地址等信息,具體實現函數是FindsVobus()。然后通過函數MarkChapters()獲得的PGC數和Cell ID 等信息,將這些信息存儲在結構體workset。
根據前面的VOB信息,生成IFO中的各個表,并將各表的數據寫入VTS IFO文件。首先創建一個VTS IFO文件并以讀寫方式打開,然后調用函數WriteIFO()生成VIS IFO。函數原型是WriteIFO(FILE *h,struct workset*ws)。
VMG IFO生成的方法和VTS IFO類似,本文不再詳細介紹。
3.3 音視頻同步算法的研究
3.3.1 視頻PES時間信息重建
在MPEG-2標準中,圖像解碼的幀順序和顯示的幀順序是不相同的。在PES分組中的時間同步信息是顯示時間(PTS)和解碼時間(DTS)。
由于MPEG-2標準中給出的PTS和DTS的計算公式非常復雜,而且不易理解,本文提出了一種計算PTS和DTS的新方法。
在圖像經過編碼后,編碼器已經在生成后的ES流中標上了與同步信息相關的幀速率、幀參考和幀類型等字段[6],因此可以通過這些信息計算出PTS和DTS。根據MPEG-2的時序模型,知道視頻的DTS值始終具有逐幀遞增的特點,而PTS和DTS之間具有恒定的差值關系[7],因此根據DTS確定PTS的值。對于一個GOP中每一幀的PTS/DTS值計算如下:
(1) 如果當前幀是I幀,并且是整個碼流的第一幀。
PTS=PtsIni
DTS=PtsIni-(temporal_reference+1)*frame_time
(2) 如果當前幀是I幀、P幀或者B幀,但不是第一幀。
DTS=PtsIni+frame_counter*frame_time
PTS=DTS+(temporal_reference+1-GopFrameOrder)*frame_time
其中,PtsIni是編碼時設定的PTS初始值;temporal_reference是解碼后的顯示順序;frame_time是一幀圖像的持續時間;frame_counter為從整個碼流的第一幀到當前幀之間的幀數;GopFrameOrder為在當前GOP中的視頻幀序號。
3.3.2 PS時間信息重建
在PS流中,SCR是指時間同步信息。SCR表示了系統的時間基準,其頻率是27 MHz。SCR編碼的時候被分成兩個部分,一部分以系統時鐘的1/300為單位,稱為SCR_Base;另一部分以系統時鐘為單位,稱為SCR_Ext[8]。SCR的計算方法如下:
t(i)=SCR(i′)sys_clock_frequency+i-i′propram_mux_rate*50
令i=0,即可以得到當前i′字節編碼的SCR值。
在DVD文件中,每包數據大小是2 048 B,因此將i′設置為2 048, program_mux_rate是固定值25 200[9],即可得SCR(i′),從而得到:
SCR_Base=SCR/300
SCR_Ext=SCR%300
將第一個PS包即導航包的SCR設為初值0,以后每個PS包的SCR值按SCR(i′)遞增。
4 測試結果及分析
本文是在VC++6.0平臺上,用C語言進行開發的,由于C語言具有很好的移值性,因此程序也可以移植在嵌入式Linux系統中運行。
4.1 VOB文件測試
服務器端將生成的VOB及相應的IFO刻錄在DVD光盤中,或者通過網絡傳輸到客戶端進行刻錄。首先測試一下VOB文件,將其用播放軟件或者DVD播放機進行播放,本文是用暴風影音播放,播放畫面如圖4所示。
圖4 VOB文件的播放畫面
從播放效果來看視頻播放流暢,質量良好,沒有馬賽克效應。再用VobEdit軟件分析一下VOB文件結構,其結構正確,符合DVD論壇的規定[10]。
4.2 IFO文件測試
由于IFO不是視頻文件,不能直接播放驗證其是否正確,但可以通過DVD播放機播放VOB文件,看IFO文件是否能正確引導播放機播放VOB文件,通過
驗證,生成的IFO是可以的。也可以由IfoEdit軟件對生成的VTS IFO進行分析,其結構正確,符合DVD論壇的規定。測試結果如圖5所示。
圖5 分析生成VTS IFO文件測試結果
5 結 論
本文研究了DVD光盤中的文件結構,然后在VC++6.0平臺上用C語言編寫程序,成功將視頻監控的MPEG-2壓縮碼流封裝成VOB和IFO文件,并在電腦上用播放軟件播放和DVD播放機中播放,畫面質量良好,播放流暢。同時提出一種新的音視頻同步的算法。本文研究的成果已經應用在視頻監控系統中,用DVD光盤替代了硬盤存儲數據,為用戶節省了成本。
參 考 文 獻
[1]王復春.DVD視頻光盤的文件系統[J].記錄媒體技術,2008(5):32-34.
[2]張曉民,劉黎明,王水.DVD私有流分析及其應用研究[J].現代電子技術,2009,32(6):81-85.
[3]DVD Forum. DVD specification for read-only disc, version1.1 [R]. [S.l.]: DVD Forum, 1997.
[4]何韶煒.音/視頻實時DVD錄影系統的軟件實現[D].廣州:華南理工大學,2005.
[5]張莉,王保保.DVD光盤刻錄機的軟件系統實現[J].現代電子技術,2005,28(6):55-56.
[6]李宏.MPEG Ⅱ壓縮標準及其在DVD/DVB視頻信號處理中的應用[D].西安:西北工業大學,2007.
[7]洪波,鄒志永,王匡.數字電視廣播中的編解碼器的同步機制[J].中國有線電視,2003(11):27-30.
[8]ISO. ISO/IEC 13818-1 coding of moving pictures and associated audio Part1:system [S]. [S.l.]: ISO, 1996.
[9]ISO. ISO/IEC 13818-2 coding of moving pictures and associated audio Part2:video [S]. [S.l.]: ISO, 1996.
[10]DVD Forum. DVD-video recording for rewritable and recordable discs-part 3 video recording1.0 [R]. [S.l.]: DVD Forum, 1999.
作者簡介:
吳冬梅 女,1964年出生,浙江義烏人,碩士,教授。主要研究方向為小波分析、圖像壓縮及圖像識別等。
何 策 男,1985年出生,陜西咸陽人,在讀碩士研究生。主要研究方向為圖像處理。