專利名稱:一種播放包含多視頻段的視頻的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及信息處理技術(shù)領(lǐng)域,特別是涉及一種播放包含多視頻段的視頻方法及其相應(yīng)的裝置。
背景技術(shù):
在視頻播放過程中,為便于播放,通常將一個(gè)視頻劃分為多個(gè)視頻段進(jìn)行分段獨(dú)立播放,每個(gè)視頻段構(gòu)成獨(dú)立的視頻段文件。以Flash播放器播放這類包含多視頻段的視頻為例,其播放過程是Flash播放器創(chuàng)建兩個(gè)或多個(gè)NetStream,每個(gè)NetStream負(fù)責(zé)加載和解碼一個(gè)視頻段文件,當(dāng)需要由當(dāng)前播放的視頻段文件轉(zhuǎn)換到對(duì)目標(biāo)視頻段文件的播放時(shí),必須在兩個(gè)NetStream間進(jìn)行切換操作。由于傳統(tǒng)NetStream技術(shù)將加載和解碼兩個(gè)過程封裝揉合在一起,使播放當(dāng)前視頻段的NetStream到對(duì)目標(biāo)視頻段進(jìn)行播放的NetStream之間的切換不能立即完成(這將導(dǎo)致整個(gè)播放器應(yīng)用程序崩潰),而是在前一個(gè) NetStream對(duì)當(dāng)前視頻段播放結(jié)束后,延遲一定時(shí)間再開啟下一個(gè)NetStream對(duì)目標(biāo)視頻段進(jìn)行播放。然而,這種在兩個(gè)NetStream間進(jìn)行的切換,其切換過程由于存在延遲,視頻播放過程將出現(xiàn)短暫的停頓,即出現(xiàn)所謂的“卡頓”現(xiàn)象。此外,在NetStream間切換過程中,通常不能較好確定切換時(shí)機(jī),容易引起當(dāng)前視頻段的播放提前結(jié)束,而目標(biāo)視頻段仍以當(dāng)前視頻段的原播放結(jié)束時(shí)間為起點(diǎn),由此導(dǎo)致出現(xiàn)“跳幀”現(xiàn)象。
發(fā)明內(nèi)容
為解決上述技術(shù)問題,本申請(qǐng)實(shí)施例提供一種播放包含多視頻段的視頻的方法及其對(duì)應(yīng)裝置,以實(shí)現(xiàn)多個(gè)視頻段之間無延遲的平滑過渡,避免出現(xiàn)“卡頓”現(xiàn)象。本申請(qǐng)實(shí)施例提供的播放包含多視頻段的視頻的方法包括在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù);當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。優(yōu)選地,所述修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù)具體包括將目標(biāo)視頻段的播放開始時(shí)間修改為當(dāng)前視頻段的播放結(jié)束時(shí)間。優(yōu)選地,在當(dāng)前視頻段向目標(biāo)視頻段切換之前,加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳具體包括在當(dāng)前視頻段開始播放時(shí),或者,在包含多視頻段的視頻開始播放時(shí),或者,在以接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)之時(shí)為終點(diǎn)時(shí)間,減去加載目標(biāo)視頻段和修改目標(biāo)視頻段的時(shí)間戳所需要的時(shí)間后的時(shí)間之前,加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳。
優(yōu)選地,所述方法還包括判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出結(jié)束通知消息以便根據(jù)該結(jié)束通知消息終止包含多視頻段的視頻的播放。進(jìn)一步優(yōu)選地,當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)時(shí),將修改時(shí)間戳的目標(biāo)視頻段推送到NetStream的數(shù)據(jù)緩存區(qū)進(jìn)行解碼以供播放,則判斷包含多視頻段的視頻的各視頻段是否均被解碼播放具體包括判斷NetStream的數(shù)據(jù)緩存區(qū)是否為空,如果是,則發(fā)出結(jié)束通知消息。本申請(qǐng)實(shí)施例還提供了一種播放包含多視頻段的視頻的裝置。該裝置包括加載單元、修改單元、接收單元和解碼播放單元,其中 所述視頻段加載單元,用于在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段;所述視頻段修改單元,用于在當(dāng)前視頻段向目標(biāo)視頻段切換之前修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù);所述觸發(fā)接收單元,用于接收將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā);所述解碼播放單元,用于在接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。優(yōu)選地,所述視頻段修改單元具體為將目標(biāo)視頻段的播放開始時(shí)間修改為當(dāng)前視頻段的播放結(jié)束時(shí)間。優(yōu)選地,所述視頻段加載單元具體為在當(dāng)前視頻段開始播放時(shí),或者,在包含多視頻段的視頻開始播放時(shí),或者,在以接收到當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)之時(shí)為終點(diǎn)時(shí)間,減去加載目標(biāo)視頻段和修改目標(biāo)視頻段的時(shí)間戳需要的時(shí)間后的時(shí)間之前,力口載目標(biāo)視頻段。優(yōu)選地,所述裝置還包括判斷單元和播放終止單元,其中所述判斷單元,用于判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出結(jié)束通知消息;所述播放終止單元,用于根據(jù)所述結(jié)束通知消息終止包含多視頻段的視頻的播放。進(jìn)一步優(yōu)選地,當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)時(shí),將已修改時(shí)間戳的目標(biāo)視頻段推送到NetStream的數(shù)據(jù)緩存區(qū)進(jìn)行解碼,則判斷單元具體用于判斷NetStream的數(shù)據(jù)緩存區(qū)是否為空,如果是,則發(fā)出結(jié)束通知消息。本申請(qǐng)實(shí)施例在當(dāng)前視頻段向目標(biāo)視頻段切換之前,加載目標(biāo)視頻段并對(duì)目標(biāo)視頻段進(jìn)行時(shí)間戳修改,修改后時(shí)間戳與當(dāng)前視頻段的時(shí)間戳連續(xù),當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。與現(xiàn)有技術(shù)相比,由于本申請(qǐng)實(shí)施例的目標(biāo)視頻段的加載過程與解碼過程完全獨(dú)立,使加載和修改過程可以在接收到觸發(fā)后進(jìn)行解碼操作之前完成,從而保證了切換時(shí)的完全銜接,避免了出現(xiàn)“卡頓”現(xiàn)象。此外,由于本申請(qǐng)實(shí)施例的目標(biāo)視頻段的時(shí)間戳與當(dāng)前視頻段的時(shí)間戳連續(xù),使解碼過程針對(duì)的對(duì)象是二進(jìn)制文件流,不再存在獨(dú)立的“視頻段文件”的概念,從而避免了在切換過程中的“跳幀”問題。
為了更清楚地說明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)中記載的一些實(shí)施 例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本申請(qǐng)的播放包含多視頻段的方法的一個(gè)實(shí)施例的流程圖;圖2(a)為本申請(qǐng)的播放包含多視頻段的方法的另一個(gè)實(shí)施例的流程圖;圖2(b)為圖2(a)所述實(shí)施例的數(shù)據(jù)、信號(hào)流向示意圖;圖3為本申請(qǐng)的播放包含多視頻段的視頻的裝置的實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)中的技術(shù)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。參見圖1,該圖示出了本申請(qǐng)的播放包含多視頻段的方法的一個(gè)實(shí)施例的流程。該實(shí)施例包括步驟SlOl :在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù);由于播放包含多視頻段的視頻是通過分段播放每個(gè)視頻段實(shí)現(xiàn)的,需要加載和解碼各個(gè)視頻段。現(xiàn)有技術(shù)的加載和解碼過程封裝揉合在一起,對(duì)視頻段的加載和解碼過程同時(shí)接續(xù)進(jìn)行。本申請(qǐng)實(shí)施例在當(dāng)前視頻段向目標(biāo)視頻段切換之前僅進(jìn)行加載操作,即將目標(biāo)視頻段加載到運(yùn)行播放器程序的內(nèi)存空間。本申請(qǐng)不限制在當(dāng)前視頻段向目標(biāo)視頻段切換之前的具體什么時(shí)候啟動(dòng)或完成加載,只要在切換前,任何時(shí)候均不妨礙本申請(qǐng)發(fā)明目的的實(shí)現(xiàn)。在實(shí)際應(yīng)用過程中,本申請(qǐng)可以優(yōu)選如下三種方式中的任何一種第一種方式在當(dāng)前視頻段開始播放時(shí)進(jìn)行加載操作。在一個(gè)包含多視頻段的視頻不受外界干擾的自然播放情況下,通常一個(gè)視頻段將接續(xù)一個(gè)視頻段陸續(xù)播放,即前一個(gè)視頻段播放結(jié)束后,將切換到其緊鄰的下一個(gè)視頻段進(jìn)行播放。這種情形下,在播放當(dāng)前視頻段時(shí),即可加載目標(biāo)視頻段以待播放。該方式使存儲(chǔ)視頻段的內(nèi)存不用在一個(gè)定時(shí)間段內(nèi)保存過多的視頻段,節(jié)約了內(nèi)存空間,從而有利于提高播放器以及在同一個(gè)系統(tǒng)上的其他應(yīng)用程序的運(yùn)行速度。第二種方式在包含多視頻段的視頻開始播放時(shí)進(jìn)行加載操作。除上述提及的播放包含多視頻段的視頻時(shí)一個(gè)視頻段接著一個(gè)視頻段的陸續(xù)播放的自然播放情況外,視頻觀看者有時(shí)還會(huì)采取前后“拖拽”播放條或點(diǎn)擊“回退”、“前進(jìn)”按鈕的操作,以便選擇性的觀看某些視頻段。在這種受到外界干預(yù)的非自然播放的情形下,如果仍然使用在播放當(dāng)前視頻段時(shí)加載與其緊鄰的下一個(gè)視頻段的方式,由于無法確定目標(biāo)視頻段到底為視頻中的哪一個(gè)視頻段,使上述加載操作沒有實(shí)際意義。為此,本申請(qǐng)可以選擇在整個(gè)包含多視頻段的視頻開始播放之時(shí),加載全部的可能目標(biāo)視頻段,以應(yīng)對(duì)可能受外界干預(yù)播放的多視頻段視頻的播放。第三種方式在以接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)之時(shí)為終點(diǎn)時(shí)間,減去加載目標(biāo)視頻段和修改目標(biāo)視頻段的時(shí)間戳所需要的時(shí)間后的時(shí)間之前進(jìn)行加載操作。上述兩種方式雖然能夠較好地滿足某些特殊情況下的要求,但是,由于他們僅僅是對(duì)加載開始或結(jié)束時(shí)間的一種定性描述,無法具體確定加載到內(nèi)存后多長(zhǎng)時(shí)間才會(huì)輪到目標(biāo)視頻段的播放,如果“加載完成”到“真正被播放”這一時(shí)間段的時(shí)間過長(zhǎng),這實(shí)際上浪費(fèi)了加載資源。第三種方式以接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)為終點(diǎn)時(shí)間,由該時(shí)間向前看,從該終點(diǎn)時(shí)間中減去加載目標(biāo)視頻段和修改目標(biāo)視頻段時(shí)間戳所耗費(fèi)的時(shí)間,以這樣計(jì)算的時(shí)間為臨界點(diǎn),在該臨界點(diǎn)時(shí)間之前完成加載即可實(shí)現(xiàn)發(fā)明目的。上述這三種方式根據(jù)實(shí)際情況不同,適用于不同的情形第一種方式通常適用于沒有外界干預(yù)的自然播放過程,第二種方式適用于不能較好地確定外界干預(yù)的干預(yù)時(shí)間(何時(shí)發(fā)起切換)和干預(yù)對(duì)象(向哪個(gè)目標(biāo)視頻段切換)時(shí)的非自然播放過程,第三種方式適用于能夠較好地估計(jì)當(dāng)前視頻段到目標(biāo)視頻段的觸發(fā)時(shí)間的干預(yù)或非干預(yù)播放過程。還需要說明的是由于視頻段的播放時(shí)間和加載視頻段的時(shí)間不在一個(gè)數(shù)量級(jí)上,因此,“在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段”可以指在切換之前啟動(dòng)加載目標(biāo)視頻段,也可以指在切換之前完成目標(biāo)視頻段的加載操作。按照前述的任何一種方式或者其他方式將目標(biāo)視頻段加載到內(nèi)存后,本申請(qǐng)實(shí)施·例還對(duì)目標(biāo)視頻段的時(shí)間戳進(jìn)行修改。時(shí)間戳記錄了視頻段的播放起止時(shí)間。在現(xiàn)有技術(shù)中,由于每個(gè)視頻段獨(dú)立加載和解碼,視頻段的時(shí)間戳各自獨(dú)立,時(shí)間戳在該視頻段內(nèi)在具有標(biāo)明播放流的意義,而在視頻段之間,則不具有意義。本申請(qǐng)實(shí)施例對(duì)目標(biāo)視頻段的時(shí)間戳進(jìn)行修改,使當(dāng)前視頻段和目標(biāo)視頻的時(shí)間戳連續(xù),實(shí)現(xiàn)當(dāng)前視頻段和目標(biāo)視頻段之間的時(shí)間戳連續(xù)具有多種方式,比如,將目標(biāo)視頻段的播放開始時(shí)間修改為當(dāng)前視頻段的播放結(jié)束時(shí)間。還需要說明的是對(duì)目標(biāo)視頻段時(shí)間戳的修改操作與上述加載操作可明顯區(qū)分為兩個(gè)獨(dú)立的過程,也可以將兩個(gè)過程在一次操作中同時(shí)完成,比如可以先將目標(biāo)視頻段加載到內(nèi)存之中,然后再針對(duì)內(nèi)存中的目標(biāo)視頻段進(jìn)行時(shí)間戳修改操作,還可以在加載目標(biāo)視頻段到內(nèi)存的同時(shí),完成對(duì)目標(biāo)視頻段時(shí)間戳的修改。步驟S102 :當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放;本申請(qǐng)實(shí)施例在接收到切換觸發(fā)之前,已經(jīng)將目標(biāo)視頻段加載到內(nèi)存,并完成了對(duì)目標(biāo)視頻段時(shí)間戳的修改操作。如果接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā),則可立即對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。這里的當(dāng)前視頻段到目標(biāo)視頻段的切換觸發(fā)可以表現(xiàn)為多種具體形式,比如,在包含多視頻段的視頻自然播放的情形下,可以表現(xiàn)為當(dāng)前視頻段播放結(jié)束即視為對(duì)目標(biāo)視頻段的切換觸發(fā),還可以表現(xiàn)為根據(jù)預(yù)設(shè)的時(shí)間周期啟動(dòng)時(shí)間監(jiān)控,當(dāng)預(yù)設(shè)時(shí)間到來時(shí)產(chǎn)生對(duì)目標(biāo)視頻段的切換觸發(fā)。還比如,通過人為控制的方式進(jìn)行觸發(fā)在當(dāng)前視頻段播放過程中,視頻觀看者拖拽播放條,該拖拽操作即視為對(duì)目標(biāo)視頻段的切換觸發(fā)。本實(shí)施例在當(dāng)前視頻段向目標(biāo)視頻段切換之前,加載目標(biāo)視頻段并對(duì)目標(biāo)視頻段進(jìn)行時(shí)間戳修改,修改后時(shí)間戳與當(dāng)前視頻段的時(shí)間戳連續(xù),當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。與現(xiàn)有技術(shù)相比,本實(shí)施例至少可以取得如下技術(shù)效果(I)由于本實(shí)施例對(duì)目標(biāo)視頻段的加載過程與解碼過程完全獨(dú)立,使加載和修改過程可以在接收到由當(dāng)前視頻段到目標(biāo)視頻段的觸發(fā)后進(jìn)行解碼播放操作之前完成,從而保證了視頻段切換時(shí)的兩個(gè)視頻段在播放時(shí)序上前后銜接,避免了出現(xiàn)“卡頓”現(xiàn)象。(2)由于本實(shí)施例的目標(biāo)視頻段的時(shí)間戳與當(dāng)前視頻段的時(shí)間戳連續(xù),使解碼過程針對(duì)的對(duì)象是二進(jìn)制文件流,不再存在獨(dú)立的“視頻段文件”的概念,從而避免了在切換過程中的“跳幀”問題。(3)現(xiàn)有技術(shù)的加載和解碼封裝揉合,在滿足播放需要的情況下,加載速度與播放速度相適應(yīng),使開發(fā)人員不能較好地控制加載速度,無論視頻段文件多大,該視頻段文件的全部數(shù)據(jù)都將加載到內(nèi)存,導(dǎo)致內(nèi)存大量占用,影響播放器運(yùn)行效率。而本實(shí)施例由于加載 和解碼過程獨(dú)立,播放速度與加載速度沒有必然直接關(guān)系,因此,開發(fā)人員可以根據(jù)實(shí)際情況需要(比如網(wǎng)絡(luò)環(huán)境情況)控制視頻段文件的加載速度,從而對(duì)內(nèi)存的數(shù)據(jù)存儲(chǔ)量進(jìn)行適當(dāng)控制。(4)由于本實(shí)施例的加載過程和解碼過程相互獨(dú)立,對(duì)多個(gè)視頻段的解碼可采用相同的NetStream,也就是說,不需要在多個(gè)NetStream之間進(jìn)行切換,從而有利于簡(jiǎn)化整個(gè)播放系統(tǒng)的復(fù)雜度,方便了編程實(shí)現(xiàn)。上述實(shí)施例的技術(shù)方案為滿足某些特殊需要,還可以根據(jù)這些需要進(jìn)行進(jìn)一步的改進(jìn)變形,形成新的實(shí)施例。比如,在現(xiàn)有技術(shù)中,如果“跳幀”現(xiàn)象不是出現(xiàn)在視頻段的切換過程中,而是出現(xiàn)在一個(gè)包含多視頻段的視頻的播放結(jié)尾部分時(shí),將導(dǎo)致視頻提前結(jié)束,上述實(shí)施例的技術(shù)方案雖然能夠解決視頻段切換過程中的“跳幀”問題,但不能較好地解決視頻末尾的“提前結(jié)束”問題。針對(duì)該問題,本申請(qǐng)實(shí)施例可以采取如下的措施在播放視頻過程中(如可以在播放視頻的最后一個(gè)視頻段時(shí))判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出結(jié)束通知消息,然后根據(jù)該結(jié)束通知消息終止包含多視頻段的視頻的播放。采用這種方式可準(zhǔn)確地知道視頻是否真正已播放完畢,從而有效避免視頻“提前結(jié)束”。值得注意的是這里的判斷條件包括兩個(gè)一是各視頻段是否均被加載,二是加載的視頻段是否均解碼播放。之所以采用“雙條件”機(jī)制,其原因在于在某些情況下單個(gè)條件得到滿足并不能說明視頻確已播放完畢。比如,用于存儲(chǔ)待播放的視頻段的數(shù)據(jù)緩存(緩沖)區(qū)為空時(shí),說明視頻段均被解碼播放完畢,但不能認(rèn)為視頻真的“結(jié)束”,因?yàn)檫@時(shí)可能由于網(wǎng)絡(luò)傳輸原因,該視頻的某些后續(xù)視頻段并未加載,如果即刻結(jié)束視頻的播放,便將出現(xiàn)“提前結(jié)束”的現(xiàn)象。在這種情況下,本申請(qǐng)還對(duì)視頻段的加載情況進(jìn)行判斷,如果均被加載,說明該包含多視頻段的視頻確實(shí)播放完畢,可以終止本次播放。為更進(jìn)一步對(duì)本申請(qǐng)的技術(shù)方案進(jìn)行說明,下面結(jié)合一個(gè)更為詳細(xì)的實(shí)施例予以闡釋。參見圖2,其中圖2(a)示出了本申請(qǐng)的播放包含多視頻段的視頻的方法的實(shí)施例的流程,圖2(b)示出了各步驟之間的信號(hào)流轉(zhuǎn)示意圖。該實(shí)施例以Flash播放器為應(yīng)用場(chǎng)景,F(xiàn)lash播放器是基于Flash技術(shù)采用AS3語言編程的主要應(yīng)用于WEB頁面的播放器,AS3的全稱為ActionScript3. O,其是類似于C++語言或JAVA的面向?qū)ο蟮木幊陶Z言,NetStream是AS3中用于播放視頻的一個(gè)對(duì)象。在播放多視頻段的視頻之前,本實(shí)施例將全部的視頻段均先加載到內(nèi)存中,整個(gè)過程通過創(chuàng)建一個(gè)NetStream完成,解碼過程在NetStream的數(shù)據(jù)緩沖區(qū)中進(jìn)行。該實(shí)施例包括
步驟S201 從⑶N或加速器通過HTTP協(xié)議加載視頻段;這里的Q)N是Content Delivery Network的簡(jiǎn)稱,即內(nèi)容分發(fā)網(wǎng)絡(luò)。該分發(fā)網(wǎng)絡(luò)的基本思路是盡可能避開網(wǎng)絡(luò)上可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)乃俣雀?、穩(wěn)定性更強(qiáng)。它是通過在網(wǎng)絡(luò)各處設(shè)置節(jié)點(diǎn)服務(wù)器的基礎(chǔ)上構(gòu)成的一層智能虛擬網(wǎng)絡(luò),它實(shí)時(shí)地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點(diǎn)的連接、負(fù)載狀況以及到用戶的距離和響應(yīng)時(shí)間等綜合信息將用戶請(qǐng)求重新導(dǎo)向到離用戶最近的服務(wù)節(jié)點(diǎn)上。通過CDN方式可以使用戶就近取得所需內(nèi)容,解決網(wǎng)絡(luò)擁擠問題,提高訪問網(wǎng)站的響應(yīng)速度。該步驟的輸入可以是帶有FLV頭信息的完整的FLV文件視頻段數(shù)據(jù)。步驟S202 :對(duì)加載的視頻段進(jìn)行時(shí)間戳進(jìn)行修改,使各視頻段的時(shí)間戳連續(xù);將加載到內(nèi)存的視頻段時(shí)間戳修改,以保證時(shí)間上的連續(xù)性。如前所述,該修改操作可以在加載視頻段的過程中完成,也可以在加載到內(nèi)存后再逐一進(jìn)行。傳統(tǒng)的加載和解碼過程相互揉合,加載的視頻段可能立即進(jìn)行解碼播放,而本實(shí)施例將加載與解碼過程分 開,因此,一定時(shí)間內(nèi)內(nèi)存中的視頻段可能較多,這時(shí)需要對(duì)這些視頻段進(jìn)行組織管理,以便正確推送、解碼視頻段。這里的管理可以包括根據(jù)內(nèi)存空間的大小對(duì)內(nèi)存中的視頻段的數(shù)量進(jìn)行動(dòng)態(tài)調(diào)整等。該步驟的輸入是FLV文件視頻段數(shù)據(jù),輸出為時(shí)間戳連續(xù)的、按時(shí)間先后順序存放的視頻數(shù)據(jù)數(shù)組。步驟S203 :將視頻段推送到NetStream的數(shù)據(jù)緩沖區(qū)進(jìn)行解碼播放;為保證連續(xù)播放,在該步驟中,可以不必等到數(shù)據(jù)緩沖區(qū)內(nèi)的全部數(shù)據(jù)解碼播放完后再推送其他的視頻段數(shù)據(jù),而可以在數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)小于某個(gè)預(yù)設(shè)值時(shí),即進(jìn)行將加載的數(shù)據(jù)推送到NetStream的數(shù)據(jù)緩沖區(qū)的操作。該步驟的輸入為FLV文件視頻段數(shù)據(jù),輸出為供播放的YUV視頻流。步驟S204:在接收將當(dāng)前視頻段到目標(biāo)視頻段的切換觸發(fā)后,將目標(biāo)視頻段推送到NetStream的數(shù)據(jù)緩沖區(qū)進(jìn)行解碼以供播放;前述步驟是正常的播放過程,如果由于各種原因產(chǎn)生到目標(biāo)視頻段的切換觸發(fā)后,即可將內(nèi)存中的相應(yīng)目標(biāo)視頻段數(shù)據(jù)推送到NetStream的數(shù)據(jù)緩沖區(qū)進(jìn)行解碼以供播放。步驟S205 :判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出Empty事件,根據(jù)該事件終止視頻播放。判斷包含多視頻段的視頻的各視頻段是否均被解碼播放可通過對(duì)NetStream的數(shù)據(jù)緩沖區(qū)的情況進(jìn)行判斷實(shí)現(xiàn),如果NetStream的數(shù)據(jù)緩沖區(qū)為空,說明沒有可供解碼執(zhí)行的視頻段數(shù)據(jù),這時(shí)將發(fā)出Empty事件。接收到該事件后,根據(jù)該事件終止視頻播放。上述各步驟間的信號(hào)、數(shù)據(jù)流向可參見圖2(b):步驟S201到步驟S202的數(shù)據(jù)流如圖中的①;步驟S202到步驟S203的數(shù)據(jù)流如圖中②。這些數(shù)據(jù)流向過程可通過NetStream的數(shù)據(jù)引擎進(jìn)行控制,圖中虛線代表信號(hào)控制流。以上內(nèi)容是對(duì)本申請(qǐng)方法實(shí)施例的描述,相應(yīng)地,本申請(qǐng)還提供了裝置實(shí)施例。參見圖3,該圖示出了本申請(qǐng)的播放包含多視頻段的視頻的裝置的結(jié)構(gòu)框圖。本裝置實(shí)施例包括視頻段加載單元301、時(shí)間戳修改單元302、觸發(fā)接收單元303和解碼播放單元304,其中視頻段加載單元301,用于在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段;時(shí)間戳修改單元302,用于在當(dāng)前視頻段向目標(biāo)視頻段切換之前修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù);觸發(fā)接收單元303,用于接收將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā);解碼播放單元304,用于在接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。本裝置實(shí)施例的工作過程是視頻段加載單元301在當(dāng)前視頻段向目標(biāo)視頻段切 換之前加載目標(biāo)視頻段,時(shí)間戳修改單元302在當(dāng)前視頻段向目標(biāo)視頻段切換之前修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù),當(dāng)觸發(fā)接收單元303接收將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)時(shí),由解碼播放單元304對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。本裝置實(shí)施例在當(dāng)前視頻段向目標(biāo)視頻段切換之前,加載目標(biāo)視頻段并對(duì)目標(biāo)視頻段進(jìn)行時(shí)間戳修改,修改后時(shí)間戳與當(dāng)前視頻段的時(shí)間戳連續(xù),當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。與現(xiàn)有技術(shù)相比,由于本裝置實(shí)施例的目標(biāo)視頻段的加載過程與解碼過程完全獨(dú)立,使加載和修改過程可以在接收到觸發(fā)后進(jìn)行解碼操作之前完成,從而保證了切換時(shí)的完全銜接,避免了出現(xiàn)“卡頓”現(xiàn)象。此外,由于本申請(qǐng)實(shí)施例的目標(biāo)視頻段的時(shí)間戳與當(dāng)前視頻段的時(shí)間戳連續(xù),使解碼過程針對(duì)的對(duì)象是二進(jìn)制文件流,不再存在獨(dú)立的“視頻段文件”的概念,從而避免了在切換過程中的“跳幀”問題。上述裝置實(shí)施例中的視頻段加載單元具體可以在不同的時(shí)間點(diǎn)上進(jìn)行視頻段的加載,只要該加載在當(dāng)前視頻段向目標(biāo)視頻段切換之前完成即可。比如可以為如下三種方式中的任何一種在當(dāng)前視頻段開始播放時(shí),或者,在包含多視頻段的視頻開始播放時(shí),或者,在以接收到當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)之時(shí)為終點(diǎn)時(shí)間,減去加載目標(biāo)視頻段和修改目標(biāo)視頻段的時(shí)間戳需要的時(shí)間后的時(shí)間之前。這些不同的方式適應(yīng)了實(shí)際應(yīng)用過程中的不同情形。上述裝置實(shí)施例中的時(shí)間戳修改單元也可以具有多種具體修改方式,比如可以是將目標(biāo)視頻段的播放開始時(shí)間修改為當(dāng)前視頻段的播放結(jié)束時(shí)間。在實(shí)際應(yīng)用過程中,上述裝置實(shí)施例還可能存在視頻“提前結(jié)束”的問題。為解決該問題,上述裝置實(shí)施例具有相應(yīng)的結(jié)構(gòu)變化,比如可以包括判斷單元305和播放終止單元306,其中判斷單元305,用于判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出結(jié)束通知消息;播放終止單元306,用于根據(jù)所述結(jié)束通知消息終止包含多視頻段的視頻的播放。在包含判斷單元和播放終止單元的裝置中,如果該裝置是基于Flash播放器實(shí)現(xiàn),解碼過程是在NetStream的數(shù)據(jù)緩存區(qū)內(nèi)完成時(shí),判斷單元判斷包含多視頻段的視頻的各視頻段是否均被解碼播放可通過判斷NetStream的數(shù)據(jù)緩存區(qū)是否為空實(shí)現(xiàn),即判斷NetStream的數(shù)據(jù)緩存區(qū)是否為空,如果是,則發(fā)出結(jié)束通知消肩、O為了描述的方便,描述以上裝置時(shí)以功能分為各種單元分別描述。當(dāng)然,在實(shí)施本申請(qǐng)時(shí)可以把各單元的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn)。基于這樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。本申請(qǐng)可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè)人計(jì)算機(jī)、服務(wù) 器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。以上所述僅是本申請(qǐng)的具體實(shí)施方式
,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請(qǐng)?jiān)淼那疤嵯?,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。
權(quán)利要求
1.一種播放包含多視頻段的視頻的方法,其特征在于,該方法包括 在當(dāng)前視頻段向目標(biāo)視頻段切換之前,加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù); 當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù)具體包括 將目標(biāo)視頻段的播放開始時(shí)間修改為當(dāng)前視頻段的播放結(jié)束時(shí)間。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,在當(dāng)前視頻段向目標(biāo)視頻段切換之前,力口載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳具體包括 在當(dāng)前視頻段開始播放時(shí),或者,在包含多視頻段的視頻開始播放時(shí),或者,在以接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)之時(shí)為終點(diǎn)時(shí)間,減去加載目標(biāo)視頻段和修改目標(biāo)視頻段的時(shí)間戳所需要的時(shí)間后的時(shí)間之前,加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳。
4.根據(jù)權(quán)利要求I至3中任何一項(xiàng)所述的方法,其特征在于,所述方法還包括 判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出結(jié)束通知消息以便根據(jù)該結(jié)束通知消息終止包含多視頻段的視頻的播放。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)時(shí),將修改時(shí)間戳的目標(biāo)視頻段推送到NetStream的數(shù)據(jù)緩存區(qū)進(jìn)行解碼以供播放,則判斷包含多視頻段的視頻的各視頻段是否均被解碼播放具體包括 判斷NetStream的數(shù)據(jù)緩存區(qū)是否為空,如果是,則發(fā)出結(jié)束通知消息。
6.一種播放包含多視頻段的視頻的裝置,其特征在于,該裝置包括視頻段加載單元、時(shí)間戳修改單元、觸發(fā)接收單元和解碼播放單元,其中 所述視頻段加載單元,用于在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段; 所述時(shí)間戳修改單元,用于在當(dāng)前視頻段向目標(biāo)視頻段切換之前修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù); 所述觸發(fā)接收單元,用于接收將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā); 所述解碼播放單元,用于在接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述時(shí)間戳修改單元具體為將目標(biāo)視頻段的播放開始時(shí)間修改為當(dāng)前視頻段的播放結(jié)束時(shí)間。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述視頻段加載單元具體為 在當(dāng)前視頻段開始播放時(shí),或者,在包含多視頻段的視頻開始播放時(shí),或者,在以接收到當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)之時(shí)為終點(diǎn)時(shí)間,減去加載目標(biāo)視頻段和修改目標(biāo)視頻段的時(shí)間戳需要的時(shí)間后的時(shí)間之前,加載目標(biāo)視頻段。
9.根據(jù)權(quán)利要求6至8中任何一項(xiàng)所述的裝置,其特征在于,所述裝置還包括判斷單元和播放終止單元,其中 所述判斷單元,用于判斷包含多視頻段的視頻的各視頻段是否均被加載且均被解碼播放,如果是,則發(fā)出結(jié)束通知消息;所述播放終止單元,用于根據(jù)所述結(jié)束通知消息終止包含多視頻段的視頻的播放。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)時(shí),將已修改時(shí)間戳的目標(biāo)視頻段推送到NetStream的數(shù)據(jù)緩存區(qū)進(jìn)行解碼,則判斷單元判斷包含多視頻段的視頻的各視頻段是否均被解碼播放具體為 判斷NetStream的數(shù)據(jù)緩存區(qū)是否為空,如果是,則發(fā)出結(jié)束通知消息。
全文摘要
本發(fā)明實(shí)施例公開了一種播放包含多視頻段的視頻的方法。該方法包括在當(dāng)前視頻段向目標(biāo)視頻段切換之前加載目標(biāo)視頻段,修改目標(biāo)視頻段的時(shí)間戳使當(dāng)前視頻段和目標(biāo)視頻段的時(shí)間戳連續(xù);當(dāng)接收到將當(dāng)前視頻段切換至目標(biāo)視頻段的觸發(fā)后,對(duì)修改時(shí)間戳的目標(biāo)視頻段進(jìn)行解碼播放。本發(fā)明實(shí)施例還提供了一種播放包含多視頻段的視頻的裝置。本發(fā)明實(shí)施例的方案可以實(shí)現(xiàn)視頻段間的無延遲平滑切換,避免出現(xiàn)“卡頓”現(xiàn)象。
文檔編號(hào)G11B20/00GK102903377SQ20121043170
公開日2013年1月30日 申請(qǐng)日期2012年11月1日 優(yōu)先權(quán)日2012年11月1日
發(fā)明者鄧治民 申請(qǐng)人:北京奇藝世紀(jì)科技有限公司