行渲染。
[0030]在一些實施方式中,所述同步單元配置以利用第一分段結(jié)尾音頻或視頻幀的時間戳以及每幀音頻或視頻的時長間隔之和作為第二分段的起始時間戳偏移,對第一分段和第二分段銜接處的時間戳進(jìn)行拼接處理。
[0031]與現(xiàn)有技術(shù)相比,本申請所述的方法和系統(tǒng),達(dá)到了如下效果:
[0032]采用本發(fā)明的方法,節(jié)省了下載和解復(fù)用時的等待時間,同時解碼模塊和解復(fù)用模塊正常工作,不需要重置,于是去除了分段播放之間的停頓時間,確保分段播放時的流暢性。
[0033]同時,播放時的顯示時間同步,如同觀看一個完整的媒體文件,而無需將所有分段頭信息下載拼接為完整頭信息,節(jié)省了帶寬資源和時長的同時降低點到播時延,極大地提升了用戶的觀看體驗。
【附圖說明】
[0034]此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
[0035]圖1示出了本發(fā)明一實施例的多分段的媒體文件播放方法的流程圖;
[0036]圖2示出了圖1中的方法中的步驟S102的一種【具體實施方式】的詳細(xì)執(zhí)行圖;
[0037]圖3示出了一具體實施例的分段媒體文件應(yīng)用本發(fā)明的方法的示意圖;
[0038]圖4示出了本發(fā)明的多分段的媒體文件播放系統(tǒng)的示意圖。
【具體實施方式】
[0039]如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同名詞來稱呼同一個組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包括”為一開放式用語,故應(yīng)解釋成“包括但不限定于”。說明書后續(xù)描述為實施本申請的較佳實施方式,然所述描述乃以說明本申請的一般原則為目的,并非用以限定本申請的范圍。本申請的保護(hù)范圍當(dāng)視所附權(quán)利要求書所界定者為準(zhǔn)。
[0040]如圖1所示,為本發(fā)明一實施例的多分段的媒體文件播放方法,該媒體文件包括第一分段和與之接連的第二分段,此方法包括:
[0041]S101:第一分段下載完畢后,與后續(xù)的第一分段解復(fù)用、解碼、渲染的進(jìn)度無關(guān),SP刻開始對第二分段的下載;
[0042]S102:第一分段解復(fù)用完畢后,與后續(xù)的第一分段的解碼、渲染的進(jìn)度無關(guān),即刻開始對第二分段頭信息解析,第二分段頭信息解析完畢后,在第一分段的解碼、渲染尚未完成時,對第二分段進(jìn)行音視頻包的解復(fù)用,并對解復(fù)用出的數(shù)據(jù)包開始相應(yīng)解碼和渲染;
[0043]S103:對第一分段和第二分段銜接處的時間戳進(jìn)行拼接處理,完成第一分段和第二分段銜接處的音視頻同步。
[0044]對于步驟SlOl的執(zhí)行,可以利用第一分段下載模塊對第一分段下載完畢后,關(guān)閉所述第一分段下載模塊,立刻打開第二分段下載模塊對第二分段下載。
[0045]具體而言,第一分段下載完畢后,第二分段建立新的網(wǎng)絡(luò)請求,于是需要關(guān)閉上一個分段下載模塊,打開新的分段下載模塊。由于下載肯定要超前于解復(fù)用、解碼、渲染,故第一分段下載完成后,此時第一分段的解復(fù)用、解碼、渲染可能尚未完成,故此時并行啟動第二分段的下載是一種預(yù)下載的優(yōu)化,這樣在后續(xù)第二段進(jìn)行頭解析時能盡快獲取數(shù)據(jù),節(jié)省時間。
[0046]繼續(xù)參照圖2,關(guān)于步驟S102的執(zhí)行,可以采用如下子步驟:
[0047]S1021:利用第一分段解復(fù)用模塊對第一分段解復(fù)用完畢后,關(guān)閉所述第一分段解復(fù)用模塊,立刻打開第二分段解復(fù)用模塊對第二分段進(jìn)行頭信息解析;
[0048]S1022:利用第二分段解復(fù)用模塊對第二分段的頭信息解析完畢后,在解碼模塊和清染模塊對第一分段的解碼、清染尚未完成時,利用所述第二分段解復(fù)用模塊對第二分段進(jìn)行音視頻包的解復(fù)用,并將解復(fù)用出的數(shù)據(jù)包放入所述解碼模塊開始相應(yīng)解碼和利用所述渲染模塊進(jìn)行渲染。
[0049]考慮到每一個分段解復(fù)用總快于解碼、渲染,故解復(fù)用相關(guān)音視頻包完畢時,解碼和渲染可能尚未完成,故此時將第一分段的解復(fù)用關(guān)閉,打開第二分段的解復(fù)用對頭信息進(jìn)行解析,解析完畢頭信息后進(jìn)行音頻、視頻包的解復(fù)用操作,并且將解復(fù)用后的數(shù)據(jù)包分別放置到各自的解碼模塊中進(jìn)行解碼和之后的渲染(解復(fù)用后的音頻包放入音頻解碼模塊,視頻包放入視頻解碼模塊)。
[0050]例如可以在每個分段的最后位置(也就是結(jié)尾位置)設(shè)置提示,當(dāng)讀取進(jìn)度條觸碰到提示時,即每段播放到結(jié)尾位置時,只要第一分段的解復(fù)用完成后,立即對下載完頭信息的第二分段進(jìn)行解復(fù)用。
[0051]結(jié)合上述SlOl和S102,可以看出,本發(fā)明在第一分段下載完畢后,即刻啟動第二分段下載,當(dāng)?shù)谝环侄谓鈴?fù)用完畢后,啟動第二分段解復(fù)用,對其文件頭進(jìn)行解析隨后進(jìn)行相關(guān)音頻、視頻包的解復(fù)用,在兩處并行執(zhí)行期間,解碼模塊和渲染模塊一直處于正常工作狀態(tài),無需任何干預(yù)和重置。
[0052]關(guān)于步驟S103的執(zhí)行,可以利用第一分段結(jié)尾音頻或視頻幀的時間戳以及每幀音頻或視頻的時長間隔之和作為第二分段的起始時間戳偏移,對第一分段和第二分段銜接處的時間戳進(jìn)行拼接處理。。
[0053]執(zhí)行方面,第二分段的視頻的關(guān)鍵幀刷入解碼器中達(dá)到拼接效果,音頻的每幀都屬于關(guān)鍵幀,本身就完成拼接操作。
[0054]在整個拼接過程中,例如表現(xiàn)為:第一分段解復(fù)用完畢后,記錄最后一個音頻包和視頻包的時間戳,然后加上音頻包和視頻包的每幀時長間隔作為第二分段解復(fù)用包的起始時間戳,則解復(fù)用第二分段時,每幀時戳均加上各自的起始時間戳(音頻、視頻各自計算),以此類推,第二分段解復(fù)用完畢后,記錄結(jié)尾音頻包和視頻包的時間戳,然后加上音頻包和視頻包的每幀時長間隔作為第三分段解復(fù)用包的起始時間戳。
[0055]結(jié)合圖3,對兩個接連的分段A、B播放時,需將各段的地址、時長傳入,時長用作時間戳拼接,分段A、B的每幀碼流都有起始時戳偏移。其中第一分段A的為0,后續(xù)段分別由公式(1)、⑵獲取。
[0056]^CurTimeStamp t SegOffset+tfimeStamp(I)
[0057]^SegOffset t lastFrameTime+tperFrameDur(2)
[0058]其具體流程步驟如下:
[0059]第一分段A頭信息下載,之后解析頭信息,播放第一分段A內(nèi)容,含解復(fù)用相關(guān)音視頻包、解碼相關(guān)音視頻,渲染相關(guān)音視頻,當(dāng)?shù)谝环侄蜛下載完畢后自動進(jìn)行第二分段B內(nèi)容預(yù)下載。
[0060]第一分段A解復(fù)用完畢時,第一分段A的解碼、渲染顯示尚未完畢,與此同時,將第一分段A解復(fù)用器關(guān)閉,打開新的解復(fù)用器,將第二分段B預(yù)下載的頭信息進(jìn)行解析,解復(fù)用音視頻數(shù)據(jù)包,第二分段B解復(fù)用后的視頻碼流是以關(guān)鍵幀為起始,將第二分段B的視頻碼流放入同一解碼器中進(jìn)行解碼,之后進(jìn)行渲染。
[0061]第二分段B的視頻碼流的時戳進(jìn)行拼接,如公式(2)所示,取前一第一分段A的結(jié)尾音頻、視頻時戳tlastFranreTllJ乍為參考,分別加上對應(yīng)每幀的時長偏移t PerFraiieDur,作為第二分段B的t&gMfsw之后第二分段B解復(fù)用的每幀碼流時戳均采用公式(I)獲得,故此時分段處的音視頻時戳拼接完畢,可以完成分段銜接處的音視頻同步。
[0062]上述圖1中的方法,可以根據(jù)本發(fā)明的下述系統(tǒng)(參照圖4)予以實施。
[0063]—種多分段的媒體文件播放系統(tǒng),