焦淑紅 張 靜
摘 要:隨著對監(jiān)控技術(shù)需求的不斷發(fā)展,許多公司建立了自己的文件格式來實(shí)現(xiàn)編碼技術(shù),以滿足不同的應(yīng)用需求。然而,使用這些私有的文件格式保存多媒體文件,只能用專用播放器才能播放,給使用造成了很大不便。為解決這一問題,提出了一種在視頻監(jiān)控系統(tǒng)進(jìn)行錄像或者下載時,將私有塊文件格式封裝為MPEG-Ⅱ PS流文件格式保存的方法。介紹了MPEG-Ⅱ PS的背景,私有文件格式的背景,封裝前對媒體流的處理方法,以及MPEG-Ⅱ PS流的封裝方法,并提出了一種特殊打印時間戳的方法。經(jīng)過轉(zhuǎn)換后的文件可以被通用播放器,如VLC,暴風(fēng)影音等播放,并且能夠?qū)崿F(xiàn)音視頻同步。
關(guān)鍵詞:MPEG-Ⅱ PS;私有文件格式;文件格式轉(zhuǎn)換;時間戳;錄像
中圖分類號:TN919.8文獻(xiàn)標(biāo)識碼:B
文章編號:1004-373X(2009)05-115-04
Video File Format Conversion Method in the Video Surveillance System
JIAO Shuhong,ZHANG Jing
(Information and Communication Engineering College,Harbin Engineering University,Harbin,150001,China)
Abstract:With development of the demand of video surveillance,many companies set up their own file format to meet different application requirements.It is inconvenient because these private files can only be played by special players.To solve this problem,an approach that transcoding private block file to MPEG-Ⅱ PS document format in video or download had been brought up.The background of MPEG-Ⅱ PS,and private block file,the processing methods of media stream before packaging,the packaging methods of MPEG-Ⅱ PS are introduced,and a special time-stamp printing methods is brought up.The file after transcoding can be played by common players,such as VLC,storm player,and so on.Besides,audio and video synchronization in time can be achieved.
Keywords:MPEG-Ⅱ PS;private file format;file format conversion;timestamp;video
0 引 言
監(jiān)控技術(shù)從上個世紀(jì)80年代進(jìn)入我國以來,隨著安防需求的急劇增加,隨著國內(nèi)信息化建設(shè)的不斷深入,一直在飛速發(fā)展。目前,視頻監(jiān)控已經(jīng)發(fā)展到了網(wǎng)絡(luò)多媒體監(jiān)控系統(tǒng),并已應(yīng)用于人們的工作和生活。隨著需求的不斷發(fā)展,更多的編碼技術(shù)和應(yīng)用對象正在不斷地產(chǎn)生,許多公司建立了自己的文件格式來實(shí)現(xiàn)編碼技術(shù),以滿足不同的應(yīng)用需求。
然而,使用這些私有的文件格式保存多媒體文件只能用專用播放器才能播放,而一些被客戶廣泛使用的播放器卻無法對這些數(shù)據(jù)進(jìn)行處理,因此給客戶的使用造成了很大的不便。
為了解決這一問題,提出一種在視頻監(jiān)控系統(tǒng)中,對多媒體文件(包括從網(wǎng)絡(luò)上接收到的RTP數(shù)據(jù)包,或者私有格式的多媒體文件)進(jìn)行錄像或者下載時,將數(shù)據(jù)封裝為PS流格式,轉(zhuǎn)換成普通格式的多媒體文件存儲的轉(zhuǎn)換方案。利用該技術(shù)方案,轉(zhuǎn)換后的多媒體文件包含視頻和音頻,可以通過暴風(fēng)影音、VLC播放,并且能夠?qū)崿F(xiàn)音視頻同步。
1 MPEG-Ⅱ PS 流背景
在MPEG-Ⅱ標(biāo)準(zhǔn)中,為了將一個或更多的音頻、視頻,或其他的基本數(shù)據(jù)流合成單個或多個數(shù)據(jù)流,以適應(yīng)于存儲和傳送,必須對其進(jìn)行重新打包、編碼,在碼流中還需要插入各種時間標(biāo)記、系統(tǒng)控制等信息,最后送到信道編碼器與調(diào)制器。這樣可以形成兩種數(shù)據(jù)流節(jié)目流(Program Stream,PS流)和傳輸流(Transport Stream,TS流)。
TS流與PS流的區(qū)別在于:
(1) TS流的包結(jié)構(gòu)是固定長度,而PS流的包結(jié)構(gòu)是可變長度的。
(2) 它們的應(yīng)用場合不同,PS流適合在出錯相對較少的網(wǎng)絡(luò)環(huán)境下使用,其長度是變化的;TS流能夠把多個節(jié)目在基于一個或多個時間標(biāo)識的基礎(chǔ)上構(gòu)成一個流,TS流適合在出錯較多的場合使用。
(3) PS流主要應(yīng)用于存儲固定時長的節(jié)目,如DVD電影,而TS流則主要應(yīng)用于實(shí)時傳送的節(jié)目,比如實(shí)時廣播的電視節(jié)目。
(4) 很多視頻編緝軟件是不支持TS流的,所以如果要對視頻文件進(jìn)行處理,要將TS流轉(zhuǎn)換為PS流后,才能進(jìn)行后期的編輯。
TS流和PS流的形成過程如圖1所示。
根據(jù)圖1可以看出,無論對傳輸流還是節(jié)目流,MPEG-Ⅱ系統(tǒng)復(fù)接部分都可分為兩個步驟:
(1) 視頻和音頻的基本流(Elenentary Stream,ES)分別按一定的格式打包,構(gòu)成具有某種格式的打包基本流(Packetized Elementary Stream,PES),分別稱為視頻PES和音頻PES,這一步驟在打包器內(nèi)實(shí)現(xiàn),PES的長度可在一定范圍內(nèi)變化。
(2) 將視頻、音頻的PES流以及輔助數(shù)據(jù)按不同格式再打包,然后進(jìn)行復(fù)接,即分別生成了PS流和TS流。
PS流一般以一幀數(shù)據(jù)為一個處理單元,由很多的PES包組成,音視頻數(shù)據(jù)包含在PES包中,PS流的組成示意圖如圖2所示。
Pack Header一般是14 B或15 B,其中包括包起始字段、SCR字段、節(jié)目復(fù)合速率字段等。
PES Header 中,包括包起始碼前綴字段、流標(biāo)識字段(一般視頻對應(yīng)0XE0,視頻對應(yīng)0XC0)、數(shù)據(jù)包長度、PTS和DTS等。
Video,Audio等表示的是視音頻裸數(shù)據(jù)。
2 私有文件存儲格式
私有文件格式是由主副兩級時間索引組成,磁盤被劃分多個數(shù)據(jù)單元,數(shù)據(jù)單元是物理時間獨(dú)立的存儲空間,單元內(nèi)的數(shù)據(jù)按時間遞增順序存儲,以16 KB為基本的存儲單位,稱之為“塊”,其結(jié)構(gòu)如圖3所示。
Super Data:記錄磁盤信息,包括初始后該磁盤的系統(tǒng)uuid、磁盤最后一次使用時間、分區(qū)情況、分區(qū)的使用情況等。
Main Index:Main Index是一個結(jié)構(gòu)體,具體記錄磁盤主索引信息,包括當(dāng)前正在寫入的塊索引號、當(dāng)前有效的索引數(shù)、寫入標(biāo)志(是否循環(huán)輸入)等。
Data Unit:由主索引管理的存儲單元,每塊的大小為256 Mb/s。
Second Index :單元副索引,記錄單元內(nèi) I 幀組使用情況、I 幀組開始時間、I 幀組占用的數(shù)據(jù)塊、I 幀組在單元內(nèi)的起始位置等。
3 PS流封裝前準(zhǔn)備
PS流的封裝是從獲得裸碼流開始的,所以在進(jìn)行PS流封裝前,應(yīng)該對從網(wǎng)絡(luò)上接收到的數(shù)據(jù)包或者H3CRD格式的多媒體文件進(jìn)行處理,以獲得音視頻的裸碼流。
3.1 網(wǎng)絡(luò)上收到的RTP數(shù)據(jù)包的處理
網(wǎng)絡(luò)上收到的RTP數(shù)據(jù)包的處理流程如圖4所示。
其過程描述如下:
(1) 選擇數(shù)據(jù)源,從指定的網(wǎng)絡(luò)端口上收取多媒體數(shù)據(jù)包。
(2) 將從網(wǎng)絡(luò)上接收到的數(shù)據(jù)包放入幀緩存區(qū)中。
(3) 如果此包為當(dāng)前幀的最后一個包,表明這一幀的數(shù)據(jù)已經(jīng)接收完成,將當(dāng)前幀數(shù)據(jù)放入I幀組鏈表。
(4) 將I幀組鏈表發(fā)送到錄像線程,進(jìn)行PS流的封裝處理。
(5) 判斷網(wǎng)絡(luò)數(shù)據(jù)源是否仍有數(shù)據(jù),如果有,重復(fù)步驟(1)~(4);如果已經(jīng)沒有數(shù)據(jù),則退出程序。
3.2 私有格式的多媒體文件的處理
如前面背景中所述,塊文件格式的多媒體文件是一種私有多媒體文件格式,要想從塊文件格式中得到裸數(shù)據(jù),就必須對塊文件格式進(jìn)行解析,解析過程簡圖如圖5所示。
解析過程描述如下:
(1) 設(shè)置待轉(zhuǎn)換文件的開始時間和結(jié)束時間。
(2) 從磁盤上讀取時間索引。
(3) 以塊為單位處理數(shù)據(jù),直至一個I幀組處理完成,存入I幀組緩沖區(qū)。
(4) 發(fā)送到錄像線程進(jìn)行PS流封裝。
(5) 如果還有數(shù)據(jù)沒有處理,則重復(fù)步驟(2)~(4);如果所有數(shù)據(jù)都已處理完成,則退出程序。
4 PS流封裝
無論對實(shí)時流,還是私有格式文件,PS流的封裝都是從獲得裸數(shù)據(jù)開始的。
PS流封裝包括如下幾個關(guān)鍵步驟:
(1) PES分組信息的填充。
(2) 節(jié)目流包頭信息的填充。
(3) 數(shù)據(jù)的填充。
4.1 PES分組信息的填充
(1) 分組起始碼前綴
24位字段,它和后面的Stream_id構(gòu)成了標(biāo)識分組起始碼,它的值固定填充:0X000001。
(2) 流標(biāo)識字段
8位字段,它規(guī)定了基本流的類型,一般音頻:0XC0,視頻0XE0。
(3) PES分組長度字段
16位字段,指出了PES分組中跟在該字段后的字節(jié)數(shù)目。
(4) PTS,DTS標(biāo)志字段
24位字段,當(dāng)值為‘10時,PTS字段出現(xiàn)在PES分組信息頭中,當(dāng)值為‘11時,PTS和DTS字段都應(yīng)出現(xiàn)在PES分組信息頭中,當(dāng)值為‘00時,PTS和DTS都不出現(xiàn)在PES分組信息頭中,值‘01是不允許的。
如果一個PES包對應(yīng)一幀圖像,因此在每個包中均應(yīng)設(shè)定與該圖像幀對應(yīng)的PTS值。至于DTS,它不能獨(dú)立出現(xiàn),必須與PTS一起發(fā)生,DTS值可由PTS值得到,除非對解碼過程有特殊要求,一般不設(shè)定也不傳送DTS,當(dāng)編碼圖像幀不含B幀時,也就是說不需要對編碼幀順序進(jìn)行重排時,DTS值與PTS值是相同的。PTS是PES頭中最重要的功能,PTS的差錯將導(dǎo)致圖像與伴音對不齊之類的錯誤。音頻幀不需要填寫DTS字段。
(5) 顯示時間標(biāo)志
PTS是一個編碼在三個分離字段的33位數(shù)字,它以系統(tǒng)時鐘幀率的1/300(即90 kHz)為單位,PTS值計算如下:
PTS=((SCF*FileTimeStamp)/300)%233
其中:SCF為System Clock Frequency的縮寫,表示的是系統(tǒng)時鐘頻率,一般取27 MHz,F(xiàn)ileTimeStamp是當(dāng)前幀的時間戳,它的獲取方法是獲取接收到當(dāng)前幀時對應(yīng)的系統(tǒng)時間,將其換算為以秒為單位時對應(yīng)的值。
4.2 節(jié)目流包頭信息的填充
(1) 包起始字段
固定填充0X000001BA,用來標(biāo)志一個包的開始。
(2) 系統(tǒng)時鐘參考
系統(tǒng)時鐘參考,是一個分兩部分編碼的42位字段,第一部分System_Clock_ Reference_Base,是一個長度為33位字段,它以系統(tǒng)時鐘頻率的1/300為單位,其值的計算方法如下:
SCR_Base=((SCF*FileTimeStamp)/300)%233
第二部分System_Clock_Reference_ Extention是一個長度為9位的字段,它以系統(tǒng)時鐘頻率為單位,其值的計算方法是:
SCR_Extention=(SCF*FileTimeStamp)%300
4.3 數(shù)據(jù)區(qū)的填充
無論是對實(shí)時流的處理還是對私有塊文件格式的多媒體文件處理,都是以幀為單位進(jìn)行讀取和封裝的。在每幀數(shù)據(jù)的幀頭信息中可以知道該幀數(shù)據(jù)的長度和數(shù)據(jù)存放位置,由于PS流的包結(jié)構(gòu)是可變長度的,因此根據(jù)該幀數(shù)據(jù)的長度,將數(shù)據(jù)順序填入PES Packer Header之后的數(shù)據(jù)區(qū)中。
5 時間戳的打印方式
PS流的封裝方法基本遵循MPEG-II標(biāo)準(zhǔn),顯示時間標(biāo)志PTS(Presentation Time Stamp)和解碼時間標(biāo)志DTS(Decoding Time Stamp) 是保證音視頻準(zhǔn)確同步的重要信息。PTS,DTS計算公式如下:
((SCF*FileTimeStamp)/300)%233
式中,SCF指系統(tǒng)時鐘頻率,取固定值27 MHz,F(xiàn)ileTimeStamp為當(dāng)前幀的時間戳,表示的是輸入的到達(dá)時間,由于此處采用的是系統(tǒng)時間格式,所以當(dāng)前幀的時間戳就是當(dāng)前幀到達(dá)時的系統(tǒng)時間。
但是對于在錄像或下載時,進(jìn)行文件格式轉(zhuǎn)換工作,會受到網(wǎng)絡(luò)環(huán)境的限制,在網(wǎng)絡(luò)環(huán)境比較惡劣的時候,并不能保證數(shù)據(jù)流的連續(xù),因此,如果按照MPEG-Ⅱ標(biāo)準(zhǔn),時間戳為輸入的到達(dá)時間,在錄成文件回放時,是按照時間戳來回放的,在這種情況下,很難保證回放時畫面的流暢和音視頻的同步,這樣會嚴(yán)重影響圖像質(zhì)量。
為解決這一問題,必須采用一種獨(dú)特的打印時間戳的方法,稱之為“手動打印時間戳”的方式,就是在得到第一幀圖像時,采用系統(tǒng)時間作為當(dāng)前幀的時間戳,而兩幀圖像的時間間隔為40 ms,因此對第一幀之后的視頻幀,時間戳是以在前一幀基礎(chǔ)上增加40 ms的方式打印的,這樣可有效解決錄像后文件受網(wǎng)絡(luò)環(huán)境限制的問題,使文件格式轉(zhuǎn)換后的圖像質(zhì)量得到了進(jìn)一步保障。
6 結(jié) 語
經(jīng)過以上的處理,就將私有的塊格式文件轉(zhuǎn)換為MPEG-PS的格式,可以使用通用的媒體播放器,如:VLC,暴風(fēng)影音等播放。解決了通用播放器無法處理私有格式數(shù)據(jù),使用非常不便的問題。
參考文獻(xiàn)
[1]姚雪峰,王華軍,呂乃光,等.基于WINDOWS平臺的多媒體文件格式轉(zhuǎn)換原理與實(shí)現(xiàn)[J].計算機(jī)系統(tǒng)應(yīng)用,2006(3):67-69,35.
[2]王軼.基于WinCE的移動客戶端的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[D].大連:大連海事大學(xué),2008.
[3]劉昕宇.荊門電信“全球眼”視頻監(jiān)控系統(tǒng)設(shè)計[D].大連:大連海事大學(xué),2008.
[4]創(chuàng)新科.平安城市視頻監(jiān)控數(shù)據(jù)存儲技術(shù)方案[EB/OL].http://vm.lmtw.com/FA/200712/44339.html,2007.
[5]謝志華.MPEG-2 TS流處理及其網(wǎng)絡(luò)傳輸技術(shù)的研究[D].江西:江西師范大學(xué),2004.
[6]梅劍平,全子一.MPEG-2系統(tǒng)復(fù)接技術(shù)[EB/OL].http://www.catvshow.com/tech-center/digital-TV/5-26/MPEG-2-1.htm,2007.
[7]佚名.MPEG-2系統(tǒng)的傳輸流復(fù)用方式[EB/OL].http://met.fzu.edu.cn/cai/satellite/wangshangjiaoxue/2-5.htm,2006.
[8]陳磊.一種視頻監(jiān)控數(shù)據(jù)存儲管理方法及系統(tǒng)[P].中國:200610103523.4,2006.
[9]GB/T 17975.1-2000.信息技術(shù) 運(yùn)動圖像及其伴音信息的通用編碼[S].2000.