本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及視頻播放技術(shù)領(lǐng)域,尤其涉及用于切換視頻流的方法和裝置。
背景技術(shù):
流媒體是指采用流式傳輸技術(shù)在網(wǎng)絡(luò)上連續(xù)實(shí)時(shí)播放的媒體格式,如音頻、視頻或多媒體文件。流媒體技術(shù)是把連續(xù)的影像和聲音信息經(jīng)過(guò)壓縮處理后放在網(wǎng)站服務(wù)器上,由視頻服務(wù)器向用戶計(jì)算機(jī)順序或?qū)崟r(shí)地傳送各個(gè)壓縮包,讓用戶一邊下載一邊觀看、收聽,而不需要等待整個(gè)壓縮文件下載到自己的計(jì)算機(jī)上才可以觀看的網(wǎng)絡(luò)傳輸技術(shù)。
然而,在現(xiàn)有的流媒體服務(wù)器中,為了提升播放器端的加載速度,通常是在服務(wù)器中設(shè)置一個(gè)畫面組的緩存,當(dāng)播放器端發(fā)送視頻播放請(qǐng)求后,服務(wù)器會(huì)向播放器端發(fā)送緩存中的畫面組,使得播放器端可以立即開始播放,然而,由于一些因素的影響,畫面組的存在可能會(huì)造成視頻播放的延遲,如果設(shè)置的畫面組的幀數(shù)較大,則造成視頻播放的延遲也較大,如果設(shè)置的畫面組的幀數(shù)較小,雖然造成視頻播放的延遲較小,但是視頻的質(zhì)量也會(huì)降低。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)的目的在于提出一種改進(jìn)的用于切換視頻流的方法和裝置,來(lái)解決以上背景技術(shù)部分提到的技術(shù)問(wèn)題。
第一方面,本申請(qǐng)?zhí)峁┝艘环N用于切換視頻流的方法,所述方法包括:響應(yīng)于接收到終端發(fā)送的視頻的播放請(qǐng)求信息,獲取所述視頻的視頻流,其中,所述視頻流包括:第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,畫面組幀數(shù)為視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),所述第二關(guān)鍵幀為與所述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,所述第一畫面組幀數(shù)小于所述第二畫面組幀數(shù);向所述終端發(fā)送所述第一畫面組幀數(shù)的視頻流,查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,并提取所述關(guān)鍵幀的解碼時(shí)間戳;在所述第二畫面組幀數(shù)的視頻流中,查找是否存在與所述解碼時(shí)間戳相同的幀;響應(yīng)于查找到存在與所述解碼時(shí)間戳相同的幀,則進(jìn)一步檢測(cè)所述幀是否為關(guān)鍵幀;響應(yīng)于檢測(cè)出所述幀為關(guān)鍵幀,則向所述終端發(fā)送所述第二畫面組幀數(shù)的視頻流。
在一些實(shí)施例中,所述獲取所述視頻的視頻流,包括:從所述第一畫面組幀數(shù)的視頻流的緩存中獲取所述視頻的第一畫面組幀數(shù)的視頻流,并存儲(chǔ)到第一發(fā)送隊(duì)列中;從所述第二畫面組幀數(shù)的視頻流的緩存中獲取所述視頻的第二畫面組幀數(shù)的視頻流,并存儲(chǔ)到第二發(fā)送隊(duì)列中。
在一些實(shí)施例中,所述第二畫面組幀數(shù)與所述第一畫面組幀數(shù)的比值為正整數(shù)。
在一些實(shí)施例中,所述第一畫面組幀數(shù)的視頻流與所述第二畫面組幀數(shù)的視頻流具有相同的序列參數(shù)組。
在一些實(shí)施例中,所述查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,包括:獲取所述第一畫面組幀數(shù)的視頻流中的幀的標(biāo)識(shí);利用所述標(biāo)識(shí),查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀。
第二方面,本申請(qǐng)?zhí)峁┝艘环N用于切換視頻流的裝置,所述裝置包括:獲取單元,配置用于響應(yīng)于接收到終端發(fā)送的視頻的播放請(qǐng)求信息,獲取所述視頻的視頻流,其中,所述視頻流包括:第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,畫面組幀數(shù)為視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),所述第二關(guān)鍵幀為與所述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,所述第一畫面組幀數(shù)小于所述第二畫面組幀數(shù);提取單元,配置用于向所述終端發(fā)送所述第一畫面組幀數(shù)的視頻流,查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,并提取所述關(guān)鍵幀的解碼時(shí)間戳;查找單元,配置用于在所述第二畫面組幀數(shù)的視頻流中,查找是否存在與所述解碼時(shí)間戳相同的幀;檢測(cè)單元,配置用于響應(yīng)于查找到存在與所述解碼時(shí)間戳相同的幀,則進(jìn)一步檢測(cè)所述幀是否為關(guān)鍵幀;發(fā)送單元,配置用于響應(yīng)于檢測(cè)出所述幀為關(guān)鍵幀,則向所述終端發(fā)送所述第二畫面組幀數(shù)的視頻流。
在一些實(shí)施例中,所述獲取單元包括:第一獲取模塊,配置用于從所述第一畫面組幀數(shù)的視頻流的緩存中獲取所述視頻的第一畫面組幀數(shù)的視頻流,并存儲(chǔ)到第一發(fā)送隊(duì)列中;第二獲取模塊,配置用于從所述第二畫面組幀數(shù)的視頻流的緩存中獲取所述視頻的第二畫面組幀數(shù)的視頻流,并存儲(chǔ)到第二發(fā)送隊(duì)列中。
在一些實(shí)施例中,所述第二畫面組幀數(shù)與所述第一畫面組幀數(shù)的比值為正整數(shù)。
在一些實(shí)施例中,所述第一畫面組幀數(shù)的視頻流與所述第二畫面組幀數(shù)的視頻流具有相同的序列參數(shù)組。
在一些實(shí)施例中,所述提取單元包括:獲取模塊,配置用于獲取所述第一畫面組幀數(shù)的視頻流中的幀的標(biāo)識(shí);查找模塊,配置用于利用所述標(biāo)識(shí),查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀。
本申請(qǐng)?zhí)峁┑挠糜谇袚Q視頻流的方法和裝置,通過(guò)為視頻準(zhǔn)備兩條視頻流,分別為第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,且第一畫面組幀數(shù)小于第二畫面組幀數(shù),首先向終端發(fā)送第一畫面組幀數(shù)的視頻流,查找第一畫面組幀數(shù)的視頻流的關(guān)鍵幀,并提取關(guān)鍵幀的解碼時(shí)間戳,而后在第二畫面組幀數(shù)的視頻流中查找是否存在與上述解碼時(shí)間戳相同的關(guān)鍵幀,若存在,則向終端發(fā)送第二畫面組幀數(shù)的視頻流,由于從畫面組幀數(shù)小的視頻流切換到畫面組幀數(shù)大的視頻流,從而,既保證了視頻播放的低延遲,又提升了視頻的畫面質(zhì)量。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1是本申請(qǐng)可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;
圖2是根據(jù)本申請(qǐng)的用于切換視頻流的方法的一個(gè)實(shí)施例的流程圖;
圖3是根據(jù)本申請(qǐng)的用于切換視頻流的方法的又一個(gè)實(shí)施例的流程圖;
圖4是根據(jù)本申請(qǐng)的用于切換視頻流的裝置的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;
圖5是適于用來(lái)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的服務(wù)器的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本申請(qǐng)作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋相關(guān)發(fā)明,而非對(duì)該發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。
需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本申請(qǐng)。
圖1示出了可以應(yīng)用本申請(qǐng)的用于切換視頻流的方法或用于切換視頻流的裝置的實(shí)施例的示例性系統(tǒng)架構(gòu)100。
如圖1所示,系統(tǒng)架構(gòu)100可以包括終端設(shè)備101、102、103,網(wǎng)絡(luò)104和服務(wù)器105。網(wǎng)絡(luò)104用以在終端設(shè)備101、102、103和服務(wù)器105之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)104可以包括各種連接類型,例如有線、無(wú)線通信鏈路或者光纖電纜等等。
用戶可以使用終端設(shè)備101、102、103通過(guò)網(wǎng)絡(luò)104與服務(wù)器105交互,以接收或發(fā)送消息等。終端設(shè)備101、102、103上可以安裝有各種通訊客戶端應(yīng)用,例如視頻播放器、網(wǎng)絡(luò)直播類應(yīng)用、視頻搜索類應(yīng)用和社交平臺(tái)軟件等。
終端設(shè)備101、102、103可以是具有顯示屏并且支持視頻播放的各種電子設(shè)備,包括但不限于智能手機(jī)、平板電腦、電子書閱讀器、MP4(Moving Picture Experts Group Audio Layer IV,動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面4)播放器、膝上型便攜計(jì)算機(jī)和臺(tái)式計(jì)算機(jī)等等。
服務(wù)器105可以是提供各種服務(wù)的服務(wù)器,例如對(duì)終端設(shè)備101、102、103上發(fā)送的視頻的播放請(qǐng)求信息提供支持的后臺(tái)視頻服務(wù)器。后臺(tái)視頻服務(wù)器可以對(duì)接收到的視頻的播放請(qǐng)求信息等數(shù)據(jù)進(jìn)行分析等處理,并將處理結(jié)果(例如視頻流數(shù)據(jù))反饋給終端設(shè)備。
需要說(shuō)明的是,本申請(qǐng)實(shí)施例所提供的用于切換視頻流的方法一般由服務(wù)器105執(zhí)行,相應(yīng)地,用于切換視頻流的裝置一般設(shè)置于服務(wù)器105中。
應(yīng)該理解,圖1中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目?jī)H僅是示意性的。根據(jù)實(shí)現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。
繼續(xù)參考圖2,示出了根據(jù)本申請(qǐng)的用于切換視頻流的方法的一個(gè)實(shí)施例的流程200。所述的用于切換視頻流的方法,包括以下步驟:
步驟201,響應(yīng)于接收到終端發(fā)送的視頻的播放請(qǐng)求信息,獲取視頻的視頻流。
在本實(shí)施例中,響應(yīng)于接收到用戶通過(guò)有線連接方式或者無(wú)線連接方式利用終端發(fā)送的視頻的播放請(qǐng)求信息,用于切換視頻流的方法運(yùn)行于其上的電子設(shè)備(例如圖1所示的服務(wù)器)可以獲取用戶請(qǐng)求播放的視頻的視頻流,其中,上述視頻流是指視頻數(shù)據(jù)的傳輸,例如,它能夠被作為一個(gè)穩(wěn)定的和連續(xù)的流通過(guò)網(wǎng)絡(luò)處理,因?yàn)榱鲃?dòng),客戶端瀏覽器或插件能夠在整個(gè)文件被傳輸完成前顯示多媒體數(shù)據(jù)。上述視頻流可以包括第一畫面組(Group of Pictures,GOP)幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,一個(gè)畫面組就是一組連續(xù)的畫面,畫面組幀數(shù)可以是視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),上述第二關(guān)鍵幀為與上述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,其中,上述關(guān)鍵幀也可以被稱為I幀(I frame),又可以被稱為內(nèi)部畫面(Intra Picture),I幀通常是每個(gè)GOP的第一個(gè)幀,經(jīng)過(guò)適度地壓縮,作為隨機(jī)訪問(wèn)的參考點(diǎn),也可以被當(dāng)成圖像。上述第一畫面組幀數(shù)需小于上述第二畫面組幀數(shù)。
作為示例,當(dāng)上述第一畫面組幀數(shù)的視頻流為IBBPIBBPIBBP時(shí),其中,I為I幀,B為B幀,P為P幀,上述B幀是雙向內(nèi)插幀,上述P幀是前向預(yù)測(cè)幀,上述I幀是一個(gè)完整的畫面,P幀和B幀記錄的是相對(duì)于I幀的變化,則上述第一畫面組幀數(shù)為從第一個(gè)I幀到第二個(gè)I幀的前一幀P幀的幀的個(gè)數(shù),即上述第一畫面組幀數(shù)為4;第二畫面組幀數(shù)需大于上述第一畫面組幀數(shù),則上述第二畫面組幀數(shù)可以為大于4的任一畫面組幀數(shù),例如,當(dāng)上述第二畫面組幀數(shù)為5時(shí),第二畫面組幀數(shù)的視頻流可以為IBBBPIBBBP。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,當(dāng)上述電子設(shè)備接收到終端設(shè)備發(fā)送的視頻的播放請(qǐng)求信息時(shí),上述電子設(shè)備可以從上述第一畫面組幀數(shù)的視頻流的緩存中獲取上述視頻的第一畫面組幀數(shù)的視頻流并將其存儲(chǔ)到第一發(fā)送隊(duì)列中,并從上述第二畫面組幀數(shù)的視頻流的緩存中獲取上述視頻的第二畫面組幀數(shù)的視頻流并將其存儲(chǔ)到第二發(fā)送隊(duì)列中。在上述電子設(shè)備從視頻流的緩存中獲取視頻流之前,上述電子設(shè)備可以接收視頻的幀,當(dāng)接收到視頻的幀時(shí),會(huì)將上述幀存儲(chǔ)到緩存中,如果上述幀是I幀時(shí),則會(huì)清空上述緩存中的幀并將I幀存儲(chǔ)到緩存中,所以畫面組緩存中有且只有一個(gè)I幀,且I幀為第一幀。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,上述第二畫面組幀數(shù)與上述第一畫面組幀數(shù)的比值可以為正整數(shù),例如,若第一畫面組幀數(shù)為30幀時(shí),則上述第二畫面組幀數(shù)可以為60幀、90幀等等。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,上述第一畫面組幀數(shù)的視頻流可以與上述第二畫面組幀數(shù)的視頻流具有相同的序列參數(shù)組(Sequence Parameter Sets,SPS),序列參數(shù)組也可以被稱為序列參數(shù)集,其中,上述序列參數(shù)組用來(lái)描述視頻序列中不經(jīng)常改變的信息。在H.264解碼中,首先過(guò)濾碼流獲得參數(shù)組,參數(shù)組是一種通過(guò)改進(jìn)視頻流的結(jié)構(gòu)從而增強(qiáng)錯(cuò)誤恢復(fù)能力的方法,比如,當(dāng)一些關(guān)鍵信息(如序列的頭信息)比特的丟失會(huì)造成解碼的嚴(yán)重負(fù)面效應(yīng),而H.264把這些關(guān)鍵信息分離出來(lái),憑借參數(shù)組的設(shè)計(jì),確保在易出錯(cuò)的環(huán)境中能正確的傳輸。
步驟202,向終端發(fā)送第一畫面組幀數(shù)的視頻流,查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,并提取關(guān)鍵幀的解碼時(shí)間戳。
在本實(shí)施例中,在步驟201中獲取到第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流之后,上述電子設(shè)備可以向上述終端設(shè)備發(fā)送上述第一畫面組幀數(shù)的視頻流,在視頻流的發(fā)送過(guò)程中,上述電子設(shè)備可以查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,當(dāng)查找到關(guān)鍵幀之后,上述電子設(shè)備可以提取上述關(guān)鍵幀的解碼時(shí)間戳(Decoding Time Stamp,DTS),解碼時(shí)間戳也可以被稱為解碼時(shí)間標(biāo)簽。在數(shù)字電視系統(tǒng)碼流分析中,對(duì)數(shù)字電視基本碼流(Packetized Elementary Streams,PES)進(jìn)行分析時(shí),打包的基本碼流是非定長(zhǎng)的,一般是一個(gè)存取單元的長(zhǎng)度,一個(gè)存取單元為一個(gè)視頻幀,也可以是一個(gè)音頻幀,為實(shí)現(xiàn)解碼的同步,每段之前還要插入相應(yīng)的時(shí)間標(biāo)記,即解碼時(shí)間戳。
步驟203,在第二畫面組幀數(shù)的視頻流中,查找是否存在與解碼時(shí)間戳相同的幀。
在本實(shí)施例中,上述電子設(shè)備可以在上述第二畫面組幀數(shù)的視頻流中查找是否存在與步驟202中提取出的第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的解碼時(shí)間戳相同的幀。上述電子設(shè)備可以首先提取第二畫面組幀數(shù)的視頻流中的各個(gè)幀的解碼時(shí)間戳;然后,與第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的解碼時(shí)間戳進(jìn)行對(duì)比,檢查是否相同。
步驟204,響應(yīng)于查找到存在與解碼時(shí)間戳相同的幀,則進(jìn)一步檢測(cè)幀是否為關(guān)鍵幀。
在本實(shí)施例中,當(dāng)查找到第二畫面組幀數(shù)的視頻流中存在與上述解碼時(shí)間戳相同的幀時(shí),上述電子設(shè)備可以進(jìn)一步檢測(cè)上述幀是否為關(guān)鍵幀。
步驟205,響應(yīng)于檢測(cè)出幀為關(guān)鍵幀,則向終端發(fā)送第二畫面組幀數(shù)的視頻流。
在本實(shí)施例中,當(dāng)檢測(cè)出上述幀為關(guān)鍵幀時(shí),上述電子設(shè)備可以向終端發(fā)送第二畫面組幀數(shù)的視頻流,并停止發(fā)送第一畫面組幀數(shù)的視頻流,即將發(fā)送的視頻流從第一畫面組幀數(shù)的視頻流切換成第二畫面組幀數(shù)的視頻流。
進(jìn)一步參考圖3,其示出了用于切換視頻流的方法的又一個(gè)實(shí)施例的流程300。該用于切換視頻流的方法的流程300,包括以下步驟:
步驟301,響應(yīng)于接收到終端發(fā)送的視頻的播放請(qǐng)求信息,獲取視頻的視頻流。
在本實(shí)施例中,響應(yīng)于接收到用戶通過(guò)有線連接方式或者無(wú)線連接方式利用終端發(fā)送的視頻的播放請(qǐng)求信息,用于切換視頻流的方法運(yùn)行于其上的電子設(shè)備(例如圖1所示的服務(wù)器)可以獲取用戶請(qǐng)求播放的視頻的視頻流,其中,上述視頻流是指視頻數(shù)據(jù)的傳輸,例如,它能夠被作為一個(gè)穩(wěn)定的和連續(xù)的流通過(guò)網(wǎng)絡(luò)處理,因?yàn)榱鲃?dòng),客戶端瀏覽器或插件能夠在整個(gè)文件被傳輸完成前顯示多媒體數(shù)據(jù)。上述視頻流可以包括第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,一個(gè)畫面組就是一組連續(xù)的畫面,畫面組幀數(shù)可以是視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),上述第二關(guān)鍵幀為與上述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,其中,上述關(guān)鍵幀也可以被稱為I幀,又可以被稱為內(nèi)部畫面,I幀通常是每個(gè)GOP的第一個(gè)幀,經(jīng)過(guò)適度地壓縮,做為隨機(jī)訪問(wèn)的參考點(diǎn),也可以被當(dāng)成圖像。上述第一畫面組幀數(shù)需小于上述第二畫面組幀數(shù)。
步驟302,向終端發(fā)送第一畫面組幀數(shù)的視頻流,獲取第一畫面組幀數(shù)的視頻流中的幀的標(biāo)識(shí)。
在本實(shí)施例中,在步驟301中獲取到第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流之后,上述電子設(shè)備可以向上述終端設(shè)備發(fā)送上述第一畫面組幀數(shù)的視頻流,在視頻流的發(fā)送過(guò)程中,每發(fā)送一幀的畫面,上述電子設(shè)備可以獲取上述幀的標(biāo)識(shí)。在發(fā)送視頻流之前,可以在視頻流的每一幀的頭部標(biāo)明這一幀的類型,例如,在H.264中,幀的類型會(huì)標(biāo)注在slice_header中,上述電子設(shè)備通過(guò)檢查這個(gè)標(biāo)志位,就可以獲取幀的標(biāo)識(shí)。
步驟303,利用標(biāo)識(shí),查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,并提取關(guān)鍵幀的解碼時(shí)間戳。
在本實(shí)施例中,上述第一畫面組幀數(shù)的視頻流中包括I幀(關(guān)鍵幀)、B幀和P幀,且I幀、B幀和P幀分別對(duì)應(yīng)著不同的標(biāo)識(shí),上述電子設(shè)備可以利用步驟302中獲取的幀的標(biāo)識(shí),查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,之后,提取上述關(guān)鍵幀的解碼時(shí)間戳。
步驟304,在第二畫面組幀數(shù)的視頻流中,查找是否存在與解碼時(shí)間戳相同的幀。
在本實(shí)施例中,上述電子設(shè)備可以在上述第二畫面組幀數(shù)的視頻流中查找是否存在與步驟303提取出的第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的解碼時(shí)間戳相同的幀。上述電子設(shè)備可以首先提取第二畫面組幀數(shù)的視頻流中的各個(gè)幀的解碼時(shí)間戳;然后,與第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的解碼時(shí)間戳進(jìn)行對(duì)比,檢查是否相同。
步驟305,響應(yīng)于查找到存在與解碼時(shí)間戳相同的幀,則進(jìn)一步檢測(cè)幀是否為關(guān)鍵幀。
在本實(shí)施例中,當(dāng)查找到第二畫面組幀數(shù)的視頻流中存在與上述解碼時(shí)間戳相同的幀時(shí),上述電子設(shè)備可以進(jìn)一步檢測(cè)上述幀是否為關(guān)鍵幀。
步驟306,響應(yīng)于檢測(cè)出幀為關(guān)鍵幀,則向終端發(fā)送第二畫面組幀數(shù)的視頻流。
在本實(shí)施例中,當(dāng)檢測(cè)出上述幀為關(guān)鍵幀時(shí),上述電子設(shè)備可以向終端發(fā)送第二畫面組幀數(shù)的視頻流,并停止發(fā)送第一畫面組幀數(shù)的視頻流,即將發(fā)送的視頻流從第一畫面組幀數(shù)的視頻流切換成第二畫面組幀數(shù)的視頻流。
從圖3中可以看出,與圖2對(duì)應(yīng)的實(shí)施例相比,本實(shí)施例中的用于切換視頻流的方法的流程300突出了查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的步驟。由此,本實(shí)施例描述的方案可以準(zhǔn)確的查找出視頻流中的關(guān)鍵幀,從而可以更快速的提升視頻的畫面質(zhì)量。
進(jìn)一步參考圖4,作為對(duì)上述各圖所示方法的實(shí)現(xiàn),本申請(qǐng)?zhí)峁┝艘环N用于切換視頻流的裝置的一個(gè)實(shí)施例,該裝置實(shí)施例與圖2所示的方法實(shí)施例相對(duì)應(yīng),該裝置具體可以應(yīng)用于各種電子設(shè)備中。
如圖4所示,本實(shí)施例所述的用于切換視頻流的裝置400包括:獲取單元401、提取單元402、查找單元403、檢測(cè)單元404和發(fā)送單元405。其中,獲取單元401配置用于響應(yīng)于接收到終端發(fā)送的視頻的播放請(qǐng)求信息,獲取所述視頻的視頻流,其中,所述視頻流包括:第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,畫面組幀數(shù)為視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),所述第二關(guān)鍵幀為與所述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,所述第一畫面組幀數(shù)小于所述第二畫面組幀數(shù);提取單元402配置用于向所述終端發(fā)送所述第一畫面組幀數(shù)的視頻流,查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,并提取所述關(guān)鍵幀的解碼時(shí)間戳;查找單元403配置用于在所述第二畫面組幀數(shù)的視頻流中,查找是否存在與所述解碼時(shí)間戳相同的幀;檢測(cè)單元404配置用于響應(yīng)于查找到存在與所述解碼時(shí)間戳相同的幀,則進(jìn)一步檢測(cè)所述幀是否為關(guān)鍵幀;發(fā)送單元405配置用于響應(yīng)于檢測(cè)出所述幀為關(guān)鍵幀,則向所述終端發(fā)送所述第二畫面組幀數(shù)的視頻流。
在本實(shí)施例中,響應(yīng)于接收到用戶通過(guò)有線連接方式或者無(wú)線連接方式利用終端發(fā)送的視頻的播放請(qǐng)求信息,用于切換視頻流的裝置400的獲取單元401可以獲取用戶請(qǐng)求播放的視頻的視頻流,其中,上述視頻流是指視頻數(shù)據(jù)的傳輸。上述視頻流可以包括第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,一個(gè)畫面組就是一組連續(xù)的畫面,畫面組幀數(shù)可以是視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),上述第二關(guān)鍵幀為與上述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,其中,上述關(guān)鍵幀也可以被稱為I幀,又可以被稱為內(nèi)部畫面,I幀通常是每個(gè)GOP的第一個(gè)幀,經(jīng)過(guò)適度地壓縮,作為隨機(jī)訪問(wèn)的參考點(diǎn),也可以被當(dāng)成圖像。上述第一畫面組幀數(shù)需小于上述第二畫面組幀數(shù)。
在本實(shí)施例中,在上述獲取單元401中獲取到第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流之后,上述提取單元402可以向上述終端設(shè)備發(fā)送上述第一畫面組幀數(shù)的視頻流,在視頻流的發(fā)送過(guò)程中,上述提取單元402可以查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,當(dāng)查找到關(guān)鍵幀之后,上述提取單元402可以提取上述關(guān)鍵幀的解碼時(shí)間戳。在數(shù)字電視系統(tǒng)碼流分析中,對(duì)數(shù)字電視基本碼流進(jìn)行分析時(shí),打包的基本碼流是非定長(zhǎng)的,一般是一個(gè)存取單元的長(zhǎng)度,一個(gè)存取單元為一個(gè)視頻幀,也可以是一個(gè)音頻幀,為實(shí)現(xiàn)解碼的同步,每段之前還要插入相應(yīng)的時(shí)間標(biāo)記,即解碼時(shí)間戳。
在本實(shí)施例中,上述查找單元403可以在上述第二畫面組幀數(shù)的視頻流中查找是否存在與上述提取單元402中提取出的第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的解碼時(shí)間戳相同的幀。上述查找單元403可以首先提取第二畫面組幀數(shù)的視頻流中的各個(gè)幀的解碼時(shí)間戳;然后,與第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀的解碼時(shí)間戳進(jìn)行對(duì)比,檢查是否相同。
在本實(shí)施例中,當(dāng)查找到第二畫面組幀數(shù)的視頻流中存在與上述解碼時(shí)間戳相同的幀時(shí),上述檢測(cè)單元404可以進(jìn)一步檢測(cè)上述幀是否為關(guān)鍵幀。
在本實(shí)施例中,當(dāng)檢測(cè)出上述幀為關(guān)鍵幀時(shí),上述發(fā)送單元405可以向終端發(fā)送第二畫面組幀數(shù)的視頻流,并停止發(fā)送第一畫面組幀數(shù)的視頻流,即將發(fā)送的視頻流從第一畫面組幀數(shù)的視頻流切換成第二畫面組幀數(shù)的視頻流。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,獲取單元401可以包括第一獲取模塊4011和第二獲取模塊4012。當(dāng)上述電子設(shè)備接收到終端設(shè)備發(fā)送的視頻的播放請(qǐng)求信息時(shí),上述第一獲取模塊4011可以從上述第一畫面組幀數(shù)的視頻流的緩存中獲取上述視頻的第一畫面組幀數(shù)的視頻流并將其存儲(chǔ)到第一發(fā)送隊(duì)列中,上述第二獲取模塊4012從上述第二畫面組幀數(shù)的視頻流的緩存中獲取上述視頻的第二畫面組幀數(shù)的視頻流并將其存儲(chǔ)到第二發(fā)送隊(duì)列中。在上述獲取單元401從視頻流的緩存中獲取視頻流之前,上述獲取單元401可以接收視頻的幀,當(dāng)接收到視頻的幀時(shí),會(huì)將上述幀存儲(chǔ)到緩存中,如果上述幀是I幀時(shí),則會(huì)清空上述緩存中的幀并將I幀存儲(chǔ)到緩存中,所以畫面組緩存中有且只有一個(gè)I幀,且I幀為第一幀。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,上述第二畫面組幀數(shù)與上述第一畫面組幀數(shù)的比值可以為正整數(shù),例如,若第一畫面組幀數(shù)為30幀時(shí),則上述第二畫面組幀數(shù)可以為60幀、90幀等等。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,上述第一畫面組幀數(shù)的視頻流可以與上述第二畫面組幀數(shù)的視頻流具有相同的序列參數(shù)組,其中,上述序列參數(shù)組用來(lái)描述視頻序列中不經(jīng)常改變的信息。在H.264解碼中,首先過(guò)濾碼流獲得參數(shù)組,參數(shù)組是一種通過(guò)改進(jìn)視頻流的結(jié)構(gòu)從而增強(qiáng)錯(cuò)誤恢復(fù)能力的方法,比如,當(dāng)一些關(guān)鍵信息(如序列的頭信息)比特的丟失會(huì)造成解碼的嚴(yán)重負(fù)面效應(yīng),而H.264把這些關(guān)鍵信息分離出來(lái),憑借參數(shù)組的設(shè)計(jì),確保在易出錯(cuò)的環(huán)境中能正確的傳輸。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,上述提取單元402可以包括獲取模塊4021和查找模塊4022。在視頻流的發(fā)送過(guò)程中,每發(fā)送一幀的畫面,上述獲取模塊4021可以獲取上述幀的標(biāo)識(shí)。在發(fā)送視頻流之前,可以在視頻流的每一幀的頭部標(biāo)明這一幀的類型。之后,上述查找模塊4022可以利用上述獲取模塊4021中獲取的幀的標(biāo)識(shí),查找第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀。
下面參考圖5,其示出了適于用來(lái)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的服務(wù)器的計(jì)算機(jī)系統(tǒng)500的結(jié)構(gòu)示意圖。
如圖5所示,計(jì)算機(jī)系統(tǒng)500包括中央處理單元(CPU)501,其可以根據(jù)存儲(chǔ)在只讀存儲(chǔ)器(ROM)502中的程序或者從存儲(chǔ)部分508加載到隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)503中的程序而執(zhí)行各種適當(dāng)?shù)膭?dòng)作和處理。在RAM503中,還存儲(chǔ)有系統(tǒng)500操作所需的各種程序和數(shù)據(jù)。CPU501、ROM502以及RAM503通過(guò)總線504彼此相連。輸入/輸出(I/O)接口505也連接至總線504。
以下部件連接至I/O接口505:包括鍵盤、鼠標(biāo)等的輸入部分506;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚(yáng)聲器等的輸出部分507;包括硬盤等的存儲(chǔ)部分508;以及包括諸如LAN卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分509。通信部分509經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動(dòng)器510也根據(jù)需要連接至I/O接口505??刹鹦督橘|(zhì)511,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲(chǔ)器等等,根據(jù)需要安裝在驅(qū)動(dòng)器510上,以便于從其上讀出的計(jì)算機(jī)程序根據(jù)需要被安裝入存儲(chǔ)部分508。
特別地,根據(jù)本公開的實(shí)施例,上文參考流程圖描述的過(guò)程可以被實(shí)現(xiàn)為計(jì)算機(jī)軟件程序。例如,本公開的實(shí)施例包括一種計(jì)算機(jī)程序產(chǎn)品,其包括有形地包含在機(jī)器可讀介質(zhì)上的計(jì)算機(jī)程序,上述計(jì)算機(jī)程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實(shí)施例中,該計(jì)算機(jī)程序可以通過(guò)通信部分509從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)511被安裝。
附圖中的流程圖和框圖,圖示了按照本申請(qǐng)各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,上述模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
描述于本申請(qǐng)實(shí)施例中所涉及到的單元可以通過(guò)軟件的方式實(shí)現(xiàn),也可以通過(guò)硬件的方式來(lái)實(shí)現(xiàn)。所描述的單元也可以設(shè)置在處理器中,例如,可以描述為:一種處理器包括獲取單元、提取單元、查找單元、檢測(cè)單元和發(fā)送單元。其中,這些單元的名稱在某種情況下并不構(gòu)成對(duì)該單元本身的限定。例如,獲取單元還可以被描述為“獲取視頻的視頻流的單元”。
作為另一方面,本申請(qǐng)還提供了一種非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì),該非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是上述實(shí)施例中上述裝置中所包含的非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì);也可以是單獨(dú)存在,未裝配入終端中的非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。上述非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有一個(gè)或者多個(gè)程序,當(dāng)上述一個(gè)或者多個(gè)程序被一個(gè)設(shè)備執(zhí)行時(shí),使得上述設(shè)備:響應(yīng)于接收到終端發(fā)送的視頻的播放請(qǐng)求信息,獲取所述視頻的視頻流,其中,所述視頻流包括:第一畫面組幀數(shù)的視頻流和第二畫面組幀數(shù)的視頻流,畫面組幀數(shù)為視頻流中從第一關(guān)鍵幀到第二關(guān)鍵幀的前一幀的幀的個(gè)數(shù),所述第二關(guān)鍵幀為與所述第一關(guān)鍵幀相鄰的后一關(guān)鍵幀,所述第一畫面組幀數(shù)小于所述第二畫面組幀數(shù);向所述終端發(fā)送所述第一畫面組幀數(shù)的視頻流,查找所述第一畫面組幀數(shù)的視頻流中的關(guān)鍵幀,并提取所述關(guān)鍵幀的解碼時(shí)間戳;在所述第二畫面組幀數(shù)的視頻流中,查找是否存在與所述解碼時(shí)間戳相同的幀;響應(yīng)于查找到存在與所述解碼時(shí)間戳相同的幀,則進(jìn)一步檢測(cè)所述幀是否為關(guān)鍵幀;響應(yīng)于檢測(cè)出所述幀為關(guān)鍵幀,則向所述終端發(fā)送所述第二畫面組幀數(shù)的視頻流。
以上描述僅為本申請(qǐng)的較佳實(shí)施例以及對(duì)所運(yùn)用技術(shù)原理的說(shuō)明。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本申請(qǐng)中所涉及的發(fā)明范圍,并不限于上述技術(shù)特征的特定組合而成的技術(shù)方案,同時(shí)也應(yīng)涵蓋在不脫離所述發(fā)明構(gòu)思的情況下,由上述技術(shù)特征或其等同特征進(jìn)行任意組合而形成的其它技術(shù)方案。例如上述特征與本申請(qǐng)中公開的(但不限于)具有類似功能的技術(shù)特征進(jìn)行互相替換而形成的技術(shù)方案。