本發(fā)明涉及音視頻播放技術(shù)領(lǐng)域,尤其涉及一種基于實(shí)時(shí)流傳輸HLS(http live stream)的音視頻的跳轉(zhuǎn)播放方法及裝置。
背景技術(shù):
HLS(http live stream)協(xié)議是蘋果公司提出的一個(gè)時(shí)實(shí)流傳輸協(xié)議,基本思想就是服務(wù)器將同一個(gè)音視頻分成短時(shí)長(zhǎng)的若干片段(一般為10秒),其中每一個(gè)片段都會(huì)對(duì)應(yīng)有若干不同分辨率等級(jí)的分片,用以適應(yīng)不同的網(wǎng)絡(luò)狀況。當(dāng)網(wǎng)絡(luò)狀況比較好時(shí),播放器可以請(qǐng)求一個(gè)較高分辨率的分片,反之則請(qǐng)求一個(gè)較低分辨率的分片,從而使音視頻的點(diǎn)播能夠動(dòng)態(tài)適應(yīng)網(wǎng)絡(luò)狀況,提高用戶體驗(yàn)。
接收到一個(gè)音視頻的點(diǎn)播指示后,之前的啟播方式如下:以先下載再播放的方式啟播:首先下載準(zhǔn)備好一個(gè)以上完整的分片,再開(kāi)始播放;在下載一個(gè)高分辨率的分片的過(guò)程中,若網(wǎng)絡(luò)狀況變差,就丟棄正在下載的高分辨率的分片,重新請(qǐng)求一個(gè)低分辨率的分片。該方式中,不會(huì)存在播放卡頓的問(wèn)題,保證了播放流暢性,但是會(huì)存在啟播速度慢的問(wèn)題。
為了解決啟播速度慢的問(wèn)題,現(xiàn)有技術(shù)中還可以以邊下載邊播放的方式啟播,具體的:不等分片下載完整就通知解碼器解碼以便開(kāi)始播放;正在播放的高分辨率的分片沒(méi)有下載完整的時(shí)候,若網(wǎng)絡(luò)狀況變差,應(yīng)當(dāng)請(qǐng)求下載一個(gè)低分辨率的分片,但是正在下載的高分辨率的分片正在播放過(guò)程中,目前該方式中,只能等到當(dāng)前的高分辨率的分片播放完畢,也就是說(shuō),將高分辨率的分片下載完之后,才能申請(qǐng)一個(gè)低分辨率的分片,這時(shí),因網(wǎng)絡(luò)狀況變差高分辨率的分片下載超時(shí)造成解碼器欠載,導(dǎo)致出現(xiàn)播放卡頓問(wèn)題。因而,該方式中,雖然保證了啟播速度,但是播放流暢性變差了。
因此,為保證啟播速度,現(xiàn)有技術(shù)中存在因網(wǎng)絡(luò)狀況變差導(dǎo)致的音視頻的播放流暢性變差的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的是提供一種基于HLS協(xié)議的音視頻的跳轉(zhuǎn)播放方法及裝置,用于解決現(xiàn)有技術(shù)中存在的因網(wǎng)絡(luò)狀況變差導(dǎo)致的音視頻的播放流暢性變差的問(wèn)題。
本發(fā)明實(shí)施例的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
一種基于實(shí)時(shí)流傳輸HLS協(xié)議的音視頻的跳轉(zhuǎn)播放方法,該方法包括:
在源音視頻的當(dāng)前分片文件下載過(guò)程中,若檢測(cè)到當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,則下載與所述源音頻的當(dāng)前分片文件相應(yīng)的目標(biāo)音視頻的分片文件,所述目標(biāo)音視頻的分片文件對(duì)應(yīng)的分辨率低于所述源音視頻的分片文件對(duì)應(yīng)的分辨率;
基于所述源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻分組基本碼流PES包作為連接視頻PES包和在時(shí)間上最接近所述連接視頻PES包的待解碼的源音頻PES包作為連接音頻PES包;以及基于所述目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近所述連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近所述跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包;
從所述連接視頻PES包和所述連接音頻PES包結(jié)束解碼源音視頻的當(dāng)前分片文件,并從所述跳轉(zhuǎn)視頻PES包和所述跳轉(zhuǎn)音頻PES包開(kāi)始解碼并播放目標(biāo)音視頻的分片文件。
一種基于HLS協(xié)議的音視頻的跳轉(zhuǎn)播放裝置,該裝置包括:
音視頻下載模塊,用于:在源音視頻的當(dāng)前分片文件下載過(guò)程中,若檢測(cè)到當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,則下載與所述源音頻的當(dāng)前分片文件相應(yīng)的目標(biāo)音視頻的分片文件,所述目標(biāo)音視頻的分片文件對(duì)應(yīng)的分辨率低于所述源音視頻的分片文件對(duì)應(yīng)的分辨率;
連接包和跳轉(zhuǎn)包確定模塊,用于:基于所述源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近所述連接視頻PES包的待解碼的源音頻PES包作為連接音頻PES包;以及基于所述目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近所述連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近所述跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包;
解碼播放模塊,用于:從所述連接視頻PES包和所述連接音頻PES包結(jié)束解碼所述源音視頻的當(dāng)前分片文件,并從所述跳轉(zhuǎn)視頻PES包和所述跳轉(zhuǎn)音頻PES包開(kāi)始解碼并播放所述目標(biāo)音視頻的分片文件。
本發(fā)明實(shí)施例的有益效果如下:
本發(fā)明實(shí)施例提供的一種基于HLS協(xié)議的音視頻的播放方法及裝置中,由于在源音視頻的當(dāng)前分片文件下載過(guò)程中,若當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,即網(wǎng)絡(luò)狀況變差時(shí),并非一直等待源音視頻的當(dāng)前分片文件下載,而是去下載相應(yīng)的低分辨率的目標(biāo)音視頻的分片文件,并且基于時(shí)間標(biāo)準(zhǔn),從源音視頻的當(dāng)前分片文件中對(duì)應(yīng)的待解碼的連接視頻PES包和連接音頻PES包結(jié)束播放源音視頻,從目標(biāo)音視頻的分片文件對(duì)應(yīng)的跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始播放目標(biāo)音視頻,這樣,實(shí)現(xiàn)了從一個(gè)音視頻分片的內(nèi)部到另一個(gè)音視頻分片的內(nèi)部的跳轉(zhuǎn)播放,從而避免了一直等待源音視頻的當(dāng)前分片文件下載導(dǎo)致的播放卡頓問(wèn)題,保證了播放流暢性。又由于跳轉(zhuǎn)視頻PES包是關(guān)鍵幀的開(kāi)頭,跳轉(zhuǎn)音頻PES包是音頻幀的開(kāi)頭,可保證目標(biāo)音視頻的分片文件正常解碼,避免產(chǎn)生馬賽克,也保證了播放流暢性。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例提供的一種基于HLS協(xié)議的音視頻的播放方法流程圖之一;
圖2為本發(fā)明實(shí)施例提供的一種查找跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包的方法流程圖;
圖3為本發(fā)明實(shí)施例提供的一種連接音頻PES包的方法流程圖;
圖4為本發(fā)明實(shí)施例提供的一種重新查找連接視頻PES包和連接音頻PES包的方法流程圖;
圖5為本發(fā)明實(shí)施例提供的一種基于HLS協(xié)議的音視頻的播放方法流程圖之二;
圖6為本發(fā)明實(shí)施例提供的一種基于HLS協(xié)議的音視頻的播放裝置示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明提供的一種基于HLS協(xié)議的音視頻的播放方法及裝置進(jìn)行更詳細(xì)地說(shuō)明。
本發(fā)明實(shí)施例提供一種基于HLS協(xié)議的音視頻的跳轉(zhuǎn)播放方法,如圖1所示,該方法至少包括如下步驟:
步驟110、在源音視頻的當(dāng)前分片文件下載過(guò)程中,若檢測(cè)到當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,則下載與源音頻的當(dāng)前分片文件相應(yīng)的目標(biāo)音視頻的分片文件,目標(biāo)音視頻的分片文件對(duì)應(yīng)的分辨率低于源音視頻的分片文件對(duì)應(yīng)的分辨率。
其中,源音視頻的當(dāng)前分片文件與目標(biāo)音視頻的分片文件對(duì)應(yīng)于音視頻的同一片段。
由于音視頻的碼流為一個(gè)個(gè)傳送(Transport Stream,TS)包文件組成的碼流,因而本發(fā)明實(shí)施例中,音視頻的分片文件就是分片對(duì)應(yīng)的一個(gè)個(gè)TS包文件。其中,一個(gè)TS包文件由包頭以及分組基本碼流PES(Packet Elementary Stream,PES)打包得到。其中,一個(gè)PES包由包頭和基本碼流ES(Elementary Stream,ES)打包得到。
其中,源音視頻是跳轉(zhuǎn)播放之前的音視頻;相應(yīng)的,源音視頻的分片文件對(duì)應(yīng)的視頻PES包稱為源視頻PES包,對(duì)應(yīng)的音頻PES包稱為源音頻PES包。
其中,目標(biāo)音視頻是跳轉(zhuǎn)播放之后的音視頻;相應(yīng)的,目標(biāo)音視頻的分片文件對(duì)應(yīng)的視頻PES包稱為目標(biāo)視頻PES包,對(duì)應(yīng)的音頻PES包稱為目標(biāo)音頻PES包。
步驟120、基于源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近連接視頻PES包的待解碼的源音頻PES包作為連接音頻PES包;以及基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包。
其中,為了保證音頻和視頻同步,連接音頻PES包在時(shí)間上最接近連接視頻PES包,跳轉(zhuǎn)音頻PES包在時(shí)間上最接近跳轉(zhuǎn)視頻PES包。
一般,視頻中的視頻幀的類型包括關(guān)鍵幀(即I幀)、雙向預(yù)測(cè)幀(即B幀)、前向預(yù)測(cè)幀(即P幀),關(guān)鍵幀是雙向預(yù)測(cè)幀、前向預(yù)測(cè)幀的參考幀,因而有關(guān)鍵幀,相應(yīng)的雙向預(yù)測(cè)幀、前向預(yù)測(cè)幀才能正確解碼。并且,一個(gè)視頻幀可能打包成多個(gè)視頻PES包。因而,本發(fā)明實(shí)施例中,為了保證正確解碼,跳轉(zhuǎn)視頻PES包為視頻幀中關(guān)鍵幀的開(kāi)頭。一個(gè)音頻幀可能打包成多個(gè)音頻PES包,同樣,本發(fā)明實(shí)施例中,為了正確解碼,跳轉(zhuǎn)音頻PES包為音頻幀的開(kāi)頭。
步驟130、從連接視頻PES包和連接音頻PES包結(jié)束解碼源音視頻的當(dāng)前分片文件,并從跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始解碼并播放目標(biāo)音視頻的分片文件。
本發(fā)明實(shí)施例中,由于在源音視頻的當(dāng)前分片文件下載過(guò)程中,若當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,即網(wǎng)絡(luò)狀況變差時(shí),并非一直等待源音視頻的當(dāng)前分片文件下載,而是去下載相應(yīng)的低分辨率的目標(biāo)音視頻的分片文件,并且基于時(shí)間標(biāo)準(zhǔn),從源音視頻的當(dāng)前分片文件中對(duì)應(yīng)的待解碼的連接視頻PES包和連接音頻PES包結(jié)束播放源音視頻,從目標(biāo)音視頻的分片文件對(duì)應(yīng)的跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始播放目標(biāo)音視頻,這樣,實(shí)現(xiàn)了從一個(gè)音視頻分片的內(nèi)部到另一個(gè)音視頻分片的內(nèi)部的跳轉(zhuǎn)播放,從而避免了一直等待源音視頻的當(dāng)前分片文件下載導(dǎo)致的播放卡頓問(wèn)題,保證了播放流暢性。又由于跳轉(zhuǎn)視頻PES包是關(guān)鍵幀的開(kāi)頭,跳轉(zhuǎn)音頻PES包是音頻幀的開(kāi)頭,可保證目標(biāo)音視頻的分片文件正常解碼,避免產(chǎn)生馬賽克,也保證了播放流暢性。
若本發(fā)明的方案應(yīng)用在采用邊下載邊播放的啟播方式中,在網(wǎng)絡(luò)狀況變差時(shí),就無(wú)需等待源音視頻的分片文件下載完整,而是直接從源音視頻的分片內(nèi)部跳轉(zhuǎn)到目標(biāo)音視頻的分片內(nèi)部播放,避免了因網(wǎng)絡(luò)狀況變差導(dǎo)致的播放卡頓問(wèn)題,從而保證了播放流暢性,進(jìn)而兼顧了啟播速度和播放流暢性。
需要說(shuō)明的是,本發(fā)明實(shí)施例中的音視頻分片內(nèi)部的跳轉(zhuǎn)播放的方案,除了可以應(yīng)用于上述采用邊下載邊播放的啟播方式這種場(chǎng)景中,因網(wǎng)絡(luò)狀況變差導(dǎo)致的播放流暢性較差的問(wèn)題,也可以應(yīng)用于其它可以通過(guò)音視頻分片內(nèi)部的跳轉(zhuǎn)播放來(lái)保證播放流暢性的場(chǎng)景。
本發(fā)明實(shí)施例中,在完成音視頻分片內(nèi)部的播放跳轉(zhuǎn)后,未下載完成的源音視頻的分片文件可以放棄下載。
在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)本發(fā)明實(shí)施例的方案中存在如下問(wèn)題:在源視頻的當(dāng)前分片文件中,確定的連接視頻PES包對(duì)應(yīng)的時(shí)間與跳轉(zhuǎn)視頻PES包對(duì)應(yīng)的時(shí)間之間還存在其它的源視頻PES包,如果連接視頻PES包與跳轉(zhuǎn)視頻PES包之間的時(shí)間差較小,直接從該連接視頻PES包到跳轉(zhuǎn)視頻PES包進(jìn)行跳轉(zhuǎn),不會(huì)影響觀看者的視覺(jué)感受,如果該時(shí)間差較大,畫(huà)面就會(huì)有明顯的跳躍感,導(dǎo)致影響畫(huà)面顯示效果。為了解決這一問(wèn)題,發(fā)明人進(jìn)一步提出了如下方案:
基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包之后,從連接視頻PES包和連接音頻PES包結(jié)束解碼源音視頻的當(dāng)前分片文件,并從跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始解碼并播放目標(biāo)音視頻的分片文件之前,本發(fā)明實(shí)施例的方法還包括:
判斷連接視頻PES包和跳轉(zhuǎn)視頻PES包之間的時(shí)間差是否小于預(yù)設(shè)閾值;
如果不小于,基于源音視頻的當(dāng)前分片文件,重新查找與跳轉(zhuǎn)視頻PES包之間的時(shí)間差小于預(yù)設(shè)閾值的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近重新查找到的連接視頻PES包的源音頻PES包作為連接音頻PES包。
其中,預(yù)設(shè)閾值可以但不限于是不會(huì)影響畫(huà)面顯示效果的連接視頻PES包與跳轉(zhuǎn)視頻PES包之間的最大時(shí)間差。
本實(shí)施例中,由于以跳轉(zhuǎn)視頻PES包的時(shí)間為準(zhǔn),重新查找了一個(gè)與跳轉(zhuǎn)視頻PES包的時(shí)間差小于預(yù)設(shè)閾值的連接視頻PES包,以及相應(yīng)的連接音頻PES包,在跳轉(zhuǎn)播放時(shí),就是利用的重新查找的連接視頻PES包和連接音頻PES包,這樣,畫(huà)面就不會(huì)有跳躍感,保證了畫(huà)面顯示效果。
具體實(shí)施時(shí),較佳地,基于源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包之前,本發(fā)明實(shí)施例提供的跳轉(zhuǎn)播放方法還包括:對(duì)下載的源音視頻的當(dāng)前分片文件進(jìn)行解析,得到按時(shí)間先后順序排列的源視頻PES包隊(duì)列和源音頻PES包隊(duì)列,從源視頻PES包隊(duì)列中獲取預(yù)定數(shù)量的待解碼的源視頻PES包加入到視頻PES包解碼隊(duì)列以便解碼,以及從源音頻PES包隊(duì)列中獲取預(yù)定數(shù)量的待解碼的源音頻PES包加入到音頻PES包解碼隊(duì)列以便解碼。相應(yīng)的,上述步驟120中,基于源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包,具體可以是:從視頻PES包解碼隊(duì)列中,選擇一個(gè)源視頻PES包,作為連接視頻PES包。
具體實(shí)施時(shí),由于為音頻幀的開(kāi)頭的音頻PES包的包頭,和為視頻幀的開(kāi)頭的視頻PES包的包頭中分別包含指示時(shí)間的時(shí)間標(biāo)簽,因而,較佳地,連接視頻PES包為視頻幀的開(kāi)頭;連接音頻PES包為音頻幀的開(kāi)頭。
本實(shí)施例中,可以根據(jù)時(shí)間標(biāo)簽指示的時(shí)間,進(jìn)行連接視頻PES包、連接音頻PES包、跳轉(zhuǎn)視頻PES包與跳轉(zhuǎn)音頻PES包的查找,更加方便。
在上述實(shí)施例的基礎(chǔ)上,較佳地,基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包之前,對(duì)下載的目標(biāo)音視頻的分片文件進(jìn)行解析,得到按時(shí)間先后順序排列的目標(biāo)視頻PES包隊(duì)列和目標(biāo)音頻PES包隊(duì)列。相應(yīng)的,上述步驟120中,基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包,如圖2所示,具體實(shí)現(xiàn)方式可以是:
步驟210、獲取連接PES包的包頭中的時(shí)間標(biāo)簽。
步驟220、從目標(biāo)視頻PES包隊(duì)列中查找出為關(guān)鍵幀的開(kāi)頭的各目標(biāo)視頻PES包,并獲取各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽。
步驟230、根據(jù)連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及步驟220中獲取的各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找跳轉(zhuǎn)視頻PES包;跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近且晚于連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
步驟240、從目標(biāo)音頻PES包隊(duì)列中查找出為音頻幀的開(kāi)頭的各目標(biāo)音頻PES包,并獲取各目標(biāo)音頻PES包的包頭中的時(shí)間標(biāo)簽。
步驟250、根據(jù)跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及步驟240中獲取的各目標(biāo)音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找跳轉(zhuǎn)音頻PES包;跳轉(zhuǎn)音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
該步驟中,查找跳轉(zhuǎn)音頻PES包的方式有多種,例如可以采用遞歸方式的查找,這樣,可以快速查找;也可以通過(guò)計(jì)算獲取的為音頻幀的開(kāi)頭的各目標(biāo)音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,與跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間的時(shí)間差值,選擇時(shí)間差值最小的一個(gè)目標(biāo)音頻PES包。
上述步驟220中,從目標(biāo)視頻PES包隊(duì)列中查找出為關(guān)鍵幀的開(kāi)頭的各目標(biāo)視頻PES包,并獲取各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽,具體實(shí)現(xiàn)方式可以是:依次判斷目標(biāo)視頻PES包隊(duì)列中的各目標(biāo)視頻PES包是否為關(guān)鍵幀的開(kāi)頭;如果是,將該目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽按時(shí)間先后順序加入到關(guān)鍵幀索引隊(duì)列。相應(yīng)的,上述步驟230中,根據(jù)連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找跳轉(zhuǎn)視頻PES包,具體可以是:按照時(shí)間先后順序依次判斷關(guān)鍵幀索引隊(duì)列中的各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,是否晚于連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間;直到出現(xiàn)判斷結(jié)果為是的目標(biāo)視頻PES包,將該目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包。
基于以上相關(guān)實(shí)施例,上述步驟120中,確定在時(shí)間上最接近連接視頻PES包的待解碼的源音頻PES包作為連接音頻PES包,其實(shí)現(xiàn)方式有多種,如圖3所示,其中一種實(shí)現(xiàn)方式可以是:
步驟310、獲取連接視頻PES包的包頭中的時(shí)間標(biāo)簽;
步驟320、從源音頻PES包隊(duì)列中查找出為音頻幀開(kāi)頭的各源音頻PES包,并獲取各源音頻PES包的包頭中的時(shí)間標(biāo)簽;
步驟330、根據(jù)連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及步驟320獲取的各源音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找連接音頻PES包;連接音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近連接頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
其中,查找連接音頻PES包的方式有多種,例如可以采用遞歸方式的查找,這樣,可以快速查找;也可以通過(guò)計(jì)算獲取的為音頻幀開(kāi)頭的各源音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,與連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間的時(shí)間差值,選擇時(shí)間差值最小的一個(gè)源視頻PES包。
基于上述相關(guān)實(shí)施例,如果連接視頻PES包和跳轉(zhuǎn)視頻PES包之間的時(shí)間差不小于預(yù)設(shè)閾值,需要重新查找連接視頻PES包和連接音頻PES包時(shí),具體的,基于源音視頻的當(dāng)前分片文件,重新查找與跳轉(zhuǎn)視頻PES包之間的時(shí)間差小于預(yù)設(shè)閾值的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近重新查找到的連接視頻PES包的源音頻PES包作為連接音頻PES包,其步驟如圖4所示:
步驟410、從源視頻隊(duì)列中查找出為視頻幀的開(kāi)頭的各源視頻PES包,并獲取各源視頻PES包的包頭中的時(shí)間標(biāo)簽。
步驟420、根據(jù)跳轉(zhuǎn)視頻PES包中的時(shí)間標(biāo)簽指示的時(shí)間,以及步驟410中獲取的各源視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,重新查找連接視頻PES包;重新查找的連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
該步驟中,重新查找連接視頻PES包的方式有多種,例如可以采用遞歸方式的查找,這樣,可以快速查找;也可以通過(guò)計(jì)算獲取的為視頻幀的開(kāi)頭的各源視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,與跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間的時(shí)間差值,選擇時(shí)間差值最小的一個(gè)源視頻PES包。
步驟430、根據(jù)重新查找的跳轉(zhuǎn)視頻PES包的包頭中的的時(shí)間標(biāo)簽指示的時(shí)間,以及步驟320中獲取的各源音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,重新查找連接音頻PES包;重新查找的連接音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近重新查找的連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
基于以上相關(guān)實(shí)施例,較佳地,上述步驟130從連接視頻PES包和連接音頻PES包結(jié)束解碼播放源音視頻的當(dāng)前分片文件,并從跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始解碼并播放目標(biāo)音視頻的分片文件,其中一種具體實(shí)現(xiàn)方式可以是:清除視頻PES包解碼隊(duì)列中連接視頻PES包之后的源視頻PES包,并在連接視頻PES包后加入跳轉(zhuǎn)視頻PES包及其之后的目標(biāo)視頻PES包,以及清除音頻PES包解碼隊(duì)列中連接音頻PES包之后的源音頻PES包,并在連接音頻PES包后加入成跳轉(zhuǎn)音頻PES包及其之后的目標(biāo)音頻PES包,進(jìn)行解碼并播放。
較佳地,上述時(shí)間標(biāo)簽為顯示時(shí)間標(biāo)簽(Presentation Time Stamp,PTS);或者時(shí)間標(biāo)簽為解碼時(shí)間標(biāo)簽(Decoding Time Stamp,DTS)。具體實(shí)施時(shí),既可以基于PTS也可以基于DTS,按照以上相關(guān)實(shí)施例的方式進(jìn)行連接視頻PES包、連接音頻PES包、跳轉(zhuǎn)音頻PES包與跳轉(zhuǎn)視頻PES包的查找。
下面以時(shí)間標(biāo)簽為PTS為例,對(duì)本發(fā)明實(shí)施例提供的一種基于HLS協(xié)議的音視頻的跳轉(zhuǎn)播放方法進(jìn)行更加詳細(xì)地說(shuō)明,如圖5所示,本實(shí)施例中的流程如下:
在接收到一個(gè)音視頻的點(diǎn)播指示后,步驟510、采用邊下載邊播放的方式對(duì)源音視頻啟播。
該步驟中,需要對(duì)下載的源音視頻的分片文件進(jìn)行解析,得到按時(shí)間先后順序排列的源視頻PES包隊(duì)列和源音頻PES包隊(duì)列,從源視頻PES包隊(duì)列中獲取預(yù)定數(shù)量的待解碼的源視頻PES包加入到視頻PES包解碼隊(duì)列以便解碼,以及從源音頻PES包隊(duì)列中獲取預(yù)定數(shù)量的待解碼的源音頻PES包加入到音頻PES包解碼隊(duì)列以便解碼。解碼之后就可以播放音視頻的分片。
本實(shí)施例的場(chǎng)景中,在啟播過(guò)程中,若當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,認(rèn)為網(wǎng)絡(luò)狀況變差。
步驟520、在源音視頻的當(dāng)前分片文件下載過(guò)程中,若檢測(cè)到當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,則下載與源音頻的當(dāng)前分片文件相應(yīng)的目標(biāo)音視頻的分片文件,目標(biāo)音視頻的分片文件對(duì)應(yīng)的分辨率低于源音視頻的分片文件對(duì)應(yīng)的分辨率,執(zhí)行步驟530。
步驟530、對(duì)下載的目標(biāo)音視頻的分片文件進(jìn)行解析,得到按時(shí)間先后順序排列的目標(biāo)視頻PES包隊(duì)列和目標(biāo)音頻PES包隊(duì)列,執(zhí)行步驟540。
步驟540、從視頻PES包解碼隊(duì)列中,選擇一個(gè)待解碼的源視頻PES包,作為連接視頻PES包;該連接視頻PES包為視頻幀的開(kāi)頭;執(zhí)行步驟550。
步驟550、獲取連接視頻PES包的包頭中的PTS值;從源音頻PES包隊(duì)列中查找出為音頻幀開(kāi)頭的各源音頻PES包,并獲取各源音頻PES包的包頭中的PTS值;執(zhí)行步驟560。
該步驟中,查找出為音頻幀開(kāi)頭的各源音頻PES包時(shí),針對(duì)源音頻PES包隊(duì)列中的每個(gè)源音頻PES包:判斷源音頻PES包的包頭中的幀開(kāi)頭標(biāo)志位是否為1;
如果不是1,則認(rèn)為該源音頻PES包不是幀開(kāi)頭,不做處理;
如果是1,則認(rèn)為該源音頻PES包是幀開(kāi)頭,繼續(xù)根據(jù)源音頻PES包的包頭中的PTS標(biāo)志位判斷是否包含有PTS值;
如果PTS標(biāo)志位指示不包含PTS值,不做處理;
如果PTS標(biāo)志位指示包含PTS值,獲取其中的PTS值。
步驟560、根據(jù)連接視頻PES包的包頭中的PTS值指示的時(shí)間,以及步驟450中獲取的各源音頻PES包的包頭中的PTS值指示的時(shí)間,查找連接音頻PES包;連接音頻PES包的包頭中的PTS值指示的時(shí)間最接近連接頻PES包的包頭中的PTS值指示的時(shí)間;執(zhí)行步驟570。
步驟570、依次判斷目標(biāo)視頻PES包隊(duì)列中的各目標(biāo)視頻PES包是否為關(guān)鍵幀開(kāi)頭;如果是,將該目標(biāo)視頻PES包的包頭中的PTS值按時(shí)間先后順序加入到關(guān)鍵幀索引隊(duì)列;執(zhí)行步驟580。
該步驟中,針對(duì)目標(biāo)視頻PES包隊(duì)列中的每個(gè)目標(biāo)視頻PES包:判斷目標(biāo)視頻PES包的包頭中的幀開(kāi)頭標(biāo)志位是否為1;
如果不是1,則認(rèn)為該目標(biāo)視頻PES包不是幀開(kāi)頭,不做處理;
如果是1,則認(rèn)為該目標(biāo)視頻PES包是幀開(kāi)頭,繼續(xù)根據(jù)目標(biāo)視頻PES包的包頭中的PTS標(biāo)志位判斷是否包含有PTS值;
如果PTS標(biāo)志位指示不包含PTS值,不做處理;
如果PTS標(biāo)志位指示包含PTS值,繼續(xù)判斷PES包中的ES包是否為關(guān)鍵幀;如果是,將該目標(biāo)視頻PES包的隊(duì)列序號(hào)和其中的PTS值按時(shí)間先后順序加入到關(guān)鍵幀索引隊(duì)列,否則,不做處理。
步驟580、按照時(shí)間先后順序依次判斷關(guān)鍵幀索引隊(duì)列中的各目標(biāo)視頻PES包的包頭中的PTS值指示的時(shí)間,是否晚于連接視頻PES包的包頭中的PTS值指示的時(shí)間;直到出現(xiàn)判斷結(jié)果為是的目標(biāo)視頻PES包,將該目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包;執(zhí)行步驟590。
步驟590、從目標(biāo)音頻PES包隊(duì)列中查找出為音頻幀的開(kāi)頭的各目標(biāo)音頻PES包,并獲取各目標(biāo)音頻PES包的包頭中的PTS值;執(zhí)行步驟5100。
該步驟中,針對(duì)目標(biāo)音頻PES包隊(duì)列中的每個(gè)目標(biāo)音頻PES包:判斷目標(biāo)音頻PES包的包頭中的幀開(kāi)頭標(biāo)志位是否為1;
如果不是1,則認(rèn)為該目標(biāo)音頻PES包不是幀開(kāi)頭,不做處理;
如果是1,則認(rèn)為該目標(biāo)音頻PES包是幀開(kāi)頭,繼續(xù)根據(jù)目標(biāo)音頻PES包的包頭中的PTS標(biāo)志位判斷是否包含有PTS值;
如果PTS標(biāo)志位指示不包含PTS值,不做處理;
如果PTS標(biāo)志位指示包含PTS值,獲取其中的PTS值。
步驟5100、根據(jù)跳轉(zhuǎn)視頻PES包的包頭中的PTS值指示的時(shí)間,以及步驟590中獲取的目標(biāo)音頻PES包隊(duì)列中各目標(biāo)音頻PES包的包頭中的PTS值指示的時(shí)間,以遞歸方式查找跳轉(zhuǎn)音頻PES包;跳轉(zhuǎn)音頻PES包的包頭中的PTS值指示的時(shí)間最接近跳轉(zhuǎn)視頻PES包的包頭中的PTS值指示的時(shí)間;執(zhí)行步驟5110。
步驟5110、判斷連接視頻PES包的PTS值指示的時(shí)間和跳轉(zhuǎn)視頻PES包的PTS值指示的時(shí)間之間的時(shí)間差是否小于預(yù)設(shè)閾值;如果是,執(zhí)行步驟5150,否則,執(zhí)行步驟5120。
步驟5120、從源視頻隊(duì)列中查找出為視頻幀的開(kāi)頭的各源視頻PES包,并獲取各源視頻PES包的包頭中的PTS值;執(zhí)行步驟5130。
該步驟的具體實(shí)施方式可參考步驟570。
步驟5130、根據(jù)跳轉(zhuǎn)視頻PES包中的PTS值指示的時(shí)間,以及步驟5120中獲取的各源視頻PES包的包頭中的PTS值指示的時(shí)間,重新查找連接視頻PES包;重新查找的連接視頻PES包的包頭中的PTS值指示的時(shí)間最接近跳轉(zhuǎn)視頻PES包的包頭中的PTS值指示的時(shí)間;執(zhí)行步驟5140。
具體的,通過(guò)計(jì)算獲取的源視頻隊(duì)列中為視頻幀的開(kāi)頭的各源視頻PES包的包頭中的PTS值指示的時(shí)間,與跳轉(zhuǎn)視頻PES包的包頭中的PTS值指示的時(shí)間的時(shí)間差值,選擇時(shí)間差值最小的一個(gè)源視頻PES包。
步驟5140、根據(jù)重新查找的跳轉(zhuǎn)視頻PES包的包頭中的PTS值指示的時(shí)間,以及步驟550中獲取的各源音頻PES包的包頭中的PTS值指示的時(shí)間,以遞歸方式重新查找連接音頻PES包;重新查找的連接音頻PES包的包頭中的PTS值指示的時(shí)間最接近重新查找的連接視頻PES包的包頭中的PTS值指示的時(shí)間;執(zhí)行步驟5150。
步驟5150、清除視頻PES包解碼隊(duì)列中連接視頻PES包之后的源視頻PES包,并在連接視頻PES包后加入跳轉(zhuǎn)視頻PES包及其之后的目標(biāo)視頻PES包,以及清除音頻PES包解碼隊(duì)列中連接音頻PES包之后的源音頻PES包,并在連接音頻PES包后加入成跳轉(zhuǎn)音頻PES包及其之后的目標(biāo)音頻PES包,進(jìn)行解碼并播放。
本實(shí)施例中,由于采用邊下載邊播放的啟播方式,保證了啟播速度,又由于在網(wǎng)絡(luò)狀況變差時(shí),實(shí)現(xiàn)了音視頻分片內(nèi)部的跳轉(zhuǎn)播放,又保證了播放流暢性。
基于同樣的發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供一種基于HLS協(xié)議的音視頻的跳轉(zhuǎn)播放裝置,如圖6所示,該裝置包括音視頻下載模塊601,連接包和跳轉(zhuǎn)包確定模塊602,解碼播放模塊603。其中:
音視頻下載模塊601,用于:在源音視頻的當(dāng)前分片文件下載過(guò)程中,若檢測(cè)到當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,則下載與源音頻的當(dāng)前分片文件相應(yīng)的目標(biāo)音視頻的分片文件,目標(biāo)音視頻的分片文件對(duì)應(yīng)的分辨率低于源音視頻的分片文件對(duì)應(yīng)的分辨率;
連接包和跳轉(zhuǎn)包確定模塊602,用于:基于源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近連接視頻PES包的待解碼的源音頻PES包作為連接音頻PES包;以及基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包;
解碼播放模塊603,用于:從連接視頻PES包和連接音頻PES包結(jié)束解碼播放源音視頻的當(dāng)前分片文件,并從跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始解碼并播放目標(biāo)音視頻的分片文件。
本發(fā)明實(shí)施例中,由于在源音視頻的當(dāng)前分片文件下載過(guò)程中,若當(dāng)前的網(wǎng)絡(luò)帶寬小于預(yù)設(shè)值,即網(wǎng)絡(luò)狀況變差時(shí),并非一直等待源音視頻的當(dāng)前分片文件下載,而是去下載相應(yīng)的低分辨率的目標(biāo)音視頻的分片文件,并且基于時(shí)間標(biāo)準(zhǔn),從源音視頻的當(dāng)前分片文件中對(duì)應(yīng)的待解碼的連接視頻PES包和連接音頻PES包結(jié)束播放源音視頻,從目標(biāo)音視頻的分片文件對(duì)應(yīng)的跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始播放目標(biāo)音視頻,這樣,實(shí)現(xiàn)了從一個(gè)音視頻分片的內(nèi)部到另一個(gè)音視頻分片的內(nèi)部的跳轉(zhuǎn)播放,從而避免了一直等待源音視頻的當(dāng)前分片文件下載導(dǎo)致的播放卡頓問(wèn)題,保證了播放流暢性。又由于跳轉(zhuǎn)視頻PES包是關(guān)鍵幀的開(kāi)頭,跳轉(zhuǎn)音頻PES包是音頻幀的開(kāi)頭,可保證目標(biāo)音視頻的分片文件正常解碼,避免產(chǎn)生馬賽克,也保證了播放流暢性。
較佳地,連接包和跳轉(zhuǎn)包確定模塊還用于:
基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包之后,從連接視頻PES包和連接音頻PES包結(jié)束播放源音視頻,并從跳轉(zhuǎn)視頻PES包和跳轉(zhuǎn)音頻PES包開(kāi)始播放目標(biāo)音視頻之前,判斷連接視頻PES包和跳轉(zhuǎn)視頻PES包之間的時(shí)間差是否小于預(yù)設(shè)閾值;
如果不小于,基于源音視頻的當(dāng)前分片文件,重新查找與跳轉(zhuǎn)視頻PES包之間的時(shí)間差小于預(yù)設(shè)閾值的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近重新查找到的連接視頻PES包的源音頻PES包作為連接音頻PES包。
較佳地,該裝置還包括解析模塊,用于:基于源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包之前,對(duì)下載的源音視頻的當(dāng)前分片文件進(jìn)行解析,得到按時(shí)間先后順序排列的源視頻PES包隊(duì)列和源音頻PES包隊(duì)列,從源視頻PES包隊(duì)列中獲取預(yù)定數(shù)量的待解碼的源視頻PES包加入到視頻PES包解碼隊(duì)列以便解碼,以及從源音頻PES包隊(duì)列中獲取預(yù)定數(shù)量的待解碼的源音頻PES包加入到音頻PES包解碼隊(duì)列以便解碼;
基于源音視頻的當(dāng)前分片文件,確定一個(gè)待解碼的源視頻PES包作為連接視頻PES包時(shí),連接包和跳轉(zhuǎn)包確定模塊,具體用于:
從視頻PES包解碼隊(duì)列中,選擇一個(gè)源視頻PES包,作為連接視頻PES包。
較佳地,解析模塊還用于:
基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包之前,對(duì)下載的目標(biāo)音視頻的分片文件進(jìn)行解析,得到按時(shí)間先后順序排列的目標(biāo)視頻PES包隊(duì)列和目標(biāo)音頻PES包隊(duì)列;
基于目標(biāo)音視頻的分片文件,確定在時(shí)間上最接近連接視頻PES包且為視頻幀中關(guān)鍵幀的開(kāi)頭的目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包和在時(shí)間上最接近跳轉(zhuǎn)視頻PES包且為音頻幀的開(kāi)頭的目標(biāo)音頻PES包作為跳轉(zhuǎn)音頻PES包時(shí),連接包和跳轉(zhuǎn)包確定模塊,具體用于:
獲取連接PES包的包頭中的時(shí)間標(biāo)簽;
從目標(biāo)視頻PES包隊(duì)列中查找出為關(guān)鍵幀的開(kāi)頭的各目標(biāo)視頻PES包,并獲取各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽;
根據(jù)連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找跳轉(zhuǎn)視頻PES包;跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近且晚于連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間;
從目標(biāo)音頻PES包隊(duì)列中查找出為音頻幀的開(kāi)頭的各目標(biāo)音頻PES包,并獲取各目標(biāo)音頻PES包的包頭中的時(shí)間標(biāo)簽;
根據(jù)跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各目標(biāo)音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找跳轉(zhuǎn)音頻PES包;跳轉(zhuǎn)音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
較佳地,從目標(biāo)視頻PES包隊(duì)列中查找出為關(guān)鍵幀的開(kāi)頭的各目標(biāo)視頻PES包,并獲取各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽時(shí),連接包和跳轉(zhuǎn)包確定模塊,具體用于:
依次判斷目標(biāo)視頻PES包隊(duì)列中的各目標(biāo)視頻PES包是否為關(guān)鍵幀的開(kāi)頭;如果是,將該目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽按時(shí)間先后順序加入到關(guān)鍵幀索引隊(duì)列;
根據(jù)連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找跳轉(zhuǎn)視頻PES包,包括:
按照時(shí)間先后順序依次判斷關(guān)鍵幀索引隊(duì)列中的各目標(biāo)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,是否晚于連接PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間;直到出現(xiàn)判斷結(jié)果為是的目標(biāo)視頻PES包,將該目標(biāo)視頻PES包作為跳轉(zhuǎn)視頻PES包。
較佳地,確定在時(shí)間上最接近連接視頻PES包的待解碼的源音頻PES包作為連接音頻PES包時(shí),連接包和跳轉(zhuǎn)包確定模塊,具體用于:
獲取連接視頻PES包的包頭中的時(shí)間標(biāo)簽;
從源音頻PES包隊(duì)列中查找出為音頻幀開(kāi)頭的各源音頻PES包,并獲取各源音頻PES包的包頭中的時(shí)間標(biāo)簽;
根據(jù)連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各源音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,查找連接音頻PES包;連接音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近連接頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
較佳地,基于源音視頻的當(dāng)前分片文件,重新查找與跳轉(zhuǎn)視頻PES包之間的時(shí)間差小于預(yù)設(shè)閾值的源視頻PES包作為連接視頻PES包和在時(shí)間上最接近重新查找到的連接視頻PES包的源音頻PES包作為連接音頻PES包時(shí),連接包和跳轉(zhuǎn)包確定模塊,具體用于:
從源視頻隊(duì)列中查找出為視頻幀的開(kāi)頭的各源視頻PES包,并獲取各源視頻PES包的包頭中的時(shí)間標(biāo)簽;
根據(jù)跳轉(zhuǎn)視頻PES包中的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各源視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,重新查找連接視頻PES包;重新查找的連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近跳轉(zhuǎn)視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間;
根據(jù)重新查找的連接視頻PES包的包頭中的的時(shí)間標(biāo)簽指示的時(shí)間,以及獲取的各源音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間,重新查找連接音頻PES包;重新查找的連接音頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間最接近重新查找的連接視頻PES包的包頭中的時(shí)間標(biāo)簽指示的時(shí)間。
較佳地,解碼播放模塊,具體用于:
清除視頻PES包解碼隊(duì)列中連接視頻PES包之后的源視頻PES包,并在連接視頻PES包后加入跳轉(zhuǎn)視頻PES包及其之后的目標(biāo)視頻PES包,以及清除音頻PES包解碼隊(duì)列中連接音頻PES包之后的源音頻PES包,并在連接音頻PES包后加入成跳轉(zhuǎn)音頻PES包及其之后的目標(biāo)音頻PES包,進(jìn)行解碼并播放。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程PES處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程PES處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程PES處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程PES處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。