專利名稱:一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)視頻領(lǐng)域,尤其是涉及一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的裝置及方法。
背景技術(shù):
上網(wǎng)用瀏覽器看視頻的用戶越來越多,其中很多視頻是電影或者電視劇等長(zhǎng)視頻,而且用戶對(duì)視頻清晰度的要求也越來越高。這些導(dǎo)致視頻文件越來越大,對(duì)瀏覽器緩存的要求越來越高。如果是http方式下載視頻,也就是說,播放器(flash腳本)在網(wǎng)頁上播放視頻時(shí),通過約定的機(jī)制得到視頻文件的http地址,然后發(fā)出請(qǐng)求,邊下載邊播放(目前flash播放常用的視頻格式為flv和mp4)。用戶拖拽和沒看完視頻造成了帶寬的浪費(fèi)。因 此多數(shù)視頻網(wǎng)站都采取對(duì)視頻進(jìn)行分段的方式來解決這個(gè)問題。將一個(gè)視頻分段為幾個(gè)視頻是指把一個(gè)視頻文件的視頻和音頻部分,按照約定 時(shí)間分成多組(或稱多個(gè)分段),對(duì)每一組按照視頻格式要求重新組成新的視頻文件。分段完的每一個(gè)文件都是一個(gè)獨(dú)立的視頻文件。播放器在處理不同分段連接的時(shí)候,由于是多個(gè)獨(dú)立的視頻文件,因此會(huì)有短時(shí)間停頓現(xiàn)象。Flash播放器播放的時(shí)候之所以會(huì)有停頓的感覺,主要是因?yàn)閒lash播放器判斷一個(gè)分段文件結(jié)束了,要初始化下一個(gè)分段文件(包括分析分段視頻的格式,寬、高等,解碼器的初始化)。而且分段處音視頻也不會(huì)與時(shí)間戳正好對(duì)上。一個(gè)分段視頻文件分為視頻部分和音頻部分。分段是拿出一部分視頻和音頻組成一個(gè)新文件。由于視頻和音頻都是離散的,所以就有可能時(shí)間長(zhǎng)度不是正好相等,也就是說時(shí)間戳不能對(duì)上。例如假設(shè)高清視頻視頻部分幀率為25,音頻為22050Hz,這樣一個(gè)視頻幀時(shí)間長(zhǎng)度為40ms,音頻幀為46. 4ms(1024000/22050),如果一個(gè)分段按7分鐘(即約定的時(shí)間)來切割的話,需要10500個(gè)視頻幀和 9044(420000/1024000*22050=9043. 9453125)個(gè)音頻幀,結(jié)果音頻比視頻長(zhǎng) 2. 5ms。實(shí)際上因?yàn)榍懈铧c(diǎn)必須為視頻的關(guān)鍵幀,這是因?yàn)橐曨l文件的視頻幀是由一個(gè)個(gè)圖片組成,視頻編碼就是壓縮圖片。有的圖片是獨(dú)立壓縮,不需要其它圖片就可以解壓縮,這樣的圖片叫做關(guān)鍵幀;有的圖片需要前一個(gè)或者其它圖片才能解壓縮,這樣的圖片叫做非關(guān)鍵幀。如果從非關(guān)鍵幀開始播放,因?yàn)榻獯a信息不完全,就會(huì)出現(xiàn)花屏的效果,直到下一個(gè)關(guān)鍵幀才會(huì)正常播放,所以理論上最大的差距可能為音頻幀的一半,既為46ms的一半23ms。假如音頻比視頻長(zhǎng)20ms,播放器在播放完視頻的時(shí)候,還有20ms的音頻,它在播最后20ms音頻的時(shí)候,是沒有視頻可以播放的。如果在把視頻給flash播放器播放之前,用腳本把兩個(gè)分段視頻合成一個(gè),就不會(huì)有這個(gè)問題了。因此,本發(fā)明提供了一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的技術(shù)方案。
發(fā)明內(nèi)容
本發(fā)明提供了一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的裝置,該裝置包括
轉(zhuǎn)碼子系統(tǒng)用于將flv格式或mp4格式的視頻進(jìn)行分段后放入數(shù)據(jù)緩存模塊,或者轉(zhuǎn)碼子系統(tǒng)利用開源軟件程序把視頻轉(zhuǎn)成一個(gè)flv格式的視頻后再分段;flash播放器,包括用來存放下載的視頻數(shù)據(jù)的數(shù)據(jù)緩存模塊,用于去掉flv開頭和metadata信息、保留視頻和音頻tag、并且去掉記錄解碼信息的偽巾貞、修改tag的時(shí)間戳的過濾器,用于給flv數(shù)據(jù)添加上元信息和/或flv頭信息的數(shù)據(jù)組裝模塊,用于計(jì)算需要的視頻數(shù)據(jù)的地址并從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換的視頻數(shù)據(jù)拼接和轉(zhuǎn)換模塊,用于對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放的播放模塊。進(jìn)一步,flash播放器中的過濾器按如下方式修改tag的時(shí)間戳后一分段視頻中視頻幀和音頻幀的時(shí)間戳加上前面分段 視頻的視頻時(shí)長(zhǎng)和音頻時(shí)長(zhǎng)。進(jìn)一步,當(dāng)視頻進(jìn)行拖動(dòng)的時(shí)候,flash播放器中的數(shù)據(jù)組裝部分根據(jù)關(guān)鍵幀元數(shù)據(jù)判斷出拖動(dòng)的位置,并且取出正確的緩存數(shù)據(jù)進(jìn)行播放。進(jìn)一步,數(shù)據(jù)組裝部分還用于判斷一個(gè)flv分段視頻文件是否已經(jīng)播放結(jié)束,如果播放結(jié)束就自動(dòng)拼接下一個(gè)flv分段視頻文件。本發(fā)明還提供了一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的方法,該方法包括步驟(I)將flv格式或mp4格式的視頻進(jìn)行分段后放入數(shù)據(jù)緩存模塊,或者利用開源軟件程序把視頻轉(zhuǎn)成一個(gè)flv格式的視頻后再分段;步驟(2)去掉flv開頭和metadata信息、保留視頻和音頻tag、并且去掉記錄解碼信息的偽巾貞、修改tag的時(shí)間戳;步驟(3)給flv數(shù)據(jù)添加上元信息和/或flv頭信息;步驟(4)計(jì)算需要的視頻數(shù)據(jù)的地址并從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換;步驟(5)對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放。進(jìn)一步,步驟(2)中按如下方式修改tag的時(shí)間戳后一分段視頻中視頻幀和音頻幀的時(shí)間戳加上前面分段視頻的視頻時(shí)長(zhǎng)和音頻時(shí)長(zhǎng)。進(jìn)一步,當(dāng)視頻進(jìn)行拖動(dòng)的時(shí)候,根據(jù)關(guān)鍵幀元數(shù)據(jù)判斷出拖動(dòng)的位置,并且取出正確的緩存數(shù)據(jù)進(jìn)行播放。進(jìn)一步,判斷一個(gè)flv分段視頻文件是否已經(jīng)播放結(jié)束,如果播放結(jié)束就自動(dòng)拼接下一個(gè)flv分段視頻文件。
圖1是根據(jù)本發(fā)明的flash播放器的結(jié)構(gòu)示意圖。圖2是根據(jù)本發(fā)明的方法的流程圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明根據(jù)本發(fā)明的裝置包括1.轉(zhuǎn)碼子系統(tǒng)用于將flv格式或mp4格式的視頻進(jìn)行分段后放入數(shù)據(jù)緩存模塊,或者轉(zhuǎn)碼子系統(tǒng)利用開源軟件程序把視頻轉(zhuǎn)成一個(gè)flv格式的視頻后再分段。
2. flash播放器如圖1所示,對(duì)于數(shù)據(jù)緩存模塊中的第一分段視頻文件,不做任何修改,直接提供給播放模塊進(jìn)行播放。但是需要記下最后的時(shí)間戳;舉例來說,分段視頻文件的第一個(gè)視頻幀應(yīng)該在O秒播放,其時(shí)間戳就是Os,第二個(gè)視頻幀應(yīng)該在第40ms時(shí)播放(假設(shè)幀率為25),時(shí)間戳就是40ms,依次類推,第三個(gè)圖片就是80ms,第四
個(gè)120ms.......最后的時(shí)間戳為最后一個(gè)視頻巾貞的時(shí)間戳加上最后一個(gè)視頻巾貞的播放
時(shí)長(zhǎng)。按照上面的例子,每一個(gè)視頻幀的播放時(shí)長(zhǎng)就是40ms。同理,音頻幀的播放時(shí)長(zhǎng)為46. 439909297052154ms。對(duì)于其它分段視頻,由于同一視頻的不同分段的flv開頭和metadata信息是相同的,因此丟掉flv開頭(FLV頭文件,共9字節(jié),前3個(gè)字節(jié)是文件格式標(biāo)識(shí).第4個(gè)字節(jié)是版本,第5個(gè)字節(jié)的前5個(gè)bit是保留的必須是O.第5個(gè)字節(jié)的第6個(gè)bit音頻類型標(biāo)志(TypeFlagsAudio),第5個(gè)字節(jié)的第7個(gè)bit也是保留的必須是O,第5個(gè)字節(jié)的第8個(gè)bit視頻類型標(biāo)志(TypeFlagsVideo)第6_9的四個(gè)字節(jié)還是保留的)和metadata信息(flv文件中的元信息,是一些描述flv文件各類屬性的信息。這些信息以 AME格式保存在文件的起始部分),只留下視頻和音頻tag(flv文件的基本單元是tag,根據(jù)tag的類型字節(jié)區(qū)分為視頻和音頻,tag頭包括類型、時(shí)間戳、內(nèi)容長(zhǎng)度,共有11比特,tag中有3字節(jié)表示時(shí)間戳)。并且丟掉記錄解碼信息的偽幀(對(duì)于h264和aac解碼來說,為了支持flv格式,需要一個(gè)單獨(dú)的tag,該tag既不屬于視頻類型也不屬于音頻類型,因此也不需要播放,該tag稱為偽幀)。flash播放器中的過濾器修改tag的時(shí)間戳(加上以前面分段視頻累計(jì)的視頻時(shí)長(zhǎng)和音頻時(shí)長(zhǎng)),也就是說,第二分段視頻中視頻幀和音頻幀的時(shí)間戳都要加上第一分段視頻的視頻時(shí)長(zhǎng)和音頻時(shí)長(zhǎng),以此類推,時(shí)間戳是放入tag中的,因此需要修改tag,然后重新放入數(shù)據(jù)緩存模塊。舉一個(gè)具體的例子,一個(gè)視頻8分鐘(幀率25),切割成兩個(gè)分段,根據(jù)視頻信息,決定第一分段共有6335個(gè)視頻幀,其時(shí)長(zhǎng)為6335*40=253400ms,音頻部分5457幀,時(shí)長(zhǎng)5457*1024000/22050. =253422. 585,音頻比視頻長(zhǎng)22. 585ms。播放完第一分段視頻的時(shí)候,要記錄這兩個(gè)時(shí)長(zhǎng),然后把這兩個(gè)時(shí)長(zhǎng)分別加到第二分段視頻文件中的每一個(gè)視頻幀和音頻幀。flash播放器中的播放模塊在播放flv分段視頻時(shí),邊下邊拼成一個(gè)視頻。具體過程如下=Flash播放器包括數(shù)據(jù)緩存模塊,用來存放下載的視頻數(shù)據(jù);以及數(shù)據(jù)拼接和轉(zhuǎn)換模塊,把緩存的視頻數(shù)據(jù)拼接和轉(zhuǎn)換為flv格式。在Flash播放器中的播放模塊需要視頻數(shù)據(jù)的時(shí)候,數(shù)據(jù)拼接和轉(zhuǎn)換模塊會(huì)計(jì)算需要的視頻數(shù)據(jù)的地址,然后從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù),轉(zhuǎn)換為flv格式的視頻數(shù)據(jù),交給播放模塊進(jìn)行播放。Flash播放器會(huì)在內(nèi)部實(shí)現(xiàn)一個(gè)數(shù)據(jù)緩存和數(shù)據(jù)組裝。數(shù)據(jù)緩存部分用來存儲(chǔ)不同的flv視頻流信息。然后在播放的時(shí)候,通過數(shù)據(jù)組裝部分,給flv數(shù)據(jù)添加上元信息(即metadata信息),比如說在切換flv文件的時(shí)候,需要添加上flv頭和metadata信息。數(shù)據(jù)組裝部分還負(fù)責(zé)判斷一個(gè)flv文件是否已經(jīng)播放結(jié)束,如果播放結(jié)束就自動(dòng)拼接下一個(gè)flv文件。在視頻進(jìn)行拖動(dòng)的時(shí)候,數(shù)據(jù)組裝部分根據(jù)關(guān)鍵幀元數(shù)據(jù)判斷出拖動(dòng)的位置,并且取出正確的緩存數(shù)據(jù)進(jìn)行播放。經(jīng)過這些處理,將以前flash播放器播放兩個(gè)分段視頻進(jìn)行切換的工作,轉(zhuǎn)換為一個(gè)瞬間完成的數(shù)據(jù)取出,轉(zhuǎn)換和拼接,播放的工作,盡可能地減少了兩個(gè)分段視頻切換的停頓現(xiàn)象。如圖2所示,根據(jù)本發(fā)明的方法包括以下步驟步驟(I)將flv格式或mp4格式的視頻進(jìn)行分段后放入數(shù)據(jù)緩存模塊,或者利用開源軟件程序把視頻轉(zhuǎn)成一個(gè)flv格式的視頻后再分段;步驟(2)去掉flv開頭和metadata信息、保留視頻和音頻tag、并且去掉記錄解碼信息的偽巾貞、修改tag的時(shí)間戳;步驟(3)給flv數(shù)據(jù)添加上元信息和/或flv頭信息;步驟(4)計(jì)算需要的視頻數(shù)據(jù)的地址并從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換;步驟(5)對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放。本發(fā)明所取得的技術(shù)效果為用flash播放flv分片視頻不會(huì)在分片點(diǎn)有短時(shí)停頓現(xiàn)象了。以上是對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行的詳細(xì)描述,但本領(lǐng)域的普通技術(shù)人員應(yīng)該意 識(shí)到,在本發(fā)明的范圍內(nèi)和精神指導(dǎo)下,各種改進(jìn)、添加和替換都是可能的。這些都在本發(fā)明的權(quán)利要求所限定的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的裝置,其特征在于該裝置包括轉(zhuǎn)碼子系統(tǒng)用于將flv格式或mp4格式的視頻進(jìn)行分段后放入數(shù)據(jù)緩存模塊,或者轉(zhuǎn)碼子系統(tǒng)利用開源軟件程序把視頻轉(zhuǎn)成一個(gè)flv格式的視頻后再分段;flash播放器,包括用來存放下載的視頻數(shù)據(jù)的數(shù)據(jù)緩存模塊,用于去掉flv開頭和 metadata信息、保留視頻和音頻tag、并且去掉記錄解碼信息的偽巾貞、修改tag的時(shí)間戳的過濾器,用于給flv數(shù)據(jù)添加上元信息和/或flv頭信息的數(shù)據(jù)組裝模塊,用于計(jì)算需要的視頻數(shù)據(jù)的地址并從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換的視頻數(shù)據(jù)拼接和轉(zhuǎn)換模塊,用于對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放的播放模塊。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于flash播放器中的過濾器按如下方式修改tag的時(shí)間戳后一分段視頻中視頻幀和音頻幀的時(shí)間戳加上前面分段視頻的視頻時(shí)長(zhǎng)和音頻時(shí)長(zhǎng)。
3.根據(jù)權(quán)利要求1所述的裝置,其特征在于當(dāng)視頻進(jìn)行拖動(dòng)的時(shí)候,flash播放器中的數(shù)據(jù)組裝部分根據(jù)關(guān)鍵幀元數(shù)據(jù)判斷出拖動(dòng)的位置,并且取出正確的緩存數(shù)據(jù)進(jìn)行播放。
4.根據(jù)權(quán)利要求1所述的裝置,其特征在于數(shù)據(jù)組裝部分還用于判斷一個(gè)flv分段視頻文件是否已經(jīng)播放結(jié)束,如果播放結(jié)束就自動(dòng)拼接下一個(gè)flv分段視頻文件。
5.一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的方法,其特征在于該方法包括步驟(I)將flv格式或mp4格式的視頻進(jìn)行分段后放入數(shù)據(jù)緩存模塊,或者利用開源軟件程序把視頻轉(zhuǎn)成一個(gè)flv格式的視頻后再分段;步驟(2)去掉flv開頭和metadata信息、保留視頻和音頻tag、并且去掉記錄解碼信息的偽巾貞、修改tag的時(shí)間戳;步驟(3)給flv數(shù)據(jù)添加上元信息和/或flv頭信息;步驟(4)計(jì)算需要的視頻數(shù)據(jù)的地址并從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換;步驟(5)對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于步驟(2)中按如下方式修改tag的時(shí)間戳后一分段視頻中視頻幀和音頻幀的時(shí)間戳加上前面分段視頻的視頻時(shí)長(zhǎng)和音頻時(shí)長(zhǎng)。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于當(dāng)視頻進(jìn)行拖動(dòng)的時(shí)候,根據(jù)關(guān)鍵幀元數(shù)據(jù)判斷出拖動(dòng)的位置,并且取出正確的緩存數(shù)據(jù)進(jìn)行播放。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于判斷一個(gè)flv分段視頻文件是否已經(jīng)播放結(jié)束,如果播放結(jié)束就自動(dòng)拼接下一個(gè)flv分段視頻文件。
全文摘要
本發(fā)明提供了一種用于解決播放網(wǎng)絡(luò)視頻時(shí)短時(shí)停頓的裝置及方法,該裝置包括用于對(duì)視頻進(jìn)行分段的轉(zhuǎn)碼子系統(tǒng),flash播放器,其包括用來存放下載的視頻數(shù)據(jù)的數(shù)據(jù)緩存模塊,用于修改tag的時(shí)間戳的過濾器,用于給flv數(shù)據(jù)添加上元信息和/或flv頭信息的數(shù)據(jù)組裝模塊,用于計(jì)算需要的視頻數(shù)據(jù)的地址并從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換的視頻數(shù)據(jù)拼接和轉(zhuǎn)換模塊,用于對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放的播放模塊。該方法包括將視頻分段;修改tag的時(shí)間戳;給flv數(shù)據(jù)添加上元信息和/或flv頭信息;從數(shù)據(jù)緩存模塊取出已經(jīng)緩存的視頻數(shù)據(jù)進(jìn)行拼接和格式轉(zhuǎn)換;對(duì)取出的視頻數(shù)據(jù)進(jìn)行播放。
文檔編號(hào)H04N21/845GK103024603SQ20121058048
公開日2013年4月3日 申請(qǐng)日期2012年12月27日 優(yōu)先權(quán)日2012年12月27日
發(fā)明者王少剛, 吳昊宇, 姚鍵, 潘柏宇, 盧述奇 申請(qǐng)人:合一網(wǎng)絡(luò)技術(shù)(北京)有限公司