亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種視頻文件和音頻文件的合并方法及系統(tǒng)的制作方法

文檔序號(hào):6783523閱讀:483來(lái)源:國(guó)知局
專(zhuān)利名稱:一種視頻文件和音頻文件的合并方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明屬于文件合并技術(shù)領(lǐng)域,具體涉及一種視頻文件和音頻文件合并方法及系
統(tǒng),特別適用于將分離的視頻文件和音頻文件合并后進(jìn)行網(wǎng)絡(luò)傳輸?shù)膱?chǎng)合。
背景技術(shù)
視頻數(shù)據(jù)和音頻數(shù)據(jù)常常分離存儲(chǔ),即將視頻數(shù)據(jù)和音頻數(shù)據(jù)存儲(chǔ)成兩個(gè)文件。 這樣,一方面增加了視頻數(shù)據(jù)和音頻數(shù)據(jù)的存儲(chǔ)空間;另一方面在網(wǎng)絡(luò)傳輸視音頻文件時(shí), 視頻文件和音頻文件需要分別傳輸,操作不便。 此外,國(guó)際標(biāo)準(zhǔn)的數(shù)字電影格式多為MPEG4格式,而標(biāo)準(zhǔn)的MPEG4格式音頻數(shù)據(jù)采 用的是AAC數(shù)字音頻,而AAC數(shù)字音頻需要支付高昂的版權(quán)費(fèi),相比而言AC3數(shù)字音頻的聲 音質(zhì)量與AAC數(shù)字音頻的聲音質(zhì)量相差不多,但AC3數(shù)字音頻卻沒(méi)有高昂的版權(quán)費(fèi)。因此, 如果MPEG4視頻文件能夠與AC3音頻文件合并,則無(wú)疑會(huì)降低數(shù)字電影的成本。
MPEG4是為在國(guó)際互聯(lián)網(wǎng)絡(luò)上或移動(dòng)通信設(shè)備(例如移動(dòng)電話)上實(shí)時(shí)傳輸音/視 頻訊號(hào)而制定的最新MPEG (Moving Picture Expert Group,運(yùn)動(dòng)圖像專(zhuān)家組)標(biāo)準(zhǔn),MPEG4采用 Object Based方式解壓縮,壓縮比指標(biāo)遠(yuǎn)遠(yuǎn)優(yōu)于以上幾種,壓縮倍數(shù)為450倍(靜態(tài)圖像可達(dá) 800倍),分辨率輸入可從320 X 240到1280 X 1024,這是同質(zhì)量的MPEG1和MJEPG的十倍多。
MPEG4使用"圖層(layer)"方式,能夠智能化選擇影像的不同之處,是可根據(jù)圖像 內(nèi)容,將其中的對(duì)象(人物、物體、背景)分離出來(lái)分別進(jìn)行壓縮,使圖文件容量大幅縮減, 而加速音/視頻的傳輸,這不僅僅大大提高了壓縮比,也使圖像探測(cè)的功能和準(zhǔn)確性更充 分的體現(xiàn)出來(lái)。 在網(wǎng)絡(luò)傳輸中可以設(shè)定MPEG4的碼流速率,清晰度也可在一定的范圍內(nèi)作相應(yīng)的 變化,這樣便于用戶根據(jù)自己對(duì)錄像時(shí)間、傳輸路數(shù)和清晰度的不同要求進(jìn)行不同的設(shè)置, 大大提高了系統(tǒng)使用時(shí)的適應(yīng)性和靈活性。也可采用動(dòng)態(tài)幀測(cè)技術(shù),動(dòng)態(tài)時(shí)快錄,靜態(tài)時(shí)慢 錄,從而減少平均數(shù)據(jù)量,節(jié)省存儲(chǔ)空間。而且當(dāng)在傳輸有誤碼或丟包現(xiàn)象時(shí),MPEG4受到 的影響很小,并且能迅速恢復(fù)。 AC(Audio Coding)3提供的環(huán)繞聲系統(tǒng)由五個(gè)全頻域聲道加一個(gè)超低音聲道組 成,所以被稱作5. l個(gè)聲道。五個(gè)聲道包括前置的〃 左聲道〃 、 〃 中置聲道〃 、 〃 右聲 道〃 、后置的〃 左環(huán)繞聲道〃 和〃 右環(huán)繞聲道〃 。這些聲道的頻率范圍均為全頻域響應(yīng) 3-20000Hz 。第六個(gè)聲道也就是超低音聲道包含了 一些額外的低音信息,使得一些場(chǎng)景如爆 炸、撞擊聲等的效果更好。由于這個(gè)聲道的頻率響應(yīng)為3-120Hz,所以稱〃 .1〃聲道。
AC-3是根據(jù)感覺(jué)來(lái)開(kāi)發(fā)的編碼系統(tǒng)多聲道環(huán)繞聲,它將每一種聲音的頻率根據(jù)人 耳的聽(tīng)覺(jué)特性區(qū)分為許多窄小頻段,在編碼過(guò)程中再根據(jù)音響心理學(xué)的原理進(jìn)行分析,保 留有效的音頻,刪除多作的信號(hào)和各種噪聲頻率,使重現(xiàn)的聲音更加純凈,分離度極高。

發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是提供一種視頻文件和音頻文件合并方法及系統(tǒng)。該方法及系統(tǒng)能夠有效地減少視頻文件和音頻文件的存儲(chǔ)空間,便于文件的 網(wǎng)絡(luò)傳輸。 為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下
—種視頻文件和音頻文件的合并方法,包括以下步驟 (1)將視頻數(shù)據(jù)和音頻數(shù)據(jù)分別存儲(chǔ)在視頻文件和音頻文件中;將視頻數(shù)據(jù)的索 引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視頻索引文件和音頻索引文件 中; (2)根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文件中數(shù)據(jù),合
并存儲(chǔ)在一個(gè)視音頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位
置及視頻索引文件和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。 如上所述的視頻文件和音頻文件的合并方法,步驟(2)中視頻數(shù)據(jù)和音頻數(shù)據(jù)按
照每幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)在視音頻文件的數(shù)據(jù)區(qū)中。 如上所述的視頻文件和音頻文件的合并方法,其中,視頻數(shù)據(jù)和音頻數(shù)據(jù)按照每 幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)的過(guò)程包括以下步驟 ①根據(jù)視頻索引文件讀取視頻文件中的一幀視頻數(shù)據(jù),寫(xiě)入視音頻文件的數(shù)據(jù)區(qū) 中,并獲得該幀視頻數(shù)據(jù)的時(shí)間戳; ②根據(jù)該幀視頻數(shù)據(jù)的時(shí)間戳及音頻索引文件讀取音頻文件中與該幀視頻數(shù)據(jù) 時(shí)間戳相對(duì)應(yīng)的音頻數(shù)據(jù),寫(xiě)入視音頻文件數(shù)據(jù)區(qū)中該幀視頻數(shù)據(jù)后; ③將時(shí)間戳及該幀視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置記錄到視音 頻文件的索引表中; ④重復(fù)步驟①至步驟③,直到將視頻文件和音頻文件合并完畢。 如上所述的視頻文件和音頻文件的合并方法,步驟③中,按照原視頻文件和音頻
文件的格式規(guī)范將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置記錄到視音頻文件的
索引表中。 如上所述的視頻文件和音頻文件的合并方法,步驟(1)中,將視頻數(shù)據(jù)壓縮存儲(chǔ) 成只含視頻數(shù)據(jù)的MPEG4文件,將音頻數(shù)據(jù)壓縮存儲(chǔ)成AC3音頻文件。
—種視頻文件和音頻文件的合并系統(tǒng),包括 存儲(chǔ)裝置,用于將視頻數(shù)據(jù)和音頻數(shù)據(jù)分別壓縮存儲(chǔ)在視頻文件和音頻文件中; 將視頻數(shù)據(jù)的索引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視頻索引文件 和音頻索引文件中; 讀取裝置,用于根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文件 中的數(shù)據(jù); 合并裝置,用于將讀取裝置讀取的視頻幀數(shù)據(jù)和音頻幀數(shù)據(jù)合并存儲(chǔ)在一個(gè)視音 頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置及視頻索引文件 和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。 如上所述的視頻文件和音頻文件的合并系統(tǒng),其中,存儲(chǔ)裝置存儲(chǔ)的視頻文件為 MPEG4視頻文件,音頻文件為AC3音頻文件。 如上所述的視頻文件和音頻文件的合并系統(tǒng),其中,合并裝置將視頻數(shù)據(jù)和音頻 數(shù)據(jù)按照每幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)在視音頻文件的數(shù)據(jù)區(qū)中。
如上所述的視頻文件和音頻文件的合并系統(tǒng),其中,合并裝置按照原視頻文件和 音頻文件格式規(guī)范將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置記錄到視音頻文件 的索引表中。 本發(fā)明所述方法及系統(tǒng),能夠?qū)⒎蛛x的視頻文件和音頻文件合并成一個(gè)視音頻文 件,不僅節(jié)省了視頻文件和音頻文件的存儲(chǔ)空間,而且便于視頻文件和音頻文件的網(wǎng)絡(luò)傳 輸,提高了網(wǎng)絡(luò)傳輸效率。將本發(fā)明應(yīng)用于MPEG4視頻文件和AC3音頻文件的合并,在不降 低聲音質(zhì)量的前提下,還能降低MPEG4影音的制作成本。


圖1是具體實(shí)施方式
中視頻文件和音頻文件合并系統(tǒng)的優(yōu)選實(shí)施方式的結(jié)構(gòu)框 圖; 圖2是具體實(shí)施方式
中采用圖1所示系統(tǒng)將視頻文件和音頻文件合并的流程圖;
圖3是具體實(shí)施方式
中將視頻數(shù)據(jù)和音頻數(shù)據(jù)間隔存儲(chǔ)的流程圖;
圖4是具體實(shí)施方式
中合并后的視音頻文件的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施方式
和附圖對(duì)本發(fā)明進(jìn)行詳細(xì)描述。 圖1出示了本發(fā)明所述視頻文件和音頻文件合并系統(tǒng)的優(yōu)選實(shí)施方式結(jié)構(gòu)。該系 統(tǒng)包括存儲(chǔ)裝置11、與存儲(chǔ)裝置11連接的讀取裝置12、與讀取裝置12連接的合并裝置13。
存儲(chǔ)裝置11用于將待合并的視頻數(shù)據(jù)和音頻數(shù)據(jù)分別壓縮存儲(chǔ)在視頻文件和音 頻文件中;將視頻數(shù)據(jù)的索引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視 頻索引文件和音頻索引文件中。所述時(shí)間戳是指標(biāo)識(shí)幀數(shù)據(jù)在播放過(guò)程應(yīng)播出的時(shí)間。
讀取裝置12用于根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文 件中的數(shù)據(jù)。 合并裝置13用于將讀取裝置12讀取的視頻幀數(shù)據(jù)和音頻幀數(shù)據(jù)合并存儲(chǔ)在一個(gè) 視音頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置及視頻索引 文件和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。 圖2出示了采用圖1所示系統(tǒng)合并視頻文件和音頻文件的方法流程。該方法主要 包括以下步驟 (1)將視頻數(shù)據(jù)和音頻數(shù)據(jù)分別存儲(chǔ)在視頻文件和音頻文件中;將視頻數(shù)據(jù)的索 引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視頻索引文件和音頻索引文件 中; (2)根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文件中數(shù)據(jù),合
并存儲(chǔ)在一個(gè)視音頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位
置及視頻索引文件和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。 下面以視頻文件為MPEG4視頻文件,音頻文件為AC3音頻文件為例進(jìn)一步說(shuō)明視
頻文件和音頻文件的合并過(guò)程。 首先將視頻數(shù)據(jù)壓縮成只含視頻數(shù)據(jù)的MPEG4文件,將音頻數(shù)據(jù)壓縮成AC3音頻 文件;然后創(chuàng)建視頻索引文件和音頻索引文件,將視頻數(shù)據(jù)和音頻數(shù)據(jù)的索引信息分別存儲(chǔ)其中;最后根據(jù)視頻索引文件和音頻索引文件將MPEG4視頻文件和AC3音頻文件合并。
為了保證合并后的視音頻文件的播放效率,本實(shí)施例將視頻數(shù)據(jù)和音頻數(shù)據(jù)按照 每幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)在視音頻文件的數(shù)據(jù)區(qū)中,即將時(shí)間戳相同的視頻數(shù)據(jù)和 音頻數(shù)據(jù)存儲(chǔ)在相鄰位置。圖3出示了一種間隔存儲(chǔ)視頻數(shù)據(jù)和音頻數(shù)據(jù)的方法流程,該 方法包括以下步驟 ①根據(jù)視頻索引文件讀取視頻文件中的一幀MPEG4視頻數(shù)據(jù),寫(xiě)入視音頻文件的 數(shù)據(jù)區(qū)中,并獲得該幀視頻數(shù)據(jù)的時(shí)間戳; ②根據(jù)步驟①中的時(shí)間戳及音頻索引文件讀取音頻文件中與該幀視頻數(shù)據(jù)時(shí)間 戳相對(duì)應(yīng)的AC3音頻數(shù)據(jù)(可能存在多幀),寫(xiě)入視音頻文件數(shù)據(jù)區(qū)中該幀視頻數(shù)據(jù)后;
③將步驟②中的時(shí)間戳及該幀視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置 記錄到視音頻文件的索引表中; ④重復(fù)步驟①至步驟③,直到將視頻文件和音頻文件合并完畢。 合并后的視音頻文件的結(jié)構(gòu)如圖4所示。合并后的文件應(yīng)該符合現(xiàn)有音頻和視頻
文件規(guī)范,即在填寫(xiě)索引表時(shí)按照原音頻和視頻文件格式規(guī)范填寫(xiě)便可。這樣,合并后的文
件不僅適用于專(zhuān)用的播放系統(tǒng),而且適用于通用的播放系統(tǒng)。 下面給出MPEG4視頻文件和AC3音頻文件合并時(shí)部分盒子定義的編碼示例。 l.moov:trak 容器盒子。 aligned(8)class TrackBox extends Box( 'trak, ) {} 2. moov:trak:tkhd track頭在trak中有且只有一個(gè)。 aligned(8)class TrackHeaderBox extends FullBox( 'tkhd',version, flags) { if (version == 1) { unsigned int (64)creation_time ; unsigned int(64)modification_time ; unsigned int(32)track_ID ; const unsigned int (32)reserved = 0 ; unsigned int (64)duration ; } else {//version == 0 unsigned int(32)creation_time ; unsigned int (32)modification_time ; unsigned int (32)track_ID ; const unsigned int (32)reserved = 0 ; unsigned int (32)duration ; } const unsigned int(32)[2]reserved = 0 ; template int(16)layer = 0 ; template int(16)alternate—group = 0 ;
7
template int (16)volume = {if track_is_audio 0x0100 else 0}; const unsigned int (16)reserved = 0 ; template int (32)[9]matrix = {0x00010000,O,O,O,0x00010000,0,0,0,0x40000000}; //unity matrix unsigned int (32)width ; unsigned int (32)height ; } 這個(gè)盒子,對(duì)于加入的AC3音頻,需要?jiǎng)?chuàng)建一個(gè)新的,新盒子要填寫(xiě)creation— time、 modification_time、 track_ID、 duration_f lags。 其中flag = Track_enabled|Track_ —in_movieITrack_in_preview = 0x000007。 時(shí)間表示方式與mvhd相同,track_ID從mvhd中獲取一個(gè)新的,duration是以
mvhd中定義的timescale為基礎(chǔ)的持續(xù)時(shí)間,如不能確定,則寫(xiě)全1。 alternate—group,如果有多個(gè)音頻,那么可以將這多個(gè)音頻歸到一個(gè)trak組中, 這里的數(shù)字表示組的數(shù)字,同組的trak,這個(gè)數(shù)字相同,不同表示不在一個(gè)組中。
■0086] 3. moov: trak: tref 、 moov: trak: edts、 moov: trak: edts: elst
:0087] tref與分?jǐn)嚅_(kāi)的trak連接,和hint有關(guān)。
:0088] edts以及里面的盒子,與編輯功能有關(guān),對(duì)于新建ac3音頻是用不到的。
:0089] 4. moov: trak:mdia
:0090] 媒體描述,容器盒子,在trak中,有且只有一個(gè)。
:0091] aligned(8) class MediaBox extends Box( 'mdia, ) {}
:0092] 5. moov: trak:mdia:mdhd
:0093] 媒體描述頭,要有一個(gè)。
:0094] aligned(8)class MediaHeaderBox extends FullBox( 'mdhd',version,0)
:0095] {
:0096] if (version == 1) {
:0097] unsigned int (64) creation_time ;
:0098] unsigned int (64)modif ication_time ;
:0099] unsigned int (32) timescale ;
:0100] unsigned int (64) duration ;
:0101]} else {//version == 0
:0102] unsigned int (32) creation_time ;
:0103] unsigned int (32)modif ication_time ;
:0104] unsigned int (32) timescale ;
:0105] unsigned int (32) duration ;
:0106] }
:0107]bit(l)pad = 0 ;
:0108]unsigned int (5) [3] language ^//IS0_639_2/T language code :0109]unsigned int (16) pre_def ined = 0 ;
} 對(duì)AC3音頻來(lái)說(shuō)要填上數(shù)據(jù),其中,language為代碼,中文是cho,英文是eng,內(nèi) 容符合IS0-639-2/T language code規(guī)范。 6.moov:trak:mdia:hdlr 媒體描述頭,要有一個(gè)。 aligned(8)class HandlerBox extends FullBox( 'hdlr,,version = 0,0) { unsigned int(32)pre_defined = 0 ; unsigned int(32)handler—type ; const unsigned int (32) [3]reserved = 0 ; string name ; } 對(duì)于AC3音頻,則填寫(xiě)handler—type = ' soun' , string name非零結(jié)尾的UTF-8 字串,用來(lái)檢查和除錯(cuò)用的標(biāo)記,填寫(xiě)'AC3'。 考慮多聲音支持,應(yīng)該定義在音頻trak內(nèi)部,這樣才能保證完整性而在音頻相關(guān) 的定義中,只有mdhd定義了語(yǔ)言,在hdlr中定義了字串。保留字也只有hdlr中,有12字 節(jié)。 而漢語(yǔ)還有與方言有關(guān)的定義,國(guó)際標(biāo)準(zhǔn)的語(yǔ)言代碼中,沒(méi)有對(duì)類(lèi)似粵語(yǔ)的支持
等,這里只能自己擴(kuò)展定義這個(gè)字段了 ,可利用一個(gè)保留字定義。 7. moov: trak:mdia:minf 媒體信息盒子,容器盒子,要有一個(gè)。 aligned(8) class MedialnformationBox extends Box( 'minf, ) {} moov: trak:mdia:minf下面,有 mhd, , 'smhd, , , hmhd, , 'nmhd,,應(yīng)該是只有一
個(gè),且是四個(gè)中的一個(gè)。對(duì)于新加音頻,也可以考慮不添加這類(lèi)盒子。 aligned(8)class SoundMediaHeaderBox extends FullBox( 'smhd',version =0, 0) { template int (16)balance = 0 ; const unsigned int (16)reserved = 0 ; } 8. moov: trak:mdia:minf: dinf 容器盒子,定義媒體的負(fù)載具體位置,要有一個(gè)。 aligned(8)class DatalnformationBox extends Box( 'dinf, ) {} 對(duì)于AC3音頻,要寫(xiě)一個(gè)新的盒子。定義數(shù)據(jù)負(fù)載的位置。dinf下邊只能是url、
urn、dref三種盒子。對(duì)于AC3音頻,由于數(shù)據(jù)在內(nèi)部,用最簡(jiǎn)單的定義形式,通常是定義一
個(gè)dref盒子,嵌套一個(gè)url的盒子,然后定義為空。 aligned(8)class DataEntryUrlBox(bit(24)flags) extends FullBox( 'url,, version = 0, flags)
9
{ string location ; } aligned(8)class DataReferenceBox extends FullBox( 'dref,,version = 0,0) { unsigned int(32)entry—count ; for(i = 1 ;i 7 entry—count ;i++){entry—count ;i++){ DataEntryBox(entry—version, entry—flags)data—entry 5 } } 其中,entry—count = 1, flag = 0x00000001表示數(shù)據(jù)在內(nèi)部,string =空,連同 dinf盒子,實(shí)際編碼形式如下0x24, ' dinf,0xlC, ' dref,0, 1,0x0C, ' url' ,1。 9. moov:trak:mdia:minf:stbl 重要的線索盒子,與sample有關(guān),"Sample Table"需要有且只有一個(gè)盒子對(duì)應(yīng) t:rak。 aligned(8)class SampleTableBox extends Box( 'stbl, ) {} 容器盒子,對(duì)于AC3音頻,要新建。 10. moov:trak:mdia:minf:stbl:stts 有且只有一個(gè)。 aligned(8)class TimeToSampleBox extends FullBox(, stts,,version = 0,0) {unsigned int(32)entry—count ;
int i ;for(i = 0 ;i < entry—count ;i++) {
unsigned int(32)sample—count ; unsigned int(32)sample—delta ; } } 對(duì)于AC3音頻,方案是,一個(gè)sample中,包含一個(gè)ac3 frame,所以數(shù)值是固定的。 entry_count = 1 ,然后,后面跟一個(gè)記錄項(xiàng)目。 entry—count = 1。 sample—count =所有ac3的幀數(shù)。 sample—delta =按timescale計(jì)算的每sample持續(xù)的時(shí)間,根據(jù)ac3實(shí)際,對(duì) 48KHz采樣是32ms 。 11. moov:trak:mdia:minf:stbl:ctts 對(duì)于音頻無(wú)意義,在視頻中的數(shù)據(jù)不改變,直接保留,音頻中沒(méi)有。 12. moov:trak:mdia:minf:stbl:stsd 有且只有一個(gè),定義sample的來(lái)源,以dinf: dref中指定的依據(jù)為基礎(chǔ)。對(duì)于數(shù)據(jù)就在本身文件中的情形,是最簡(jiǎn)單的情形,可用最簡(jiǎn)單的方式。對(duì)于音頻和其他trak來(lái) 說(shuō),stsd的結(jié)構(gòu)是不同的,但其他的盒子,可以原樣保留,不需要修改。
extends
aligned (8) abstract class S咖pleEntry (unsigned int (32) format)
Box(format)
const unsigned int(8)[6]reserved = 0 ; unsigned int (16)data—reference—index 5
class AudioS咖pleEntry (codingname) extends SampleEntry (codingname)
const unsigned int (32) [2]reserved = 0 ; template unsigned int (16) cha皿elco皿t = 2 ; template unsigned int(16)samplesize = 16 ; unsigned int (16)pre_defined = 0 ; const unsigned int (16)reserved = 0 ;
template unsigned int (32) samplerate = (timescale of media) << 16 ;
aligned (8) class S咖pleDescriptionBox (unsigned int (32) handler—type) extends FullBox(' stsd' ,0,0)
int i j
unsigned int (32)entry—count ;
for(i = 1 ;i.entry—count ;i++){entry—count ;i++)
switch(handler—type)
case 'so皿,//for audio tracks AudioSampleEntry0 ; break j
case 'vide, //for video tracks VisualSampleEntry(); break j
case 'hint' ://Hint track HintSampleEntry0 ; break j此,dinf:dref是最簡(jiǎn)單格式,這里也就相應(yīng)的簡(jiǎn)單了對(duì)于音頻來(lái)說(shuō),使用AudioSampleEntry()數(shù)據(jù)結(jié)構(gòu)。
為了使播放器能夠正確識(shí)別添加的AC3的trak,在stsd里添加'esds'盒子,具體定義如下aligned(8)class AC3ExtendBox extends FullBox( 'esds',version = 0,0){
unsigned int (8)version=0 ; 〃版本號(hào)unsigned int (8) ac3_dialect ; //方言
unsigned int (16)ac3_frame_info ; //AC3 header
unsigned int(32)ac3—_bit_rate ;//bps of ac3 stream}ac3_frame_info每個(gè)bit的具體說(shuō)明如下
語(yǔ)義bit數(shù)助記符bsid 5bslbfbsmod 3bslbfreserved 2define to 00bacmod 3bslbfsurround—mode 2bslbflfe on 1boolbsid :和AC3標(biāo)準(zhǔn)定義相同,默認(rèn)是01000。
bsmod :和AC3標(biāo)準(zhǔn)定義相同。
bsmod acmodType of Service000 anymain audio service:complete main(CM)001 anymain audio service:music and effects(ME)010 anyassociated service:visually impaired(VI)011 anyassociated service:hearing impaired(HI)100 anyassociated service:dialogue(D)101 anyassociated service:commentary(C)110 anyassociated service:emergency(E)111 001associated service:voice over(VO)111 010-111main audio service:karaokeacmode :在DVB中,這個(gè)字段是4個(gè)比特,但是AC3標(biāo)準(zhǔn)中,這個(gè)字段是3個(gè)比特。在DVB中,當(dāng)這個(gè)字段的最高位是1時(shí),后3個(gè)比特代表聲道的總數(shù),在stsd盒子中聲道的總數(shù)已經(jīng)定義了,因此,這里用3個(gè)l-匕特定義acmod。acmod CodingModnfchans Channel Array Ordering000 1+12 Chl,Ch2001 1/01 C010 2/02 L, R011 3/03 L,C,R













'AC-3,











100
101
110
111
2/1 3/1 2/2 3/2
Karaoke模式下
acmod CodingMode
010 2/0
011 3/0
100 2/1
101 3/1
110 2/2
111 3/2
3
4
4
5
Normal
L, R
L, C, R L, R, L, C, L, R, L, C,
L, R, S L, C, R, S L, R, Ls, Rs L, C, R, Ls, Rs
Karaoke L, R L, M, R
S
R, S Ls, Rs R, Ls, Rs
AudioSampleEntry()具體定義如下
class AudioS咖pleEntry (codingn咖e) extends
L, R, VI L, M, R, VI L, R, VI, V2 L, M, R, VI, V2
S咖pleEntry (coding—name
const unsigned int(32) [2]reserved = 0 ;
template unsigned int (16) cha皿elcount = number_of_ac3_channels ; template unsigned int (16)samplesize = 16 ; unsigned int (16)pre_defined = 0 ; const unsigned int (16)reserved = 0 ; template unsigned int (32) samplerate = (timescale of media) << 16 ; //for ac3 extend, we defined below: AC3ExtendBox AC3ESDS ;
13.moov:trak:mdia:minf:stbl:stsz、 moov:trak:mdia:minf:stbl:stz2 兩者用一個(gè)。用來(lái)列表定義每個(gè)sample的長(zhǎng)度。對(duì)于ac3音頻來(lái)說(shuō),如果每個(gè) sample中固定包含一個(gè)frame,那么sample的長(zhǎng)度是固定的,可以用最簡(jiǎn)單的方式描述。這 里用stsz,可以用一個(gè)項(xiàng)目說(shuō)明全部,stz2是被設(shè)計(jì)來(lái)使得sample長(zhǎng)度比較小且不固定的 時(shí)候,節(jié)約列表空間用的。 aligned(8)class SampleSizeBox extends FullBox( 'stsz,,version = 0,0)
{






unsigned int (32)sample—size ; unsigned int (32)sample—count ; if (sample—size ==0)
for(i = 1 ;i. sample—count ;i++){sample—count ;i++} unsigned int (32)entry—size ;
13
}
}
} 當(dāng)sample—size非零的時(shí)候,說(shuō)明定義了缺省的長(zhǎng)度,這正符合ac3的特征。
14. moov:trak:mdia:minf:stbl:stsc sample到chunk的對(duì)應(yīng)盒子。有且只能有一個(gè)。對(duì)ac3音頻來(lái)說(shuō),如果每個(gè)chunk 中包含的sample數(shù)目相同,那么描述是很簡(jiǎn)單的,如果是不規(guī)律的,那么要描述起來(lái)就比 較長(zhǎng)一些。其定義方式是先定義最初的chunk,然后記錄最前面的,sample數(shù)不變的,有多 少個(gè)chunk,當(dāng)sample數(shù)目變化后,啟動(dòng)一個(gè)新的記錄,從開(kāi)始變的chunk編號(hào)開(kāi)始,從新記 錄新的chunk中包含的變了的sample數(shù)目,依次類(lèi)推。對(duì)于本應(yīng)用,第一個(gè)版本中,為了簡(jiǎn) 單,先使用一個(gè)chunk,—個(gè)sample的方式。 aligned(8) class S咖pleToCh皿kBox extends FullBox( 'stsc, , version = 0, 0) {unsigned int(32)entry—count ;
for(i = 1 ;i <= entry—count ;i++)
{ unsigned int(32)first—chunk ; unsigned int (32) s咖ples—per—ch皿k ; unsigned int(32)sample—description—index ; } } entry—count = 1 ,后面足艮一個(gè)記錄項(xiàng)目。 15. moov: trak:mdia:minf: stbl: stco、 moov: trak:mdia:minf: stbl: co64
兩個(gè)盒子要用一個(gè)。 定義chunk在文件中的偏移,從而定位最終的數(shù)據(jù)。由于音頻和視頻chunk要交錯(cuò)
存儲(chǔ),所以音頻加近來(lái)之后,視頻的指針也要調(diào)整,這在復(fù)用的時(shí)候,是最復(fù)雜的一個(gè)過(guò)程。 這兩個(gè)盒子,stco是用32位指針,比較通用,co64是用64位指針,為了大文件定義的。 aligned(8) class Ch皿kOffsetBox extends FullBox( 'stco', version = 0,0) {unsigned int(32)entry—count ;for(i = 1 ;i <= entry—count ;i++)imsigned int (32) chunk—off set ; } aligned(8) class Ch皿kLargeOffsetBox extends FullBox( 'co64', version = 0,0) {unsigned int(32)entry—count ;for(i = 1 ;i <= entry—count ;i++)imsigned int (64) chunk—off set ; }
16.moov:trak:mdia:minf:stbl:stss 與流有關(guān),可定義可隨即seek的sample,通常都是定位I frame,對(duì)于ac3不需要 這個(gè)盒子。


擇保留-

17. moov:trak:mdia:minf:stbl:stsh
與seek有關(guān),但現(xiàn)在是用獨(dú)立文件的方式幫助做seek的,因此不需要這個(gè)盒子。
18. moov:trak:mdia:minf:stbl:stdp
定義每個(gè)幀的優(yōu)先級(jí),音頻不需要這個(gè)盒子,對(duì)于視頻來(lái)說(shuō),如果原來(lái)有,可以選
19. moov:trak:mdia:minf:stbl:padb
用于定義每個(gè)sample的字節(jié)對(duì)齊,會(huì)記錄每個(gè)sample為了字節(jié)對(duì)齊需要補(bǔ)充的 bit數(shù),不用這個(gè)盒子。
20. trak:edts trak:edts:elst。對(duì)于ac3音頻來(lái)說(shuō),不需要也不用構(gòu)造,若音頻trak中包含這 個(gè)內(nèi)容,則可保留,給出二級(jí)警告信息。 顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其同等技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
一種視頻文件和音頻文件的合并方法,包括以下步驟(1)將視頻數(shù)據(jù)和音頻數(shù)據(jù)分別存儲(chǔ)在視頻文件和音頻文件中;將視頻數(shù)據(jù)的索引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視頻索引文件和音頻索引文件中;(2)根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文件中數(shù)據(jù),合并存儲(chǔ)在一個(gè)視音頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置及視頻索引文件和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。
2. 如權(quán)利要求l所述的視頻文件和音頻文件的合并方法,其特征在于步驟(2)中視 頻數(shù)據(jù)和音頻數(shù)據(jù)按照每幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)在視音頻文件的數(shù)據(jù)區(qū)中。
3. 如權(quán)利要求2所述的視頻文件和音頻文件的合并方法,其特征在于所述視頻數(shù)據(jù)和音頻數(shù)據(jù)按照每幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)的過(guò)程包括以下步驟① 根據(jù)視頻索引文件讀取視頻文件中的一幀視頻數(shù)據(jù),寫(xiě)入視音頻文件的數(shù)據(jù)區(qū)中, 并獲得該幀視頻數(shù)據(jù)的時(shí)間戳;② 根據(jù)該幀視頻數(shù)據(jù)的時(shí)間戳及音頻索引文件讀取音頻文件中與該幀視頻數(shù)據(jù)時(shí)間 戳相對(duì)應(yīng)的音頻數(shù)據(jù),寫(xiě)入視音頻文件數(shù)據(jù)區(qū)中該幀視頻數(shù)據(jù)后;③ 將時(shí)間戳及該幀視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置記錄到視音頻文 件的索引表中;④ 重復(fù)步驟①至步驟③,直到將視頻文件和音頻文件合并完畢。
4. 如權(quán)利要求3所述的視頻文件和音頻文件的合并方法,其特征在于步驟③中,按照 原視頻文件和音頻文件的格式規(guī)范將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置記 錄到視音頻文件的索引表中。
5. 如權(quán)利要求1至4之一所述的視頻文件和音頻文件的合并方法,其特征在于步驟 (1)中,將視頻數(shù)據(jù)壓縮存儲(chǔ)成只含視頻數(shù)據(jù)的MPEG4文件,將音頻數(shù)據(jù)壓縮存儲(chǔ)成AC3音 頻文件。
6. —種視頻文件和音頻文件的合并系統(tǒng),包括存儲(chǔ)裝置(ll),用于將視頻數(shù)據(jù)和音頻數(shù)據(jù)分別壓縮存儲(chǔ)在視頻文件和音頻文件中; 將視頻數(shù)據(jù)的索引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視頻索引文件 和音頻索引文件中;讀取裝置(12),用于根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文件 中的數(shù)據(jù);合并裝置(13),用于將讀取裝置(12)讀取的視頻幀數(shù)據(jù)和音頻幀數(shù)據(jù)合并存儲(chǔ)在一 個(gè)視音頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置及視頻索 引文件和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。
7. 如權(quán)利要求6所述的視頻文件和音頻文件的合并系統(tǒng),其特征在于所述的存儲(chǔ)裝 置(11)存儲(chǔ)的視頻文件為MPEG4視頻文件,音頻文件為AC3音頻文件。
8. 如權(quán)利要求6所述的視頻文件和音頻文件的合并系統(tǒng),其特征在于所述的合并裝 置(13)將視頻數(shù)據(jù)和音頻數(shù)據(jù)按照每幀對(duì)應(yīng)的時(shí)間戳順序間隔存儲(chǔ)在視音頻文件的數(shù)據(jù) 區(qū)中。
9. 如權(quán)利要求6至8之一所述的視頻文件和音頻文件的合并系統(tǒng),其特征在于所述 的合并裝置(13)按照原視頻文件和音頻文件格式規(guī)范將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置記錄到視音頻文件的索引表中,
全文摘要
本發(fā)明公開(kāi)了一種視頻文件和音頻文件的合并方法及系統(tǒng),屬于文件合并技術(shù)領(lǐng)域。現(xiàn)有技術(shù)中的視頻文件和音頻文件常常分離存儲(chǔ),這增加了存儲(chǔ)空間,并給傳輸帶來(lái)不便。本發(fā)明首先將視頻數(shù)據(jù)和音頻數(shù)據(jù)分別壓縮存儲(chǔ)在視頻文件和音頻文件中;將視頻數(shù)據(jù)的索引信息和時(shí)間戳,音頻數(shù)據(jù)的索引信息和時(shí)間戳分別存儲(chǔ)在視頻索引文件和音頻索引文件中。然后根據(jù)視頻索引文件和音頻索引文件按幀讀取視頻文件和音頻文件中數(shù)據(jù),合并存儲(chǔ)在一個(gè)視音頻文件的數(shù)據(jù)區(qū)中;并將視頻數(shù)據(jù)和音頻數(shù)據(jù)在視音頻文件中的存儲(chǔ)位置及視頻索引文件和音頻索引文件中的時(shí)間戳記錄到視音頻文件的索引表中。本發(fā)明特別適用于將分離的視頻文件和音頻文件合并后進(jìn)行網(wǎng)絡(luò)傳輸?shù)膱?chǎng)合。
文檔編號(hào)G11B27/10GK101753946SQ20091024343
公開(kāi)日2010年6月23日 申請(qǐng)日期2009年12月22日 優(yōu)先權(quán)日2009年12月22日
發(fā)明者潘皓 申請(qǐng)人:北京中星微電子有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1