多分段的媒體文件播放方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及媒體文件播放方法及系統(tǒng),尤其涉及一種多分段的媒體文件播放方法和系統(tǒng)。
【背景技術(shù)】
[0002]基于開(kāi)放互聯(lián)網(wǎng)的移動(dòng)流媒體服務(wù)是將來(lái)滿(mǎn)足直播、點(diǎn)播以及時(shí)移等諸多應(yīng)用需求的最佳解決方案之一。基于開(kāi)放互聯(lián)網(wǎng)的音視頻服務(wù),終端可以是電視機(jī)、電腦、機(jī)頂盒、PAD、智能手機(jī)等等。意指在網(wǎng)絡(luò)之上提供服務(wù),強(qiáng)調(diào)服務(wù)與物理網(wǎng)絡(luò)的無(wú)關(guān)性。對(duì)于現(xiàn)在各大音視頻網(wǎng)站所提供的媒體內(nèi)容,絕大多數(shù)是采用按時(shí)間分割成多個(gè)分段的方式來(lái)存儲(chǔ)和傳輸一段媒體內(nèi)容(例如:一部90分鐘的電景^,可分成9段,每段10分鐘),其中的每個(gè)分段都是獨(dú)立完整的媒體文件且編碼方面完全相同。
[0003]目前的多分段媒體文件有分段FLV文件和分段MP4文件,每個(gè)媒體文件(FLV或MP4)分段都由“頭信息”和“媒體數(shù)據(jù)”組成。通常,頭信息在媒體頭信息部,媒體數(shù)據(jù)在頭信息后直到媒體文件尾。
[0004]頭信息一般設(shè)置在視頻文件中的文件最開(kāi)始位置或者結(jié)尾處,通常由文件類(lèi)型、文件播放時(shí)長(zhǎng)、所含視音頻流數(shù)量、各音視頻流采用的編碼標(biāo)準(zhǔn)以及各音視頻流所含“幀信息”等描述信息組成。以MP4文件為例,該頭文件中包含有視頻文件的每幀碼流的位置偏移、時(shí)間戳、碼流尺寸、時(shí)長(zhǎng)、視頻編碼方式、分辨率、音頻編碼方式、采樣率等基本信息。
[0005]媒體數(shù)據(jù)由各視頻幀和各音頻幀組成。其中,F(xiàn)LV文件的視(音)頻幀包含此幀的顯示時(shí)間戳和編碼數(shù)據(jù);MP4的視(音)頻幀只含有編碼數(shù)據(jù)。
[0006]現(xiàn)有技術(shù)在播放這種多分段的媒體文件時(shí),是按照列表的方式順序播放的,即:打開(kāi)播放器,播放第一段媒體文件,待第一段媒體文件播放結(jié)束后“重置播放器”,然后再播放下一段媒體文件……以此類(lèi)推,直到播放完所有分段后關(guān)閉播放器。這里的“重置播放器”指的是在播放器內(nèi)部重新初始化播放器的過(guò)程。
[0007]但是,目前的這種“分段播放”存在著明顯的缺陷,主要在于:
[0008]當(dāng)這種多分段的視頻文件很大時(shí),相應(yīng)的各個(gè)分段的頭信息也會(huì)非常大。這樣就造成在線(xiàn)視頻的多個(gè)分段在下載過(guò)程中每次都需要先經(jīng)過(guò)長(zhǎng)時(shí)間緩存才能把頭信息文件下載下來(lái),然后才能逐步播放,點(diǎn)到播時(shí)間較長(zhǎng),這樣非常影響客戶(hù)的體驗(yàn),客戶(hù)需要多次等待長(zhǎng)時(shí)間的緩存才能全部讀取完視頻文件。故目前主流視頻播放網(wǎng)站都提供了分段的MP4、FLV,每個(gè)小段都含有較小的頭信息,播放時(shí)僅僅下載該段的頭信息解析后即可開(kāi)始播放,點(diǎn)到播時(shí)間變短,但是播放在分段處需要重啟播放器(關(guān)閉并重新打開(kāi)下載模塊、解復(fù)用模塊、解碼模塊、渲染模塊),打開(kāi)新的分段進(jìn)行播放,且新分段需要重新加載,等待下載時(shí)間,段與段之間會(huì)出現(xiàn)畫(huà)面、音頻卡頓。另外,視頻時(shí)長(zhǎng)僅僅是當(dāng)前新的分段的時(shí)長(zhǎng),而不是全部拼接好的時(shí)長(zhǎng),影響用戶(hù)觀看體驗(yàn)。
[0009]另外,由于目前的在線(xiàn)視頻中對(duì)視頻文件中的分段內(nèi)容拆分后并不進(jìn)行拼頭操作,即使用戶(hù)采用下載離線(xiàn)視頻文件后續(xù)來(lái)本地播放,播放時(shí)仍是對(duì)視頻文件中的分段點(diǎn)進(jìn)行讀取播放,因此系統(tǒng)播放器播放視頻文件過(guò)程中,同樣會(huì)進(jìn)行多次重啟播放器的操作,段與段之間會(huì)出現(xiàn)閃爍,或者音頻之間停頓等問(wèn)題。
[0010]事實(shí)上,采用拆分后重新拼頭操作需要花費(fèi)更多的帶寬資源和時(shí)長(zhǎng),這對(duì)于媒體提供商來(lái)說(shuō),前期投入和后期維護(hù)成本會(huì)顯著增加,并不是一種輕便的解決方案。
【發(fā)明內(nèi)容】
[0011 ] 有鑒于此,本申請(qǐng)所要解決的技術(shù)問(wèn)題是提供了一種多分段的媒體文件播放方法和系統(tǒng),來(lái)解決多分段的媒體文件播放時(shí)分段處的畫(huà)面和音頻卡頓和時(shí)間顯示不同步的問(wèn)題。
[0012]為了解決上述技術(shù)問(wèn)題,本申請(qǐng)一方面提出了一種多分段的媒體文件播放方法,其中,所述媒體文件包括第一分段和與之接連的第二分段,所述方法包括:
[0013]第一分段下載完畢后,與后續(xù)的第一分段解復(fù)用、解碼、渲染的進(jìn)度無(wú)關(guān),即刻開(kāi)始對(duì)第二分段的下載;
[0014]第一分段解復(fù)用完畢后,與后續(xù)的第一分段的解碼、渲染的進(jìn)度無(wú)關(guān),即刻開(kāi)始對(duì)第二分段頭信息解析,第二分段頭信息解析完畢后,在第一分段的解碼、渲染尚未完成時(shí),對(duì)第二分段進(jìn)行音視頻包的解復(fù)用,并對(duì)解復(fù)用出的數(shù)據(jù)包開(kāi)始相應(yīng)解碼和渲染;
[0015]對(duì)第一分段和第二分段銜接處的時(shí)間戳進(jìn)行拼接處理,完成第一分段和第二分段銜接處的音視頻同步。
[0016]在一些實(shí)施方式中,所述第一分段下載完畢后,與后續(xù)的第一分段解復(fù)用、解碼、渲染的進(jìn)度無(wú)關(guān),即刻開(kāi)始對(duì)第二分段的下載包括:
[0017]利用第一分段下載模塊對(duì)第一分段下載完畢后,關(guān)閉所述第一分段下載模塊,立刻打開(kāi)第二分段下載模塊對(duì)第二分段下載。
[0018]在一些實(shí)施方式中,所述第一分段解復(fù)用完畢后,與后續(xù)的第一分段的解碼、渲染的進(jìn)度無(wú)關(guān),即刻開(kāi)始對(duì)第二分段頭信息解析,第二分段頭信息解析完畢后,在第一分段的解碼、渲染尚未完成時(shí),對(duì)第二分段進(jìn)行音視頻包的解復(fù)用,并對(duì)解復(fù)用出的數(shù)據(jù)包開(kāi)始相應(yīng)解碼和渲染包括:
[0019]利用第一分段解復(fù)用模塊對(duì)第一分段解復(fù)用完畢后,關(guān)閉所述第一分段解復(fù)用模塊,立刻打開(kāi)第二分段解復(fù)用模塊對(duì)第二分段進(jìn)行頭信息解析;
[0020]利用第二分段解復(fù)用模塊對(duì)第二分段的頭信息解析完畢后,在解碼模塊和渲染模塊對(duì)第一分段的解碼、渲染尚未完成時(shí),利用所述第二分段解復(fù)用模塊對(duì)第二分段進(jìn)行音視頻包的解復(fù)用,并將解復(fù)用出的數(shù)據(jù)包放入所述解碼模塊開(kāi)始相應(yīng)解碼和利用所述渲染模塊進(jìn)行渲染。
[0021]在一些實(shí)施方式中,所述對(duì)第一分段和第二分段銜接處的時(shí)間戳進(jìn)行拼接處理,完成第一分段和第二分段銜接處的音視頻同步;包括:
[0022]利用第一分段結(jié)尾音頻或視頻幀的時(shí)間戳以及每幀音頻或視頻的時(shí)長(zhǎng)間隔之和作為第二分段的起始時(shí)間戳偏移,對(duì)第一分段和第二分段銜接處的時(shí)間戳進(jìn)行拼接處理。此時(shí)間隔表不每巾貞占用的時(shí)長(zhǎng),比如25巾貞/秒,則一巾貞占用40ms,此間隔為40ms。
[0023]本發(fā)明另一方面提出了一種多分段的媒體文件播放系統(tǒng),其中,所述媒體文件包括第一分段和與之接連的第二分段,所述系統(tǒng)包括:
[0024]下載控制單元,配置以在第一分段下載完畢后,與后續(xù)的第一分段解復(fù)用、解碼、渲染的進(jìn)度無(wú)關(guān),即刻開(kāi)始對(duì)第二分段的下載;
[0025]解復(fù)用、解碼和渲染控制單元,配置以在第一分段解復(fù)用完畢后,與后續(xù)的第一分段的解碼、渲染的進(jìn)度無(wú)關(guān),即刻開(kāi)始對(duì)第二分段頭信息解析,第二分段頭信息解析完畢后,在第一分段的解碼、渲染尚未完成時(shí),對(duì)第二分段進(jìn)行音視頻包的解復(fù)用,并對(duì)解復(fù)用出的數(shù)據(jù)包開(kāi)始相應(yīng)解碼和渲染;
[0026]同步單元,對(duì)第一分段和第二分段銜接處的時(shí)間戳進(jìn)行拼接處理,完成第一分段和第二分段銜接處的音視頻同步。
[0027]在一些實(shí)施方式中,所述下載控制單元配置以利用第一分段下載模塊對(duì)第一分段下載完畢后,關(guān)閉所述第一分段下載模塊,立刻打開(kāi)第二分段下載模塊對(duì)第二分段下載。
[0028]在一些實(shí)施方式中,所述解復(fù)用、解碼和渲染控制單元配置以利用第一分段解復(fù)用模塊對(duì)第一分段解復(fù)用完畢后,關(guān)閉所述第一分段解復(fù)用模塊,立刻打開(kāi)第二分段解復(fù)用模塊對(duì)第二分段進(jìn)行頭信息解析;
[0029]利用第二分段解復(fù)用模塊對(duì)第二分段的頭信息解析完畢后,在解碼模塊和渲染模塊對(duì)第一分段的解碼、渲染尚未完成時(shí),利用所述第二分段解復(fù)用模塊對(duì)第二分段進(jìn)行音視頻包的解復(fù)用,并將解復(fù)用出的數(shù)據(jù)包放入所述解碼模塊開(kāi)始相應(yīng)解碼和利用所述渲染模塊進(jìn)