專利名稱:視音頻流數(shù)據(jù)恢復(fù)iso媒體文件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及媒體文件格式轉(zhuǎn)換方法,尤其涉及視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件的方法。
背景技術(shù):
通常流媒體文件格式有IS014496-14定義的MP4文件格式,IS014496-15定義的AVC文件 格式,3GPP TS26. 244定義的3GPP文件格式,3GPP2 C. S0050-0定義的3GPP2文件格式。這 些格式的流媒體文件(視音頻流數(shù)據(jù))支持媒體播放器本地播放以及通過流媒體服務(wù)器遠(yuǎn)程 點(diǎn)播,本文中提到的視音頻流數(shù)據(jù)就是指通過RTP (實(shí)時傳輸協(xié)議)傳輸?shù)囊曇纛l流數(shù)據(jù)。
在流媒體、視訊以及視頻監(jiān)控等領(lǐng)域中通常都有以下需求
1、 流媒體服務(wù)器為了實(shí)現(xiàn)直播節(jié)目的時移播放以及直播后的錄播功能,流媒體服務(wù)器需 要把從直播編碼器接收的視音頻數(shù)據(jù)包存儲下來。存儲視音頻流數(shù)據(jù)供后續(xù)使用。
2、 流媒體客戶端為了實(shí)現(xiàn)PVR(個人錄像)功能,需要對流媒體視音頻數(shù)據(jù)進(jìn)行實(shí)時接收 和存儲,以供客戶后續(xù)本地點(diǎn)播。
3、 數(shù)字視頻監(jiān)控系統(tǒng)中為了將監(jiān)控內(nèi)容存檔,需要將攝像頭采集的視頻信息編碼發(fā)送到 監(jiān)控中心進(jìn)行錄制。
以上描述的功能需求都涉及到一個關(guān)鍵的步驟存儲視音頻流數(shù)據(jù)供后續(xù)使用。傳統(tǒng)的 做法是用自定義的文件格式保存所有接收到的視音頻流數(shù)據(jù),在軟件系統(tǒng)里面有對自定義緩 存文件格式讀取發(fā)包。但是自定義的文件格式為私有格式,無法在多個廠商系統(tǒng)之間交換使 用,而且也無法提供給用戶下載到本地播放。
發(fā)明內(nèi)容
為了克服上述缺陷,本發(fā)明的目的在于提供一種可以將實(shí)時接收或已經(jīng)緩存在本地的流 數(shù)據(jù)錄制成可供流媒體服務(wù)器發(fā)送及媒體播放器本地播放的視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件
的方法。
為達(dá)到上述目的,本發(fā)明視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件的方法,包括如下歩驟
(1) 獲取視音頻流數(shù)據(jù)的媒體軌數(shù)、各媒體軌標(biāo)識(媒體軌ID)、時標(biāo)、負(fù)載類型以及 描述信息,確定大塊(chunk)的劃分方法,并為每個媒體軌創(chuàng)建一個媒體大塊(chunk)鏈表和 一個流化大塊(chunk)鏈表;
(2) 依次生成每個軌道的每個大塊(chunk),并且同步對應(yīng)生成所述視音頻流數(shù)據(jù)的媒 體軌道大塊(chunk)和流化軌道大塊(chunk);
(3) 所有軌道的所有大塊(chunk)生成完畢,完成整個媒體原子(mdat box)的寫入;
(4) 根據(jù)大塊(chunk)鏈表中的信息以及會話描述協(xié)議(sdp)中的信息,恢復(fù)電影原子 (moov box)信息,并寫入文件。
所述歩驟(1)中劃分大塊(chunk)的方法為按時間劃分或者按數(shù)據(jù)包的個數(shù)劃分。 所述歩驟(2)中生成媒體軌道大塊(chunk)和流化軌道大塊(chunk)的方法為復(fù)原媒
體軌道大塊(chunk)和流化軌道大塊(chunk)中所有采樣(sample)數(shù)據(jù)及其索引,包括如下歩
驟
(21) 確定每個大塊(chunk)中流化采樣(sample)邊界;
(22) 復(fù)原媒體采樣(sample),并生成媒體采樣(sample)數(shù)據(jù)和信息;
(23) 生成流化采樣(sample)數(shù)據(jù)和信息;
(24) 將流化采樣(sample)數(shù)據(jù)和信息寫入流化采樣(sample)鏈表;
(25) 將媒體采樣(sample)數(shù)據(jù)和信息寫入媒體采樣(sample)鏈表;
(26) 遍歷媒體采樣(sample)鏈表,寫入媒體大塊(chunk)中所有媒體采樣(sample)數(shù)據(jù), 生成一個完整的媒體大塊(chunk),本媒體大塊(chunk)加入所屬的媒體大塊(chunk)鏈表;
(27) 遍歷流化采樣(sample)鏈表,寫入流化大塊(chunk)中所有流化采樣(sample)數(shù)據(jù), 生成一個完整的流化大塊(chunk),本流化大塊(chunk)加入所屬的流化大塊(chunk)鏈表。
所述步驟(21)具體為以實(shí)時傳輸協(xié)議(RTP)數(shù)據(jù)包頭的標(biāo)志(mark)位置1作為流化采 樣(sample)的邊界或者把時戳發(fā)生跳轉(zhuǎn)也作為流化采樣(sample)的邊界。
所述歩驟(3)具體為計(jì)算各個軌道的時長,計(jì)算各個軌道數(shù)據(jù)的大小,計(jì)算所有數(shù)據(jù) 區(qū)的數(shù)據(jù)長度,更新媒體原子(mdat box)的長度字段,完成整個媒體原子(mdat box)的寫入。
所述步驟(4)中恢復(fù)電影原子(moov box)信息的方法為恢復(fù)采樣表(stbl)中必要的原 子(box),包括
采樣描述表(stsd),由解析會話描述協(xié)議包信息得到媒體軌的采樣描述表所需的信息; 時間采樣表(stts),根據(jù)大塊(chunk)結(jié)構(gòu)中媒體采樣(sample)鏈表或者流化采樣
(sample)鏈表中每個采樣節(jié)點(diǎn)中存儲的采樣時長得到;
采樣同步表(stss),根據(jù)大塊(chunk)結(jié)構(gòu)中媒體采樣(sa即le)鏈表或者流化采樣
(sample)鏈表中每個采樣節(jié)點(diǎn)中存儲的是否關(guān)鍵幀信息得到;
采樣大塊表(stsc),根據(jù)軌道中大塊(chunk)鏈表和大塊(chunk)結(jié)構(gòu)中媒體采樣
(sa即le)鏈表或者流化采樣(sample)鏈表中采樣節(jié)點(diǎn)時長來恢復(fù);
采樣大小表(stsz),根據(jù)大塊(chunk)結(jié)構(gòu)中媒體采樣(sample)鏈表或者流化采樣 (sample)鏈表中每個采樣節(jié)點(diǎn)中存儲的采樣大小得到;
大塊偏移表(stco/co64),根據(jù)各大塊(chunk)結(jié)構(gòu)中記錄的文件偏移量得到。 本發(fā)明通過獲取視音頻流數(shù)據(jù)的媒體軌數(shù)、各媒體軌ID,時標(biāo),負(fù)載類型以及描述信息, 輪流生成每個軌道的一個chunk,統(tǒng)一視音頻流數(shù)據(jù)的媒體軌道chunk和流化軌道chunk同 步生成;依次完成每個軌道的所有chunk,完成整個mdat box的寫入;根據(jù)內(nèi)存中保存的chunk 鏈表中的信息以及sdp中的信息,恢復(fù)moovbox信息,并寫入文件。能夠方便實(shí)現(xiàn)多媒體通 信中視音頻流數(shù)據(jù)的實(shí)時及非實(shí)時錄制,對于不同媒體格式的流數(shù)據(jù),僅需要根據(jù)媒體格式 修改復(fù)原sa即le部分,錄制生成的文件符合ISO基本媒體格式,既可以用于流媒體服務(wù)器進(jìn) 行流發(fā)送,也可以被終端和PC播放器做本地播放,方便了媒體文件的二次分發(fā)及多個系統(tǒng)之 間的互操作。該方法能夠快速的將視音頻流數(shù)據(jù)復(fù)原成ISO媒體文件,使流媒體服務(wù)器可以 實(shí)現(xiàn)直播錄制,使多媒體終端設(shè)備可以有效實(shí)現(xiàn)PVR。
圖1是本發(fā)明的視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件的方法流程圖2是復(fù)原媒體sa即le和流化sample子流程圖3是符合RFC3016的3個RTP包1個流化Sample對應(yīng)1個媒體sample的結(jié)構(gòu)圖; 圖4是符合RFC3640的1個RTP包1個流化Sample對應(yīng)3個媒體sample的結(jié)構(gòu)圖; 圖5是基于本發(fā)明的方法生成ISO媒體文件結(jié)構(gòu)示例圖。
具體實(shí)施例方式
本發(fā)明中的基于ISO媒體文件格式包含但不限于以下所列IS014496-14定義的MP4文件 格式,IS014496-15定義的AVC文件格式,3GPP TS26. 244定義的3GPP2文件格式。在本發(fā)明 中,將基于ISO媒體文件格式的文件統(tǒng)稱為"IS()媒體文件",提及的視音頻流數(shù)據(jù)特指通過 RTP (實(shí)時傳輸協(xié)議)傳輸?shù)囊曇纛l流數(shù)據(jù)。
通常ISO媒體文件由若干個box組成,以3GPP文件為例, 一個3GPP文件基于mpeg4由 若干個box(原子)組成,其中,最常見的有
文件格式ftyp box,相當(dāng)于文件頭,說明了文件所使用的協(xié)議版本等信息;
媒體原子mdatbox,存放了音頻、視頻和其他的數(shù)據(jù), 一般的文件至少有2個mdatbox,
一個用于音頻, 一個用于視頻,通常還會有一些文本信息也放在mdatbox中,各種信息的順序不固定,如果只是存放音樂一個mdat就夠用了;
電影原子moov box,是一個3GPP文件中最復(fù)雜最重要的文件,說明哪個mdat box中 存放視頻數(shù)據(jù),哪個mdat box中存放咅頻數(shù)據(jù)。
本發(fā)明的技術(shù)方案主要通過如下歩驟實(shí)現(xiàn)的,如圖1所示
(1) 創(chuàng)建待生成的媒體文件,寫入文件頭信息ftyp box,預(yù)留mdat類型和大小字段。
(2) 獲取視音頻流的媒體軌數(shù),各媒體軌ID、 TimeScale(時標(biāo))、負(fù)載類型以及描述信 息等,確定chunk (大塊)劃分方法(劃分chunk有多種方式,可以按時間,按包個數(shù)等方 式進(jìn)行劃分chunk,按時間劃分時,時間間隔可以是l秒),為每個媒體軌創(chuàng)建一個媒體chunk 鏈表和一個流化chunk鏈表。
(3) 依次生成每個軌道的每個chunk,統(tǒng)一視音頻流的媒體軌道chunk和流化軌道chunk 同步生成,每個chunk的基本組成單位為sample (采樣),生成chunk的過程即為復(fù)原chunk 中所有sample數(shù)據(jù)及其索引的過程;主要步驟如下
(3. 1)確定流化sample邊界;
一個流化sample包括幾個RTP數(shù)據(jù)包中,以mark位置1作為hint sample的邊界。(考 慮到網(wǎng)絡(luò)丟包的情況,把時戳發(fā)生跳轉(zhuǎn)也作為hint sample的邊界)。 一個Hint sample (流 化采樣)包括n個(n》l)RTP數(shù)據(jù)包。
(3. 2)復(fù)原媒體sa即le,并生成媒體sample數(shù)據(jù)和相關(guān)信息(時長,大小,是否關(guān)鍵幀 等)。根據(jù)具體媒體格式對應(yīng)的RTP負(fù)載格式定義標(biāo)準(zhǔn),從RTP (實(shí)時傳輸協(xié)議)數(shù)據(jù)包中復(fù) 原原始的媒體sample,并根據(jù)RTP Header和負(fù)載的相關(guān)定義生成媒體sample的索引;
(3. 3)生成流化sample數(shù)據(jù)和信息; 根據(jù)RTP負(fù)載格式定義,確定流化sample和媒體sample間映射關(guān)系。根據(jù)ISO媒體文 件格式標(biāo)準(zhǔn),生成流化sample數(shù)據(jù)和信息;
(3. 4)將流化sa即le數(shù)據(jù)和信息加入流化sample鏈表;
(3. 5)將媒體sample數(shù)據(jù)和信息加入媒體sample鏈表;
(3. 6)遍歷媒體sample鏈表,寫入chunk中所有媒體sample數(shù)據(jù),生成一個完整的 媒體chunk。本chunk加入所屬軌的媒體chunk鏈表;
(3. 7)遍歷流化sample鏈表,寫入chunk中所有流化sample數(shù)據(jù)。生成一個完整的 流化chunk。本流化chunk加入所屬軌的流化chunk鏈表;
(4) 計(jì)算各個軌道的時長,依次完成每個軌道的所有chunk,計(jì)算所有數(shù)據(jù)區(qū)的數(shù)據(jù)長 度,更新mdat box的長度字段,完成整個mdat box的寫入。
(5)根據(jù)內(nèi)存中保存的chunk鏈表中信息以及sdp (會話描述協(xié)議)中的信息,恢復(fù)moov box信息,并寫入文件。生成moov box的關(guān)鍵歩驟為恢復(fù)stbl(菜櫸表〉+必荽的box:
(5. 1) stsd (采樣描述表)解析sdp信息得到媒體軌的stsd所需信息。
(5. 2) stts (時間采樣表)根據(jù)chunk結(jié)構(gòu)中媒體sample鏈表或流化sample鏈表 中每個sa即le節(jié)點(diǎn)中存儲的sample時長得到。
(5. 3) stss (采樣同步表)根據(jù)chunk結(jié)構(gòu)中媒體sample鏈表或液化sample鏈表 中每個sample節(jié)點(diǎn)中存儲的是否關(guān)鍵幀信息得到。
(5. 4) stsc (采樣大塊表)根據(jù)軌道中chunk鏈表和chunk結(jié)構(gòu)中媒體sample鏈表 或流化sample鏈表中sample節(jié)點(diǎn)時長來恢復(fù)。
(5. 5) stsz (采樣大小表):根據(jù)chunk結(jié)構(gòu)中媒體sample鏈表或液化sa即le鏈表 中每個sa即le節(jié)點(diǎn)中存儲的sample大小得到。
(5. 6) stco/co64 (大塊偏移表)根據(jù)各chunk結(jié)構(gòu)中記錄的文件偏移量得到。 下面結(jié)合附圖以mpeg4視頻及AAC音頻RTP流復(fù)原產(chǎn)生MP4文件的詳細(xì)過程為例來詳細(xì) 描述本發(fā)明的技術(shù)方案的實(shí)施
mpeg4視頻及AAC音頻RTP (實(shí)時傳輸協(xié)議)流復(fù)原產(chǎn)生MP4文件的主要?dú)i驟包括 第一歩驟、創(chuàng)建目標(biāo)文件,寫文件類型描述ftyp box信息
對于MP4文件,major—brand定義為"isom,, , compatibale—brand定義為 "mp41"或 "mp42"。預(yù)留mdat原子類型和大小8字節(jié)。 第二歩驟、獲取視音頻流的描述信息
解析sdp信息,獲取mpeg4視頻流和AAC音頻的描述信息(流類型,profile-level id,采 樣頻率等)。按時間間隔1秒劃分chunk。
第三歩驟、獲取即eg4視頻流數(shù)據(jù),生成mpeg4視頻軌的一個chunk,每個chunk的基本 組成單位為sample,生成chunk的過程即為復(fù)原chunk中所有sample數(shù)據(jù)及其索引的過程, 生成chunk的過程如下
初始化媒體sa即le鏈表和流化sample鏈表。
復(fù)原媒體sample和流化sample (見圖2),重復(fù)下面1一5步驟,直到chunk結(jié)束
1.確定流化sample的邊界 一個流化sample包括在幾個RTP數(shù)據(jù)包中,以mark位置
1作為流化sample的邊界(考慮到網(wǎng)絡(luò)丟包的情況,把時戳發(fā)生跳轉(zhuǎn)也作為hint sample的 邊界)。 一個hint sample包括n個(n〉=l) RTP數(shù)據(jù)包。
對于mpeg4視頻來說,根據(jù)RTP包頭的mark位確定目前處理的流化sample包括3個RTP 數(shù)據(jù)包。
2. 復(fù)原媒體sample,確定媒體sample的邊界,并生成媒體sample數(shù)據(jù)和相關(guān)信息(時 長,大小,是否關(guān)鍵幀等)。根據(jù)具體媒體格式對應(yīng)的RTP負(fù)載格式定義標(biāo)準(zhǔn),從RTP數(shù)據(jù)包 中復(fù)原原始的媒體sample,并根據(jù)RTP Header和負(fù)載的相關(guān)定義生成媒體sa卿le的索引;
對于mpeg4視頻來說按照RFC3016,確定本流化sample對應(yīng)有1個媒體sa卿le,其內(nèi) 容為上述1中所確定的3個RTP包凈荷首尾相連,記為PI-P2-P3,長度為Ll+L2+L3。
3. 生成流化sample數(shù)據(jù)和信息根據(jù)RTP負(fù)載格式定義,確定流化sample和媒體sample 間映射關(guān)系,根據(jù)ISO媒體文件格式標(biāo)準(zhǔn),生成流化sample數(shù)據(jù)和信息;
對于mpeg4視頻來說生成的流化sample有3個RTP包,每個RTP包的負(fù)載數(shù)據(jù)有一個入口 第1個RTP負(fù)載數(shù)據(jù)入口從媒體sample的數(shù)據(jù)O開始,長度為Ll。 第2個RTP負(fù)載數(shù)據(jù)入口從媒體sample的數(shù)據(jù)LI開始,長度為L2。 第3個RTP負(fù)載數(shù)據(jù)入口從媒體sa即le的數(shù)據(jù)(Ll+L2)開始,長度為L3。 流化sample、媒體sample及RTP包的對應(yīng)關(guān)系見圖3。
4. 將本流化sample數(shù)據(jù)和信息加入流化sample鏈表。
5. 將本媒體sa即le數(shù)據(jù)和信息加入媒體sample鏈表。
6. 遍歷媒體sample鏈表,寫入chunk中所有媒體sa即le數(shù)據(jù),生成一個完整的媒體chunk, 本chunk加入所屬軌的媒體chunk鏈表。
7. 遍歷流化sample鏈表,寫入chunk中所有流化sample數(shù)據(jù),生成一個完整的流化chunk, 本chunk加入所屬軌的流化chunk鏈表。
第四歩驟、獲取AAC音頻流數(shù)據(jù),生成AAC音頻軌的一個chunk。 初始化媒體sample鏈表和流化sample鏈表。 重復(fù)下述子過程A—E直到chunk結(jié)束
A. 確定流化sa即le的邊界
根據(jù)RTP包頭的mark (標(biāo)志)位確定目前處理的流化sample包括1個RTP數(shù)據(jù)包。
B. 確定媒體sample的邊界,生成媒體sample數(shù)據(jù)
按照RFC3640中的流化標(biāo)準(zhǔn),確定本流化sa即le對應(yīng)有3個媒體sample,分別為 Pl, P2, P3。
C. 生成流化sample數(shù)據(jù)
生成的流化sample有1個RTP包,RTP包的負(fù)載數(shù)據(jù)至少有4個入口 。 入口 1:保存琉化信息,包括AlffleaderUn和毎個AUHeader。(這個入口可能有多個,裉 據(jù)流化信息的長度而定,每個入口最多只能保存14個字節(jié))
入口2:從媒體sa即le(AUl的序號)的數(shù)據(jù)O開始,長度為AU1的采樣數(shù)據(jù)長度。 入口3:從媒體sample(AU2的序號)的數(shù)據(jù)0開始,長度為AU2的采樣數(shù)據(jù)長度。 入口4:從媒體sample(AU3的序號)的數(shù)據(jù)0丌始,長度為AU3的采樣數(shù)據(jù)長度。 流化sample、媒體sample及RTP包的對應(yīng)關(guān)系見圖4。
D. 將本流化sample信息加入流化sample鏈表。
E. 將連續(xù)3個媒體sa即le信息加入媒體sample鏈表。
F. 遍歷媒體sample鏈表,寫入chunk中所有媒體sample數(shù)據(jù)。
G. 遍歷流化sample鏈表,寫入chunk中所有流化sample數(shù)據(jù)。 第五歩驟、重復(fù)第三步驟和第四歩驟直到轉(zhuǎn)換完成或收到停止轉(zhuǎn)換消息。
第六歩驟、依次完成每個軌道的所有chunk,完成整個mdat box的寫入計(jì)算每個軌道 數(shù)據(jù)大小,修改mdat box的長度字段。
第七歩驟、根據(jù)內(nèi)存中保存的chunk鏈表中信息以及sdp中的信息,恢復(fù)moov box信息, 并寫入文件。參照IS014496-14標(biāo)準(zhǔn)和技術(shù)方案第四歩驟中所述方法,生成moov box中必要 的部分,寫入文件尾部。moov box中必要的box包括
stsd:解析sdp信息得到媒體軌的stsd所需信息。
sUs:根據(jù)chunk結(jié)構(gòu)中媒體sample鏈表或流化sample鏈表中每個sample節(jié)點(diǎn)中存 儲的sample時長得到。
stss:根據(jù)chunk結(jié)構(gòu)中媒體sample鏈表或液化sample鏈表中每個sample節(jié)點(diǎn)中存
儲的是否關(guān)鍵幀信息得到。
stsc:根據(jù)軌道中chunk鏈表和chunk結(jié)構(gòu)中媒體sample鏈表或流化sample鏈表中 sa即le節(jié)點(diǎn)時長來恢復(fù)。
stsz:根據(jù)chunk結(jié)構(gòu)中媒體sample鏈表或液化sample鏈表中每個sample節(jié)點(diǎn)中存 儲的sample大小得到。
stco/co64:根據(jù)各chunk結(jié)構(gòu)中記錄的文件偏移量得到。
采用本發(fā)明所述方法,能方便的實(shí)現(xiàn)多媒體通信中視音頻流數(shù)據(jù)的實(shí)時及非實(shí)時錄制,
對于不同媒體格式的流數(shù)據(jù),僅需要根據(jù)媒體格式修改復(fù)原sample部分。錄制生成的文件符 合ISO基本媒體文件格式,既可以用于流媒體服務(wù)器進(jìn)行流發(fā)送,也可以被終端和PC播放器 軟件做本地播放,方便了媒體文件的二次分發(fā)及多個系統(tǒng)之問的互操作。該方法能夠快速的 將視音頻流數(shù)據(jù)復(fù)原成ISO媒體文件,使流媒體服務(wù)器可以實(shí)現(xiàn)直播錄制,使多媒體終端設(shè) 備可以有效實(shí)現(xiàn)PVR。
權(quán)利要求
1、視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件的方法,包括如下步驟(1)獲取視音頻流數(shù)據(jù)的媒體軌數(shù)、各媒體軌標(biāo)識、時標(biāo)、負(fù)載類型以及描述信息,確定大塊的劃分方法,并為每個媒體軌創(chuàng)建一個媒體大塊鏈表和一個流化大塊鏈表;(2)依次生成每個軌道的每個大塊,并且同步對應(yīng)生成所述視音頻流數(shù)據(jù)的媒體軌道大塊和流化軌道大塊;(3)所有軌道的所有大塊生成完畢,完成整個媒體原子的寫入;(4)根據(jù)大塊鏈表中的信息以及會話描述協(xié)議中的信息,恢復(fù)電影原子信息,并寫入文件。
2、 根據(jù)權(quán)利要求1所述的視音頻流數(shù)據(jù)恢復(fù)IS0媒體文件的方法,其特征在于,所述歩 驟(1)中劃分大塊的方法為按時間劃分或者按數(shù)據(jù)包的個數(shù)劃分。
3、 根據(jù)權(quán)利要求1或2所述的視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件的方法,其特征在于,所述步驟(2)中生成媒體軌道大塊和流化軌道大塊的方法為復(fù)原媒體軌道大塊和流化軌道 大塊中所有采樣數(shù)據(jù)及其索引,包括如下步驟(21) 確定每個大塊中流化采樣邊界;(22) 復(fù)原媒體采樣,并生成媒體采樣數(shù)據(jù)和信息;(23) 生成流化采樣數(shù)據(jù)和信息;(24) 將流化采樣數(shù)據(jù)和信息寫入流化采樣鏈表;(25) 將媒體采樣數(shù)據(jù)和信息寫入媒體采樣鏈表;(26) 遍歷媒體采樣鏈表,寫入媒體大塊中所有媒體采樣數(shù)據(jù),生成一個完整的媒體大 塊,本媒體大塊加入所屬的媒體大塊鏈表;(27) 遍歷流化釆樣鏈表,寫入流化大塊中所有流化采樣數(shù)據(jù),生成一個完整的流化大 塊,本流化大塊加入所屬的流化大塊鏈表。
4、 根據(jù)權(quán)利要求3所述的視音頻流數(shù)據(jù)恢復(fù)IS0媒體文件的方法,其特征在于,所述歩 驟(21)具體為以實(shí)時傳輸協(xié)議數(shù)據(jù)包頭的標(biāo)志位置1作為流化采樣的邊界或者把時戳發(fā) 生跳轉(zhuǎn)也作為流化采樣的邊界。
5、 根據(jù)權(quán)利要求4所述的視音頻流數(shù)據(jù)恢復(fù)IS0媒體文件的方法,其特征在于,所述歩 驟(3)具體為計(jì)算各個軌道的時長,計(jì)算各個軌道數(shù)據(jù)的大小,計(jì)算所有數(shù)據(jù)區(qū)的數(shù)據(jù)長 度,更新媒體原子的長度字段,完成整個媒體原子的寫入。
6、 根據(jù)權(quán)利要求1所述的視音頻流數(shù)據(jù)恢復(fù)IS0媒體文件的方法,其特征在于,所述步 驟(4)中恢復(fù)電影原子信息的方法為恢復(fù)采樣表中必要的原子,包括采樣描述表,由解析會話描述協(xié)議包信息得到媒體軌的采樣描述表所需的信息; 時間菜樣表,根據(jù)大塊結(jié)構(gòu)中媒休菜樣鏈表或著琉化菜櫸鍵表+毎個菜櫸節(jié)點(diǎn)+薦^的采樣時長得到;采樣同歩表,根據(jù)大塊結(jié)構(gòu)中媒體采樣鏈表或者流化采樣鏈表中每個采樣節(jié)點(diǎn)中存儲的 是否關(guān)鍵幀信息得到;采樣大塊表,根據(jù)軌道中大塊鏈表和大塊結(jié)構(gòu)中媒體采樣鏈表或者流化采樣鏈表中采樣 節(jié)點(diǎn)時長來恢復(fù);采樣大小表,根據(jù)大塊結(jié)構(gòu)中媒體采樣鏈表或者流化采樣鏈表中每個采樣節(jié)點(diǎn)中存儲的 采樣大小得到;大塊偏移表,根據(jù)各大塊結(jié)構(gòu)中記錄的文件偏移量得到。
全文摘要
本發(fā)明公開一種視音頻流數(shù)據(jù)恢復(fù)ISO媒體文件的方法,涉及文件格式轉(zhuǎn)換,為解決私有格式文件無法在本地播放且在無法在多個廠商之間交換使用的問題而發(fā)明。本發(fā)明通過獲取視音頻流數(shù)據(jù)的媒體軌數(shù)、各媒體軌ID、時標(biāo)、負(fù)載類型,確定大塊劃分方法,為每個媒體軌創(chuàng)建一個媒體大塊鏈表和一個流化大塊鏈表;依次生成每個軌道的每個大塊,且同步對應(yīng)生成所述視音頻流數(shù)據(jù)的媒體軌道大塊和流化軌道大塊;所有軌道的所有大塊生成完畢,完成整個媒體原子的寫入;根據(jù)大塊鏈表中的信息以及會話描述協(xié)議包中的信息,恢復(fù)電影原子信息并寫入文件。實(shí)現(xiàn)私有格式文件到ISO標(biāo)準(zhǔn)格式文件的轉(zhuǎn)換。
文檔編號H04N7/24GK101202899SQ20061016580
公開日2008年6月18日 申請日期2006年12月12日 優(yōu)先權(quán)日2006年12月12日
發(fā)明者王志英, 阮亞平 申請人:中興通訊股份有限公司