專利名稱:多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多媒體文件中音視頻數(shù)據(jù)的處理技術(shù),特點(diǎn)涉及ー種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法及裝置。
背景技術(shù):
隨著播放技術(shù)的提高,出現(xiàn)了多線程媒體播放器,圖I為現(xiàn)有技術(shù)提供的多線程媒體播放器結(jié)構(gòu)示意圖,包括解復(fù)用線程模塊、視頻解碼線程模塊、視頻播放線程模塊、音頻解碼線程模塊、音頻播放線程模塊及共享控制模塊,其中,共享控制模塊分別與其他線程模塊交互,控制其他線程模塊對多媒體文件整個的解復(fù)用、解碼及播放過程。當(dāng)解復(fù)用線程模塊接收到多媒體文件時,這個多媒體文件的格式可以為AVI、MP4、3GP、WMV或MKV,這個多媒體文件緩存多個數(shù)據(jù)幀,這些數(shù)據(jù)幀可以為音頻數(shù)據(jù)幀,也可以·為視頻數(shù)據(jù)幀,這些音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的緩存順序與解碼順序并相同,所以需要進(jìn)行解復(fù)用,使得解復(fù)用后的多媒體文件中數(shù)據(jù)幀的緩存順序與解碼順序相同。因此,在共享控制模塊的控制下對多媒體文件進(jìn)行解復(fù)用,輸出原始流音視頻幀隊(duì)列,其中包括按照音視解碼順序重新順序排列的音頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀。在共享控制模塊的控制下由視頻解碼線程模塊對原始流音視頻幀隊(duì)列中的音頻數(shù)據(jù)幀進(jìn)行解碼得到諸如格式為YUV或RGB等的視頻幀播放隊(duì)列,發(fā)送給視頻播放線程模塊,視頻播放線程模塊在共享控制模塊的控制下,將視頻幀播放隊(duì)列進(jìn)行視頻播放。在共享控制模塊的控制下由音頻解碼線程模塊對原始流音視頻幀隊(duì)列中的視頻數(shù)據(jù)幀進(jìn)行解碼得到諸如PCM格式的音頻幀播放隊(duì)列,發(fā)送給音頻播放線程模塊。音頻播放線程模塊在共享控制模塊的控制下將該音頻幀播放隊(duì)列播放。在上述過程中,解復(fù)用線程模塊的作用就是根據(jù)多媒體文件中的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的解碼時間戳對多媒體文件中的音頻數(shù)據(jù)幀或時頻數(shù)據(jù)幀重新順序排列,得到原始流音視頻幀隊(duì)列用于后續(xù)的音視頻數(shù)據(jù)解碼及播放,保證解碼及播放的同步性。對于解復(fù)用線程模塊接收到的多媒體文件,可以以交織的形式或非交織的形式緩存音頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀,所緩存的音頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀都標(biāo)識有解碼時間戳。在多媒體文件中,還可以攜帯或不攜帶索引,該索引標(biāo)識了每個數(shù)據(jù)幀的字節(jié)偏移位置及大小,用于在多媒體文件中定位每個數(shù)據(jù)幀。當(dāng)多媒體文件不攜帶索引吋,則無論多媒體文件中的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀是否交織,完全按照每一音頻數(shù)據(jù)幀或每一視頻數(shù)據(jù)幀在多媒體文件中的緩存順序由前至后進(jìn)行解復(fù)用,得到原始流音視頻幀隊(duì)列。當(dāng)多媒體文件攜帯有索引時,根據(jù)索引確定每一音頻數(shù)據(jù)幀或每一視頻數(shù)據(jù)幀在多媒體文件中的位置,按照解碼時間戳從小到大順序,對多媒體文件中的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的緩存位置進(jìn)行跳轉(zhuǎn),得到按照解碼時間戳從小到大順序排列的原始流音視頻幀隊(duì)列。圖2為現(xiàn)有技術(shù)在多媒體文件攜帯有索引時,將多媒體文件解復(fù)用為原始流音視頻幀隊(duì)列的過程示意圖,如圖2的最上一行所示,多媒體文件緩存的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的順序?yàn)橐曨l數(shù)據(jù)幀VI、視頻數(shù)據(jù)幀V2、視頻數(shù)據(jù)幀V3、....、音頻數(shù)據(jù)幀Al、音頻數(shù)據(jù)幀A2、音頻數(shù)據(jù)幀A3、...,也就是沒有將音頻數(shù)據(jù)幀與視頻數(shù)據(jù)幀交織緩存,并且每ー視頻數(shù)據(jù)幀的持續(xù)時間為40毫秒,每一音頻數(shù)據(jù)幀的持續(xù)時間為20毫秒,則視頻數(shù)據(jù)幀的解碼時間戳依次為0、40、80、120、· ·.,音頻數(shù)據(jù)幀的解碼時間戳依次為0、20、40、60、· ·.。。這時,在復(fù)用時,就需要根據(jù)索引,按照解碼時間戳從小到大順序,對多媒體文件中的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的緩存位置進(jìn)行跳轉(zhuǎn),得到按照解碼時間戳從小到大順序排列的原始流音視頻幀隊(duì)列,如圖2中第二行所示。得到的原始流音視頻幀隊(duì)列為視頻數(shù)據(jù)幀VI、音頻數(shù)據(jù)幀Al、音頻數(shù)據(jù)幀A2、視頻數(shù)據(jù)幀V2、音頻數(shù)據(jù)幀A3、音頻數(shù)據(jù)幀A4、視頻數(shù)據(jù)幀V3、音頻數(shù)據(jù)幀A5、音頻數(shù)據(jù)幀A6、視頻數(shù)據(jù)幀V4、音頻數(shù)據(jù)幀A7、音頻數(shù)據(jù)幀A8、...。在圖2中,還標(biāo)識了為得到原始流音視頻幀隊(duì)列而在多媒體文件中發(fā)生的跳轉(zhuǎn),可以看出, 對于非交織緩存數(shù)據(jù)幀的多媒體文件,或者交織緩存數(shù)據(jù)幀,但沒有按照解碼時間戳緩存數(shù)據(jù)幀的多媒體文件,經(jīng)過很多次跳轉(zhuǎn)才解復(fù)用得到原始流音視頻幀隊(duì)列。在對多媒體文件的解復(fù)用過程中,這種過多的索引定位及跳轉(zhuǎn)操作,尤其是頻繁地前后移動多媒體文件的讀指針進(jìn)行索引定位,會造成解復(fù)用速度變慢,效率下降。特別對遠(yuǎn)程的多媒體文件解復(fù)用時,會造成多線程媒體播放器所在客戶端的網(wǎng)絡(luò)負(fù)荷,甚至?xí)绊懞罄m(xù)對原始流音視頻幀隊(duì)列的解碼及后續(xù)正常播放。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供ー種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法,該方法能夠提高多媒體文件的解復(fù)用效率。本發(fā)明還提供ー種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用裝置,該裝置能夠提高多媒體文件的解復(fù)用效率。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的ー種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法,該方法包括根據(jù)設(shè)置的最長同步時間,設(shè)置并更新最長同步時間點(diǎn);根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀;根據(jù)所選擇的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。所述最長同步時間的設(shè)定依據(jù)解復(fù)用后得到的原始流音視頻幀隊(duì)列所緩存的數(shù)據(jù)幀最大個數(shù)大于所設(shè)置的最長同步時間內(nèi)所包含的數(shù)據(jù)幀個數(shù)的原則設(shè)置。設(shè)置并更新最長同步時間點(diǎn)的過程為al,將多媒體文件中的第一數(shù)據(jù)幀的解碼時間戳設(shè)置為當(dāng)前同步時間點(diǎn),將該當(dāng)前同步時間點(diǎn)與最長同步時間之和作為最長同步時間點(diǎn);bl,按照多媒體文件中數(shù)據(jù)幀的緩存順序,比較每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與最長同步時間點(diǎn);Cl,如果所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳都大于等于該最長同步時間點(diǎn),則更新最長同步時間點(diǎn),更新為當(dāng)前所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀中字節(jié)位置最靠前的數(shù)據(jù)幀的解碼時間戳,將該當(dāng)前同步時間點(diǎn)與最長同步時間之和作為最長同步時間點(diǎn),轉(zhuǎn)入步驟b I繼續(xù)執(zhí)行;所述每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀在初始時為每一路數(shù)據(jù)幀中第一數(shù)據(jù)幀,后續(xù)如果一路數(shù)據(jù)幀中有當(dāng)前據(jù)幀被作為輸出數(shù)據(jù)幀輸出,則當(dāng)前數(shù)據(jù)幀修改為下ー數(shù)據(jù)幀。所述選擇可輸出數(shù)據(jù)幀的過程為a2、按照多媒體文件中數(shù)據(jù)幀的緩存順序,比較每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與最長同步時間點(diǎn),如果小于,將該數(shù)據(jù)幀標(biāo)識為該路數(shù)據(jù)幀的待選幀;如果大于等于,該路數(shù)據(jù)巾貞的待選巾貞為空;b2、判斷多媒體文件中的所有路數(shù)據(jù)幀中的待選幀是否為空,如果否,比較多媒體文件中所有路數(shù)據(jù)幀的待選幀的字節(jié)偏移位置值,將最小所在的待選幀作為輸出數(shù)據(jù)幀輸出;如果是,比較多媒體文件中所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的字節(jié)偏移位置值,將最小一幀作為輸出數(shù)據(jù)幀輸出; c2、將輸出數(shù)據(jù)幀所在的一路數(shù)據(jù)幀當(dāng)前數(shù)據(jù)幀更新為下ー數(shù)據(jù)幀,轉(zhuǎn)入a2 c2繼續(xù)執(zhí)行,得到選擇的可輸出數(shù)據(jù)幀。所述讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列的過程為a3、獲取該輸出數(shù)據(jù)幀在多媒體文件中的字節(jié)偏移位置值,所述字節(jié)偏移位置值包括字節(jié)偏移位置和所包含的字節(jié)數(shù);b3、比較上一次輸出數(shù)據(jù)幀的字節(jié)偏移位置與所包含的字節(jié)數(shù)之和是否等于當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置與所包含的字節(jié)數(shù)之和,如果是,則不移動多媒體文件的讀指針;如果否,則進(jìn)行多媒體文件的捜索定位,將多媒體文件的讀指針移動到當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置;c3、從多媒體文件的讀指針?biāo)谖恢米x取當(dāng)前輸出數(shù)據(jù)幀,讀取數(shù)據(jù)的大小為當(dāng)前輸出數(shù)據(jù)幀所包含的字節(jié)數(shù),然后輸出;d3、記錄當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置及所包含的字節(jié)數(shù),作為上一次輸出數(shù)據(jù)幀,將下ー輸出數(shù)據(jù)幀作為當(dāng)前輸出數(shù)據(jù)幀,轉(zhuǎn)入步驟a3 b3繼續(xù)執(zhí)行,得到原始流音視頻幀隊(duì)列。ー種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用裝置,該裝置包括設(shè)置單元、比較單元及輸出單元,其中,設(shè)置單元,用于根據(jù)設(shè)置的最長同步時間,設(shè)置并更新最長同步時間點(diǎn);比較單元,用于根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與從設(shè)置単元所獲取的最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀,發(fā)送給輸出単元;輸出單元,用于根據(jù)從比較単元接收的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。從上述方案可以看出,本發(fā)明利用解復(fù)用的多媒體文件在解碼時采用先進(jìn)先出的方式緩存多個數(shù)據(jù)幀的技術(shù)特征,在解復(fù)用多媒體文件時得到的數(shù)據(jù)幀的緩存順序與解碼順序可以不相同,保證在當(dāng)前緩存的數(shù)據(jù)幀中的最后ー數(shù)據(jù)幀的時間戳小于等于第一數(shù)據(jù)幀的時間戳與所設(shè)定緩存多個數(shù)據(jù)幀的緩存時間之和,這樣,就可以保證在后續(xù)解碼過程中,從當(dāng)前所緩存的數(shù)據(jù)幀中找到要解碼的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀了,保證解碼的同步性能?;诖嗽恚景l(fā)明設(shè)置最長同步時間,該最長同步時間內(nèi)所緩存的數(shù)據(jù)幀個數(shù)小于等于解復(fù)用所緩存數(shù)據(jù)幀個數(shù),根據(jù)所設(shè)置的最長同步時間及多媒體文件中各路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳實(shí)時更新最長同步時間點(diǎn),根據(jù)多媒體文件各路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與該最長同步時間點(diǎn)比較的結(jié)果,結(jié)合索引中的字節(jié)偏移位置值,選擇得到輸出當(dāng)前數(shù)據(jù)幀,根據(jù)輸當(dāng)前數(shù)據(jù)幀,按照索引中該數(shù)據(jù)幀在多媒體文件中的偏移值進(jìn)行跳轉(zhuǎn),最終得到原始流音視頻幀隊(duì)列。這樣,就減少了多媒體文件在轉(zhuǎn)換為原始流音視頻幀隊(duì)列時的索引定位及跳轉(zhuǎn)次數(shù)。因此,本發(fā)明提供的方法及裝置可以提高多媒體文件的解復(fù)用效率。
圖I為現(xiàn)有技術(shù)提供的多線程媒體播放器;圖2為現(xiàn)有技術(shù)在多媒體文件攜帯有索引時,將多媒體文件解復(fù)用為原始流音視頻幀隊(duì)列的過程示意圖;
圖3為本發(fā)明提供的多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法流程圖;圖4為本發(fā)明提供的多媒體文件中音視頻數(shù)據(jù)的解復(fù)用裝置結(jié)構(gòu)示意圖;圖5為本發(fā)明提供的多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法實(shí)施例一流程圖;圖6為本發(fā)明在多媒體文件攜帯有索引時,將多媒體文件解復(fù)用為原始流音視頻幀隊(duì)列的過程示意圖;圖7為本發(fā)明在多媒體文件攜帯有索引時,將多媒體文件解復(fù)用為原始流音視頻幀隊(duì)列ニ的過程示意圖;圖8為采用本發(fā)明提供的方法與采用現(xiàn)有技術(shù)的方法對多媒體文件進(jìn)行解復(fù)用的效率對比示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對本發(fā)明作進(jìn)ー步詳細(xì)說明。從現(xiàn)有技術(shù)可以看出,對于非交織緩存數(shù)據(jù)幀的多媒體文件,或者交織緩存數(shù)據(jù)幀,但沒有按照解碼時間戳緩存數(shù)據(jù)幀的多媒體文件,經(jīng)過很多次跳轉(zhuǎn)才解復(fù)用得到原始流音視頻幀隊(duì)列的原因?yàn)橐凑战獯a時間戳從小到大順序排列多媒體文件中的數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列,這樣得到的原始流音視頻幀隊(duì)列與沒有復(fù)用的多媒體文件相比,會進(jìn)行過多次的索引定位及跳轉(zhuǎn)操作,這就會造成解復(fù)用速度變慢,效率下降。為了克服上述問題,本發(fā)明利用解復(fù)用的多媒體文件在解碼時采用先進(jìn)先出的方式緩存多個數(shù)據(jù)幀的技術(shù)特征,在解復(fù)用多媒體文件時得到的數(shù)據(jù)幀的緩存順序與解碼順序可以不相同,保證在當(dāng)前緩存的數(shù)據(jù)幀中的最后ー數(shù)據(jù)幀的時間戳小于等于第一數(shù)據(jù)幀的時間戳與所設(shè)定緩存多個數(shù)據(jù)幀的緩存時間之和,這樣,就可以保證在后續(xù)解碼過程中,從當(dāng)前所緩存的數(shù)據(jù)幀中找到要解碼的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀了,保證解碼的同步性倉^:。在多媒體文件中所緩存的數(shù)據(jù)幀包括音頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀,緩存方式常常為幾個視頻數(shù)據(jù)幀后,再緩存幾個音頻數(shù)據(jù)幀,然后依次進(jìn)行,或者先緩存幾個音頻數(shù)據(jù)幀后,再緩存幾個視頻數(shù)據(jù)幀。為了便于描述,這里將緩存在一起的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀稱為一路數(shù)據(jù)幀,比如一路音頻數(shù)據(jù)幀或一路視頻數(shù)據(jù)幀,在多媒體文件中存在多路音頻數(shù)據(jù)幀和多路視頻數(shù)據(jù)幀,這里通稱為多路數(shù)據(jù)幀。圖3為本發(fā)明提供的多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法流程圖,其具體步驟為步驟301、根據(jù)設(shè)置的最長 同步時間,設(shè)置并更新最長同步時間點(diǎn);在該步驟中,所設(shè)置的最長同步時間為所設(shè)定的從多媒體文件中可順序讀取數(shù)據(jù)幀的最長同步時間,該最長同步時間根據(jù)多線程媒體播放器的配置而配置,設(shè)置原則為解復(fù)用后得到的原始流音視頻幀隊(duì)列所緩存的數(shù)據(jù)幀最大個數(shù)大于所設(shè)置的最長同步時間內(nèi)所包含的數(shù)據(jù)幀個數(shù);實(shí)時更新所設(shè)置的最長同步時間點(diǎn)的過程為步驟一,將多媒體文件中的第一數(shù)據(jù)幀的解碼時間戳設(shè)置為當(dāng)前同步時間點(diǎn),將該當(dāng)前同步時間點(diǎn)與最長同步時間之和作為最長同步時間點(diǎn);步驟ニ,按照多媒體文件中數(shù)據(jù)幀的緩存順序,比較每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與最長同步時間點(diǎn);步驟三,如果所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳都大于等于該最長同步時間點(diǎn),則更新最長同步時間點(diǎn),更新為當(dāng)前所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀中字節(jié)位置最靠前的數(shù)據(jù)幀的解碼時間戳,將該當(dāng)前同步時間點(diǎn)與最長同步時間之和作為最長同步時間點(diǎn),轉(zhuǎn)入步驟ニ繼續(xù)執(zhí)行。在初始時,每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀為每一路數(shù)據(jù)幀中第一數(shù)據(jù)幀,如果一路數(shù)據(jù)幀中有當(dāng)前據(jù)幀被作為輸出數(shù)據(jù)幀輸出,則當(dāng)前數(shù)據(jù)幀修改為下ー數(shù)據(jù)幀。步驟302、根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀。步驟303、根據(jù)所選擇的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。在圖3的過程中,所述步驟302的具體過程為步驟3021、按照多媒體文件中數(shù)據(jù)幀的緩存順序,比較每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與最長同步時間點(diǎn),如果小于,則轉(zhuǎn)入步驟3022執(zhí)行;如果大于等于,則轉(zhuǎn)入步驟3023執(zhí)行;步驟3022、將該數(shù)據(jù)幀標(biāo)識為該路數(shù)據(jù)幀的待選幀,轉(zhuǎn)入步驟3024執(zhí)行;步驟3023、該路數(shù)據(jù)幀的待選幀為空,轉(zhuǎn)入步驟3024執(zhí)行;步驟3024、判斷多媒體文件中的所有路數(shù)據(jù)幀中的待選幀是否為空,如果否,則執(zhí)行步驟3025 ;如果是,則執(zhí)行步驟3026 ;步驟3025、比較多媒體文件中所有路數(shù)據(jù)幀的待選幀的字節(jié)偏移位置值,將最小所在的待選幀作為輸出數(shù)據(jù)幀輸出,執(zhí)行步驟3027 ;步驟3026、比較多媒體文件中所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的字節(jié)偏移位置值,將最小一幀作為輸出數(shù)據(jù)幀輸出,執(zhí)行步驟3027 ;步驟3027、將輸出數(shù)據(jù)幀所在的一路數(shù)據(jù)幀當(dāng)前數(shù)據(jù)幀更新為下ー數(shù)據(jù)幀,也就是將輸出數(shù)據(jù)幀所在的一路數(shù)據(jù)幀當(dāng)前數(shù)據(jù)幀的幀號遞加I,轉(zhuǎn)入步驟3021 步驟3027繼續(xù)執(zhí)行。在圖3中,所述步驟303的具體過程為步驟3031、獲取當(dāng)前輸出數(shù)據(jù)幀在多媒體文件中的字節(jié)偏移位置值;在該步驟中,多媒體文件攜帯有索引,在索引中指出了多媒體文件中每ー數(shù)據(jù)幀的字節(jié)偏移位置及所包含的字節(jié)數(shù),稱為字節(jié)偏移位置值,根據(jù)索引就可以得到;步驟3032、比較上一次輸出數(shù)據(jù)幀的字節(jié)偏移位置與所包含的字節(jié)數(shù)之和是否等于當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置與所包含的字節(jié)數(shù)之和,如果是,則不移動多媒體文件的讀指針;如果否,則進(jìn)行多媒體文件的捜索定位,將多媒體文件的讀指針移動到當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置; 步驟3033、從多媒體文件的讀指針?biāo)谖恢米x取當(dāng)前輸出數(shù)據(jù)幀,讀取數(shù)據(jù)的大小為當(dāng)前輸出數(shù)據(jù)幀所包含的字節(jié)數(shù),然后輸出;步驟3034、記錄當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置及所包含的字節(jié)數(shù),作為上一次輸出數(shù)據(jù)幀,將下ー輸出數(shù)據(jù)幀作為當(dāng)前輸出數(shù)據(jù)幀,轉(zhuǎn)入步驟3031 3034繼續(xù)執(zhí)行,最終得到原始流音視頻幀隊(duì)列。圖4為本發(fā)明提供的多媒體文件中音視頻數(shù)據(jù)的解復(fù)用裝置結(jié)構(gòu)示意圖,包括設(shè)置單元、比較單元及輸出單元,其中,設(shè)置單元,用于根據(jù)設(shè)置的最長同步時間,設(shè)置并更新最長同步時間點(diǎn);比較單元,用于根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與從設(shè)置単元所獲取的最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀,發(fā)送給輸出単元;輸出單元,用于根據(jù)從比較単元接收的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。舉ー個具體實(shí)例對本發(fā)明提供的方法進(jìn)行詳細(xì)說明圖5為本發(fā)明提供的多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法實(shí)施例一流程圖,其具體步驟為步驟501、多線程媒體播放器讀取多媒體文件,解析其中的索引及每一路數(shù)據(jù)幀的頭信息,初始化所有變量;步驟502、多線程媒體播放器設(shè)置最長同步時間Tsyn。;步驟503、設(shè)置每路數(shù)據(jù)幀中的當(dāng)前數(shù)據(jù)幀為各路數(shù)據(jù)幀的第一數(shù)據(jù)幀;在該步驟中,采用用i表示所有路數(shù)據(jù)幀中第i路數(shù)據(jù)幀,i = 1,2,3...;步驟504、設(shè)置當(dāng)前同步時間點(diǎn)T·為所有路數(shù)據(jù)幀的當(dāng)前數(shù)據(jù)幀中字節(jié)偏移位置最小ー幀的解碼時間戳DTS ;步驟505、計(jì)算當(dāng)前最長同步時間點(diǎn)Tmax = Tsync+Tcur ;步驟506、將每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳DTSiem與當(dāng)前最長同步時間點(diǎn)Tmax進(jìn)行比較,若DTSし彡Tfflax,則將該數(shù)據(jù)幀標(biāo)識為第i路數(shù)據(jù)幀的待選數(shù)據(jù)幀;否貝1J,第i路數(shù)據(jù)幀的待選數(shù)據(jù)幀為空;步驟507、比較所有路數(shù)據(jù)幀中不為空的待選數(shù)據(jù)幀的字節(jié)偏移位置值,最小者所在的一數(shù)據(jù)幀為當(dāng)前輸出數(shù)據(jù)幀;
步驟508、如果每一路數(shù)據(jù)幀的待選數(shù)據(jù)幀均為空,則比較所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的字節(jié)偏移位置Lic^a = 1,2,3...),其最小者記為第k路數(shù)據(jù)幀的字節(jié)偏移位置Lkcm ;將當(dāng)前同步時間點(diǎn)T·更新為第k路數(shù)據(jù)幀當(dāng)前數(shù)據(jù)幀的解碼時間戳,即Tcot =DTSkcur,并重新計(jì)算當(dāng)前最長同步時間點(diǎn)為該當(dāng)前同步時間點(diǎn)與最長同步時間之和,即Tmax=Tsync+Tcur ;并將第k路數(shù)據(jù)幀當(dāng)前數(shù)據(jù)幀設(shè)為輸出數(shù)據(jù)幀;步驟509、將輸出數(shù)據(jù)幀所在的一路數(shù)據(jù)幀(第k路數(shù)據(jù)幀)的當(dāng)前數(shù)據(jù)幀更新為下一數(shù)據(jù)幀,并且該路數(shù)據(jù)幀的當(dāng)前數(shù)據(jù)幀幀號遞加I ;步驟510、比較上一次輸出數(shù)據(jù)幀的字節(jié)偏移位置Lpmv與其所包含的字節(jié)數(shù)Spmv之和與當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置し·,若Lpmv+Spmv幸L·,則進(jìn)行多媒體文件的搜索定位,即將多媒體文件的讀指針移動到當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置Lcot ;否則,不移動多媒體文件的讀指針,即相鄰兩數(shù)據(jù)幀之間不進(jìn)行捜索;步驟511、從多媒體文件讀指針?biāo)诘奈恢米x取當(dāng)前可輸出數(shù)據(jù)幀,所讀取數(shù)據(jù) 的大小為當(dāng)前可輸出數(shù)據(jù)幀所包含的字節(jié)數(shù)S·;將所讀取的數(shù)據(jù)作為當(dāng)前輸出數(shù)據(jù)幀輸出;步驟512、記錄當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置及其所包含的字節(jié)數(shù),并更新Lpmv
—T ['I c — c
j^cur ,人 k^prev k^cur ;步驟513、按照步驟506 步驟511的過程,解復(fù)用剩余每ー數(shù)據(jù)幀,直到得到原始流音視頻幀隊(duì)列。
背景技術(shù):
中的圖2第二行所示的原始流音視頻幀隊(duì)列,是按照解碼時間戳從小到大順序,對多媒體文件中的音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的緩存位置進(jìn)行跳轉(zhuǎn)得到的,其沒有考慮原始流音視頻幀隊(duì)列的緩存機(jī)制特性,由于在后續(xù)解碼過程中,可以緩存一定數(shù)量的數(shù)據(jù)幀,因此,本發(fā)明就沒有嚴(yán)格按照解碼時間戳從小到大順序讀取,而是連續(xù)讀取N(可按照本發(fā)明設(shè)定的最長同步時間與該例中每視頻數(shù)據(jù)幀持續(xù)時間相除計(jì)算得到,在本例中N = 200/40 = 5)視頻巾貞之后再連續(xù)讀取2N巾貞音頻,而不會影響解碼原始流音視頻巾貞隊(duì)列的同步性能。圖6為本發(fā)明在多媒體文件攜帯有索引時,將多媒體文件解復(fù)用為原始流音視頻幀隊(duì)列一的過程示意圖,圖中各部分所代表的意義與圖2相同。在圖6中,使用了 200毫秒作為最長同步時間,因此在每順序讀取5幀的視頻數(shù)幀之后就會跳轉(zhuǎn)并讀取10幀音頻數(shù)據(jù)幀,之后再跳轉(zhuǎn)并讀取后續(xù)的5幀視頻數(shù)據(jù)幀,如此往復(fù),本發(fā)明得到的原始流音視頻幀隊(duì)列如圖6第三行所示。從圖6可以看出,在此種多媒體文件包含大量的視頻數(shù)據(jù)幀和音頻數(shù)據(jù)幀的實(shí)例中,本發(fā)明完成解復(fù)用多媒體文件時,需要進(jìn)行跳轉(zhuǎn)的頻率近似為每15數(shù)據(jù)幀2次,而現(xiàn)有完成解復(fù)用多媒體文件吋,需要進(jìn)行跳轉(zhuǎn)的頻率近似為每15數(shù)據(jù)幀10次,從而節(jié)省了約80%的跳轉(zhuǎn)次數(shù),極大地提高了多線程媒體播放器的解復(fù)用效率。需要說明的是,本發(fā)明的自適應(yīng)交織性提醒在并不是從多媒體文件中固定選取連續(xù)讀取音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的個數(shù),而是結(jié)合多媒體文件中音頻數(shù)據(jù)幀或視頻數(shù)據(jù)幀的緩存位置順序與其解碼時間戳,和最長同步時間點(diǎn)的比較結(jié)果自適應(yīng)的進(jìn)行判斷。因此,本發(fā)明提供的方法適用于交織、非交織以及非正確交織多媒體文件的解復(fù)用過程。如圖7所示,圖7為本發(fā)明在多媒體文件攜帯有索引時,將多媒體文件解復(fù)用為原始流音視頻幀隊(duì)列ニ的過程示意圖,該多媒體文件為非正確交織的多媒體文件,采用本發(fā)明提供的方案對其進(jìn)行解復(fù)用,根本不需要任何跳轉(zhuǎn),節(jié)省了 100 %的跳轉(zhuǎn)次數(shù)。圖8為采用本發(fā)明提供的方法與采用現(xiàn)有技術(shù)的方法對多媒體文件進(jìn)行解復(fù)用的效率對比示意圖,如圖所示,選取了 5個電影作為多媒體文件分別采用本發(fā)明提供的方法和采用現(xiàn)有技術(shù)提供的方法進(jìn)行解復(fù)用時,進(jìn)行多媒體文件的跳轉(zhuǎn)次數(shù)比較結(jié)果柱形圖,其詳細(xì)數(shù)據(jù)采用表一進(jìn)行說明。該實(shí)施例中,使用200毫秒為最長同步時間,其中電影I的AVI文件與電影2的MP4文件均為非交織的多媒體文件,其他電影為非正確交織的多媒體文件。從結(jié)果可以看出,本發(fā)明能夠節(jié)省65% 100%的多媒體文件的跳轉(zhuǎn)次數(shù),從而極大提高多線程媒體播放器的解復(fù)用效率。表一
權(quán)利要求
1.一種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法,其特征在于,該方法包括 根據(jù)設(shè)置的最長同步時間,設(shè)置并更新最長同步時間點(diǎn); 根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀; 根據(jù)所選擇的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。
2.如權(quán)利要求I所述的方法,其特征在于,所述最長同步時間的設(shè)定依據(jù)解復(fù)用后得到的原始流音視頻幀隊(duì)列所緩存的數(shù)據(jù)幀最大個數(shù)大于所設(shè)置的最長同步時間內(nèi)所包含的數(shù)據(jù)幀個數(shù)的原則設(shè)置。
3.如權(quán)利要求I或2所述的方法,其特征在于,設(shè)置并更新最長同步時間點(diǎn)的過程為 al,將多媒體文件中的第一數(shù)據(jù)幀的解碼時間戳設(shè)置為當(dāng)前同步時間點(diǎn),將該當(dāng)前同步時間點(diǎn)與最長同步時間之和作為最長同步時間點(diǎn); bl,按照多媒體文件中數(shù)據(jù)幀的緩存順序,比較每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與最長同步時間點(diǎn); Cl,如果所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳都大于等于該最長同步時間點(diǎn),則更新最長同步時間點(diǎn),更新為當(dāng)前所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀中字節(jié)位置最靠前的數(shù)據(jù)幀的解碼時間戳,將該當(dāng)前同步時間點(diǎn)與最長同步時間之和作為最長同步時間點(diǎn),轉(zhuǎn)入步驟bl繼續(xù)執(zhí)行; 所述每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀在初始時為每一路數(shù)據(jù)幀中第一數(shù)據(jù)幀,后續(xù)如果一路數(shù)據(jù)幀中有當(dāng)前據(jù)幀被作為輸出數(shù)據(jù)幀輸出,則當(dāng)前數(shù)據(jù)幀修改為下一數(shù)據(jù)幀。
4.如權(quán)利要求3所述的方法,其特征在于,所述選擇可輸出數(shù)據(jù)幀的過程為 a2、按照多媒體文件中數(shù)據(jù)幀的緩存順序,比較每一路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的解碼時間戳與最長同步時間點(diǎn),如果小于,將該數(shù)據(jù)幀標(biāo)識為該路數(shù)據(jù)幀的待選幀;如果大于等于,該路數(shù)據(jù)幀的待選幀為空; b2、判斷多媒體文件中的所有路數(shù)據(jù)幀中的待選幀是否為空,如果否,比較多媒體文件中所有路數(shù)據(jù)幀的待選幀的字節(jié)偏移位置值,將最小所在的待選幀作為輸出數(shù)據(jù)幀輸出;如果是,比較多媒體文件中所有路數(shù)據(jù)幀中當(dāng)前數(shù)據(jù)幀的字節(jié)偏移位置值,將最小一幀作為輸出數(shù)據(jù)巾貞輸出; c2、將輸出數(shù)據(jù)幀所在的一路數(shù)據(jù)幀當(dāng)前數(shù)據(jù)幀更新為下一數(shù)據(jù)幀,轉(zhuǎn)入a2 c2繼續(xù)執(zhí)行,得到選擇的可輸出數(shù)據(jù)幀。
5.如權(quán)利要求4所述的方法,其特征在于,所述讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列的過程為 a3、獲取該輸出數(shù)據(jù)幀在多媒體文件中的字節(jié)偏移位置值,所述字節(jié)偏移位置值包括字節(jié)偏移位置和所包含的字節(jié)數(shù); b3、比較上一次輸出數(shù)據(jù)幀的字節(jié)偏移位置與所包含的字節(jié)數(shù)之和是否等于當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置與所包含的字節(jié)數(shù)之和,如果是,則不移動多媒體文件的讀指針;如果否,則進(jìn)行多媒體文件的搜索定位,將多媒體文件的讀指針移動到當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置; c3、從多媒體文件的讀指針?biāo)谖恢米x取當(dāng)前輸出數(shù)據(jù)幀,讀取數(shù)據(jù)的大小為當(dāng)前輸出數(shù)據(jù)幀所包含的字節(jié)數(shù),然后輸出; d3、記錄當(dāng)前輸出數(shù)據(jù)幀的字節(jié)偏移位置及所包含的字節(jié)數(shù),作為上一次輸出數(shù)據(jù)幀,將下一輸出數(shù)據(jù)幀作為當(dāng)前輸出數(shù)據(jù)幀,轉(zhuǎn)入步驟a3 b3繼續(xù)執(zhí)行,得到原始流音視頻幀隊(duì)列。
6.一種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用裝置,其特征在于,該裝置包括 設(shè)置單元、比較單元及輸出單元,其中, 設(shè)置單元,用于根據(jù)設(shè)置的最長同步時間,設(shè)置并更新最長同步時間點(diǎn); 比較單元,用于根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與從設(shè)置單元所獲取的最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀,發(fā)送給輸出單元; 輸出單元,用于根據(jù)從比較單元接收的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。
全文摘要
本發(fā)明公開了一種多媒體文件中音視頻數(shù)據(jù)的解復(fù)用方法及裝置,其中,該方法包括根據(jù)設(shè)置的最長同步時間,設(shè)置并更新最長同步時間點(diǎn)根據(jù)多媒體文件中每一路數(shù)據(jù)幀中當(dāng)前幀的解碼時間戳與最長同步時間點(diǎn)的比較結(jié)果,結(jié)合每一路數(shù)據(jù)幀中當(dāng)前幀的字節(jié)偏移位置值的先后順序,選擇可輸出數(shù)據(jù)幀;根據(jù)所選擇的可輸出數(shù)據(jù)幀的字節(jié)偏移位置值在多媒體文件中進(jìn)行搜索定位,讀取該輸出數(shù)據(jù)幀,得到原始流音視頻幀隊(duì)列。本發(fā)明提高了多媒體文件的解復(fù)用效率。
文檔編號H04N21/434GK102811380SQ20111015774
公開日2012年12月5日 申請日期2011年6月3日 優(yōu)先權(quán)日2011年6月3日
發(fā)明者朱春波, 孫曄 申請人:三星電子(中國)研發(fā)中心, 三星電子株式會社