本發(fā)明涉及視頻編解碼技術領域,尤其涉及視頻數(shù)據(jù)解碼方法、編碼方法以及相關設備。
背景技術:
在一些監(jiān)控視頻中,通常會有大量的靜止或小運動的區(qū)域,對于這些區(qū)域的當前視頻圖像,很容易在之前甚至很久之前處理過的幀里面找到匹配的參考圖像。因此,在編碼器對這些監(jiān)控視頻進行編碼時,應當盡量多使用幀間編碼幀,以減少對幀內(nèi)編碼幀的使用,從而可以大大降低碼率以提高視頻編碼效率。其中,編碼器所編碼得到的幀間編碼幀可以包括P幀和B幀,即P幀和B幀均是基于幀間壓縮算法生成的,P幀具體為前向預測編碼幀,B幀具體為雙向預測內(nèi)插編碼幀;其中,編碼器所編碼得到的幀內(nèi)編碼幀可以包括I幀,I幀是基于幀內(nèi)壓縮算法生成的,I幀具體為完整編碼的幀。
另一方面,隨機接入是對于編碼后的視頻碼流的一個重要需求。目前的隨機接入方法是:先由編碼器將視頻碼流中的I幀設置為隨機接入點,并將攜帶隨機接入點的視頻碼流發(fā)送到解碼器,若解碼器檢測到要從所接收到的視頻碼流中的目標幀(該目標幀可以為視頻碼流中的任意一個數(shù)據(jù)幀)的位置開始播放視頻,則解碼器可以在視頻碼流中沿著與解碼順序相反的方向搜索處于目標幀之前且離目標幀最近的隨機接入點(即I幀),從該最近的隨機接入點開始按照解碼順序逐一解碼數(shù)據(jù)幀,直到解碼完目標幀,則解碼器可以將解碼后的目標幀發(fā)送到播放器以進行播放。由此可見,若視頻碼流中的I幀數(shù)量比較少,則可能導致該最近的隨機接入點到目標幀之間的幀間編碼幀比較多,即解碼器需要花費較多的時間才能解碼出目標幀,從而降低了隨機接入的訪問效率。
現(xiàn)有技術提供了一種提高隨機接入的訪問效率的方法,通過在視頻碼流中增加I幀數(shù)量來提高隨機接入的訪問效率,但是由于I幀數(shù)量較多,此時又會降低視頻編碼效率。
技術實現(xiàn)要素:
本發(fā)明實施例提供視頻數(shù)據(jù)解碼方法、編碼方法以及相關設備,可以在提高視頻編碼效率的同時,提高隨機接入的訪問效率。
本發(fā)明第一方面提供一種視頻數(shù)據(jù)解碼方法,包括:
確定視頻編碼數(shù)據(jù)中的起始播放幀,并從起始播放幀開始沿著與視頻編碼數(shù)據(jù)的解碼順序相反的方向,搜索距離起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點;
當目標隨機接入點的隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)目標隨機接入點所參考的幀內(nèi)隨機接入點,對目標隨機接入點進行解碼;幀內(nèi)隨機接入點是視頻編碼數(shù)據(jù)中的隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀;
從解碼后的目標隨機接入點開始沿著與解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完起始播放幀。
其中,幀間編碼幀可以為B幀或P幀,幀內(nèi)編碼幀可以為I幀。例如,在搜索出基于P幀或B幀的目標隨機接入點之后,可以從目標隨機接入點的位置開始沿著與視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測并解碼數(shù)據(jù)幀的NALU頭信息,通過NALU頭信息中的nal_unit_type的數(shù)值搜索出距離目標隨機接入點最近的基于I幀的隨機接入點(該基于I幀的隨機接入點為目標隨機接入點的參考幀),并解碼所搜索出的基于I幀的隨機接入點,進而直接解碼目標隨機接入點,并從目標隨機接入點開始,按照解碼順序逐一解碼后面的幀間編碼幀,直到解碼出起始播放幀,即可開始播放起始播放幀對應的圖像數(shù)據(jù)。由于不僅將幀內(nèi)編碼幀作為隨機接入點,還可以將部分幀間編碼幀也作為隨機接入點,所以可以在不增加幀內(nèi)編碼幀的前提下,增加隨機接入點的數(shù)量,從而可以在提高視頻編碼效率的同時,提高隨機接入的訪問效率。
在第一種可能的實施方式中,確定視頻編碼數(shù)據(jù)中的起始播放幀,并從起始播放幀開始沿著與視頻編碼數(shù)據(jù)的解碼順序相反的方向,搜索距離起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點,包括:
確定起始播放幀在所屬視頻編碼數(shù)據(jù)中的第一位置;
從第一位置開始沿著與視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測數(shù)據(jù)幀的NALU頭信息;NALU頭信息包括數(shù)據(jù)幀的幀類型;
當檢測到NALU頭信息中的數(shù)據(jù)幀的幀類型為隨機接入點類型時,將當前檢測出的為隨機接入點類型的數(shù)據(jù)幀確定為目標隨機接入點;
NALU頭信息中的隨機接入點類型為:預設的基于幀間編碼幀的第一隨機接入點類型或基于幀內(nèi)編碼幀的第二隨機接入點類型。
通過在NALU頭信息中預設基于幀間編碼幀的第一隨機接入點類型,可以使得P幀或B幀也可以當做隨機接入點使用,進而可以提高隨機接入點的數(shù)量,以提高隨機接入的訪問效率。
結合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,獲取起始播放幀在所屬視頻編碼數(shù)據(jù)中的第一位置,具體包括:
獲取對視頻編碼數(shù)據(jù)的播放操作指令,并根據(jù)播放操作指令所攜帶的起始播放時間信息在視頻編碼數(shù)據(jù)中查找處于起始播放位置的數(shù)據(jù)幀以作為起始播放幀,并將起始播放位置確定為起始播放幀在視頻編碼數(shù)據(jù)中的第一位置。
結合第一方面的第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,根據(jù)目標隨機接入點所參考的幀內(nèi)隨機接入點,對目標隨機接入點進行解碼,包括:
確定目標隨機接入點在視頻編碼數(shù)據(jù)中的第二位置,并從目標隨機接入點對應的NALU頭信息中獲取用于指示目標隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量;
根據(jù)預設參考數(shù)量從第二位置開始沿著與解碼順序相反的方向逐一查找目標隨機接入點所需參考的幀內(nèi)隨機接入點;所查找出的目標隨機接入點所需參考的幀內(nèi)隨機接入點的數(shù)量為預設參考數(shù)量;
對所查找出的目標隨機接入點所需參考的幀內(nèi)隨機接入點進行解碼以得到解碼后的幀內(nèi)隨機接入點;
根據(jù)解碼后的幀內(nèi)隨機接入點對目標隨機接入點進行解碼。
其中,查找預設參考數(shù)量的幀內(nèi)隨機接入點的過程可以為:從第二位置開始沿著與視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測并解碼數(shù)據(jù)幀的NALU頭信息,通過NALU頭信息中的nal_unit_type的數(shù)值搜索出預設參考數(shù)量的基于I幀的隨機接入點。例如,若預設參考數(shù)量為1,則在目標隨機接入點之前搜索距離目標隨機接入點最近的幀內(nèi)隨機接入點;若預設參考數(shù)量為2,則在目標隨機接入點之前搜索距離目標隨機接入點最近和第二近的幀內(nèi)隨機接入點。
結合第一方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,若目標隨機接入點的解碼規(guī)則與P幀解碼規(guī)則相同,則預設參考數(shù)量為至少一個;
若目標隨機接入點的解碼規(guī)則與B幀解碼規(guī)則相同,則預設參考數(shù)量為至少兩個。
其中,若NALU頭信息中沒有指明預設參考數(shù)量,則可以默認基于P幀的目標隨機接入點所對應的預設參考數(shù)量為1,且可以默認基于B幀的目標隨機接入點所對應的預設參考數(shù)量為2。
本發(fā)明第二方面提供一種視頻數(shù)據(jù)編碼方法,包括:
對原始數(shù)據(jù)進行編碼,得到視頻編碼數(shù)據(jù);視頻編碼數(shù)據(jù)包括多個幀間編碼幀和多個幀內(nèi)編碼幀;
在視頻編碼數(shù)據(jù)中的多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;
將視頻編碼數(shù)據(jù)中的多個幀內(nèi)編碼幀中各幀內(nèi)編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀內(nèi)編碼幀的第二隨機接入點類型。
通過在視頻編碼過程中,設置NALU頭信息中的nal_unit_type的值,可以將某些P幀或B幀設置為基于幀間編碼幀的隨機接入點,使得在解碼視頻編碼數(shù)據(jù)時,可以提供更多的隨機接入點,以提高隨機接入的訪問效率。
在第一種可能的實現(xiàn)方式中,在視頻編碼數(shù)據(jù)中的多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,具體包括:
將視頻編碼數(shù)據(jù)中的第一個幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,并從第一個幀間編碼幀開始每間隔預設數(shù)量的幀,選擇一個幀間編碼幀,以將所選擇的幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型。
結合第二方面,在第二種可能的實現(xiàn)方式中,在視頻編碼數(shù)據(jù)中的多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,具體包括:
根據(jù)預設的比例數(shù)值在視頻編碼數(shù)據(jù)中的多個幀間編碼幀中隨機選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;所選擇出的幀間編碼幀的數(shù)量與視頻編碼數(shù)據(jù)中的幀間編碼幀的總數(shù)量的比值等于預設的比例數(shù)值。
結合第二方面,在第三種可能的實現(xiàn)方式中,還包括:
在各幀間隨機接入點分別對應的NALU頭信息中添加用于指示幀間隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量。
本發(fā)明第三方面提供了一種視頻數(shù)據(jù)解碼裝置,該視頻數(shù)據(jù)解碼裝置具有實現(xiàn)上述第一方面的方法實際中視頻數(shù)據(jù)解碼裝置行為的功能。功能可以通過硬件實現(xiàn),也可以通過硬件執(zhí)行相應的軟件實現(xiàn)。硬件或軟件包括一個或多個與上述功能相對應的模塊。
在一個可能的設計中,視頻數(shù)據(jù)解碼裝置的結構中包括解碼器,解碼器被配置為支持視頻數(shù)據(jù)解碼裝置執(zhí)行上述第一方面的方法中相應的功能。視頻數(shù)據(jù)解碼裝置還可以包括存儲器,存儲器用于與解碼器耦合,其保存視頻數(shù)據(jù)解碼裝置必要的程序指令和數(shù)據(jù)。
本發(fā)明第四方面提供了一種視頻數(shù)據(jù)編碼裝置,該視頻數(shù)據(jù)編碼裝置具有實現(xiàn)上述第二方面的方法實際中視頻數(shù)據(jù)編碼裝置行為的功能。功能可以通過硬件實現(xiàn),也可以通過硬件執(zhí)行相應的軟件實現(xiàn)。硬件或軟件包括一個或多個與上述功能相對應的模塊。
在一個可能的設計中,視頻數(shù)據(jù)編碼裝置的結構中包括編碼器,編碼器被配置為支持視頻數(shù)據(jù)編碼裝置執(zhí)行上述第二方面的方法中相應的功能。視頻數(shù)據(jù)編碼裝置還可以包括存儲器,存儲器用于與編碼器耦合,其保存視頻數(shù)據(jù)編碼裝置必要的程序指令和數(shù)據(jù)。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例提供的一種視頻數(shù)據(jù)處理方法的流程示意圖;
圖2是本發(fā)明實施例提供的另一種視頻數(shù)據(jù)處理方法的流程示意圖;
圖3是本發(fā)明實施例提供的一種視頻編碼數(shù)據(jù)的結構示意圖;
圖4是本發(fā)明實施例提供的一種視頻數(shù)據(jù)編碼裝置的結構示意圖;
圖5是本發(fā)明實施例提供的一種視頻數(shù)據(jù)解碼裝置的結構示意圖;
圖6是本發(fā)明實施例提供的一種確定搜索模塊的結構示意圖;
圖7是本發(fā)明實施例提供的一種第一解碼模塊的結構示意圖;
圖8是本發(fā)明實施例提供的另一種視頻數(shù)據(jù)編碼裝置的結構示意圖;
圖9是本發(fā)明實施例提供的另一種視頻數(shù)據(jù)解碼裝置的結構示意圖。
具體實施方式
下面結合附圖對本發(fā)明的實施例進行描述。
請參見圖1,是本發(fā)明實施例提供的一種視頻數(shù)據(jù)編碼方法的流程示意圖,所述方法具體描述視頻編碼的過程,所述方法可以包括:
S101,對原始數(shù)據(jù)進行編碼,得到視頻編碼數(shù)據(jù);所述視頻編碼數(shù)據(jù)包括多個幀間編碼幀和多個幀內(nèi)編碼幀;
具體的,視頻發(fā)送端可以包括編碼器,通過所述編碼器可以對采集到的原始視頻數(shù)據(jù)進行編碼,以得到視頻編碼數(shù)據(jù)。例如,所述視頻發(fā)送端可以為視頻監(jiān)控器,視頻監(jiān)控器通過攝像頭采集圖像數(shù)據(jù)(即原始視頻數(shù)據(jù)),視頻監(jiān)控器還可以通過編碼器對采集到的圖像數(shù)據(jù)進行編碼以生成視頻編碼數(shù)據(jù),所述視頻編碼數(shù)據(jù)可以包括多個幀內(nèi)編碼幀和多個幀間編碼幀,如所述視頻編碼數(shù)據(jù)有100個數(shù)據(jù)幀,其中,2個數(shù)據(jù)幀為所述幀內(nèi)編碼幀,98個數(shù)據(jù)幀為幀間編碼幀。所述幀間編碼幀可以為B幀或P幀,所述幀內(nèi)編碼幀可以為I幀,I幀可以為每個GOP(Group of Pictures,畫面組)的第一個幀。
S102,在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU(Network Abstraction Layer-unit,網(wǎng)絡抽象層單元)頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;
具體的,在編碼得到幀間編碼幀后,所述視頻發(fā)送端可以進一步在所述多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,以下將幀類型為第一隨機接入點類型的幀間編碼幀稱為幀間隨機接入點。其中,各幀間隨機接入點的參考幀都為I幀。
其中,編碼器將選擇出的至少一個幀間編碼幀設置為幀間隨機接入點的過程具體可以為:將所述視頻編碼數(shù)據(jù)中的第一個幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,并從所述第一個幀間編碼幀開始每間隔預設數(shù)量的幀,選擇一個幀間編碼幀,以將所選擇的幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為所述基于幀間編碼幀的第一隨機接入點類型。其中,在S101步驟中,所述編碼器即可從第一個幀間編碼幀開始每間隔所述預設數(shù)量的幀,就編碼一個參考幀為I幀的幀間編碼幀,當然也可以在此基礎上編碼更多的參考幀為I幀的幀間編碼幀,以保證后續(xù)所設置的幀間隨機接入點的參考幀都為I幀。例如,在兩個I幀之間,每間隔20個數(shù)據(jù)幀,便選擇其中一個幀間編碼幀以作為幀間隨機接入點
或者,所述編碼器將選擇出的至少一個幀間編碼幀設置為幀間隨機接入點的過程具體可以為:根據(jù)預設的比例數(shù)值在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中隨機選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;所選擇出的幀間編碼幀的數(shù)量與所述視頻編碼數(shù)據(jù)中的幀間編碼幀的總數(shù)量的比值等于所述預設的比例數(shù)值。例如,若有102個數(shù)據(jù)幀,其中2個數(shù)據(jù)幀為I幀(也為基于I幀的隨機接入點),且預設的比例數(shù)值為20%(即說明100個幀間編碼幀中需要有20個幀間隨機接入點),則所述編碼器可以在剩余的100個幀間編碼幀中隨機選擇出20個幀,以作為幀間隨機接入點(即基于P幀的隨機接入點或基于B幀的隨機接入點),每相鄰兩個幀間隨機接入點之間的幀間編碼幀的數(shù)量可以不同。
進一步的,所述編碼器將NALU頭信息中的數(shù)據(jù)幀的幀類型設置為所述基于幀間編碼幀的第一隨機接入點類型的具體過程可以為:所述編碼器可以將所選擇出的幀間編碼幀對應的NALU頭信息中的nal_unit_type的值設置為保留數(shù)值范圍內(nèi)的數(shù)值(如14-18),或設置為未指定數(shù)值范圍內(nèi)的數(shù)值(如24-31),進而將所設置的數(shù)值對應的幀類型確定為基于幀間編碼幀的第一隨機接入點類型。
其中,對于未被設置為幀間隨機接入點的幀間編碼幀,依然將所對應的NALU頭信息中的nal_unit_type的值設置為P幀類型或B幀類型。
可選的,所述視頻發(fā)送端還可以進一步在所述各幀間隨機接入點分別對應的NALU頭信息中添加用于指示所述幀間隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量。所述預設參考數(shù)量為幀間隨機接入點所參考的基于I幀的隨機接入點的數(shù)量。例如,若S101中是以一個I幀作為參考幀對某幀間編碼幀進行編碼,則在將該幀間編碼幀設置為幀間隨機接入點的時候可以同時設置所對應的預設參考數(shù)據(jù)為1;若S101中是以2個I幀作為參考幀對某幀間編碼幀進行編碼,則在將該幀間編碼幀設置為幀間隨機接入點的時候可以同時設置所對應的預設參考數(shù)據(jù)為2。進一步的,若將某個P幀設置為幀間隨機接入點,則該基于P幀的幀間隨機接入點對應的預設參考數(shù)量可以為至少一個;若將某個B幀設置為幀間隨機接入點,則該基于B幀的幀間隨機接入點對應的預設參考數(shù)量可以為至少兩個。由于考慮到若幀間編碼幀與所參考的I幀之間存在圖像重合的情況,且為了后續(xù)可以解碼出更準確的幀間編碼幀,所以可以通過參考更多的I幀來編碼幀間編碼幀。
幀間隨機接入點對應的NALU頭信息可以如下表1所示:
表1
其中,表1中的If(nal_unit_type==PRAP||nal_unit_type==BRAP)語句是用來表示該幀是基于P幀的隨機接入點還是基于B幀的隨機接入點(統(tǒng)稱為幀間隨機接入點),“PRAP”字段是用于表示基于P幀的隨機接入點類型所對應的數(shù)值,“BRAP”字段是用于表示基于B幀的隨機接入點類型所對應的數(shù)值。refer_num是NALU頭信息中的新語法元素,且refer_num的數(shù)值可以表示所述預設參考數(shù)量??蛇x的,也可以無需設置refer_num,而是通過使用PRAP_1(表示所述預設參考數(shù)量為1)或PRAP_2(表示所述預設參考數(shù)量為2)或PRAP_3(表示所述預設參考數(shù)量為3)來替換If(nal_unit_type==PRAP||nal_unit_type==BRAP)語句中的“PRAP”字段?;蛘?,在無需設置refer_num時,可以默認基于P幀的隨機接入點對應的預設參考數(shù)量為1,且可以默認基于B幀的隨機接入點對應的預設參考數(shù)量為2??蛇x的,也可以在所述NALU頭信息中不設置If(nal_unit_type==PRAP||nal_unit_type==BRAP)語句,即可以直接通過檢測nal_unit_type的值以確定對應幀是否為幀內(nèi)隨機接入點(即所述基于I幀的隨機接入點)還是幀間隨機接入點。
S103,將所述視頻編碼數(shù)據(jù)中的所述多個幀內(nèi)編碼幀中各幀內(nèi)編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀內(nèi)編碼幀的第二隨機接入點類型;
具體的,所述編碼器可以在編碼得到幀內(nèi)編碼幀后,進一步將各幀內(nèi)編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀內(nèi)編碼幀的第二隨機接入點類型。例如,將某I幀的NALU頭信息中的nal_unit_type的值設置為5,則表明該I幀的幀類型為基于I幀的第二隨機接入點類型,即該I幀為IDR(Instantaneous Decoding Refresh,即時解碼刷新)幀。其中,為基于I幀的第二隨機接入點類型的數(shù)據(jù)幀即為基于I幀的隨機接入點,所述基于I幀的隨機接入點可以包括IDR、BLA(Broken Link Access)、CRA(Clean Random Access)幀,所述基于I幀的隨機接入點也可以包括與IDR、BLA、CRA幀的特性都不同的其他基于I幀的隨機接入點。
可選的,所述編碼器可以進一步通過有線網(wǎng)絡或無線網(wǎng)絡將攜帶所述幀間隨機接入點和所述幀內(nèi)隨機接入點的視頻編碼數(shù)據(jù)發(fā)送到視頻接收端,所述視頻接收端可以為監(jiān)控室中的電腦設備,且所述視頻接收端包括解碼器。
進一步的,請一并參見圖2,是本發(fā)明實施例提供的一種視頻數(shù)據(jù)解碼方法的流程示意圖,所述方法具體描述視頻解碼的過程,所述方法可以包括:
S201,確定視頻編碼數(shù)據(jù)中的起始播放幀,并從所述起始播放幀開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向,搜索距離所述起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點;
具體的,在上述圖1對應實施例中的S103步驟之后,視頻接收端可以接收所述編碼器發(fā)送的視頻編碼數(shù)據(jù),此時,當用戶選擇從所述視頻編碼數(shù)據(jù)中的某個數(shù)據(jù)幀的位置開始播放視頻(如點擊到所述視頻編碼數(shù)據(jù)中的該數(shù)據(jù)幀的位置)時,所述視頻接收端中的解碼器可以將該被選擇到的數(shù)據(jù)幀確定為起始播放幀。所述視頻接收端可以進一步將所述起始播放幀在所述視頻編碼數(shù)據(jù)中的位置確定為第一位置,并從所述第一位置開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測數(shù)據(jù)幀的NALU頭信息;所述NALU頭信息包括數(shù)據(jù)幀的幀類型;檢測所述NALU頭信息的具體過程可以為:解碼所述NALU頭信息,并從解碼后的NALU頭信息中提取nal_unit_type的數(shù)值,并分析nal_unit_type的數(shù)值所對應的幀類型。當檢測到所述NALU頭信息中的數(shù)據(jù)幀的幀類型為隨機接入點類型時,將當前檢測出的為所述隨機接入點類型的數(shù)據(jù)幀確定為目標隨機接入點,即搜索出了距離所述起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀。其中,所述NALU頭信息中的所述隨機接入點類型為:預設的基于幀間編碼幀的第一隨機接入點類型或基于幀內(nèi)編碼幀的第二隨機接入點類型。
其中,獲取所述第一位置的具體過程可以為:獲取對視頻編碼數(shù)據(jù)的播放操作指令,并根據(jù)所述播放操作指令所攜帶的起始播放時間信息在所述視頻編碼數(shù)據(jù)中查找處于起始播放位置的數(shù)據(jù)幀,以作為起始播放幀,并將所述起始播放位置確定為所述起始播放幀在所述視頻編碼數(shù)據(jù)中的第一位置。例如,若用戶將所述視頻編碼數(shù)據(jù)的播放進度條拉至3分50.12秒,則可以將3分50.12秒對應的數(shù)據(jù)幀確定為起始播放幀,并將3分50.12秒記錄為所述起始播放幀對應的第一位置,或將所述起始播放幀與第一個數(shù)據(jù)幀之間的數(shù)據(jù)幀的數(shù)量確定為所述起始播放幀對應的第一位置。
S202,當所述目標隨機接入點的所述隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)所述目標隨機接入點所參考的幀內(nèi)隨機接入點,對所述目標隨機接入點進行解碼;
具體的,當所述目標隨機接入點的所述隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,即所述目標隨機接入點為基于P幀的隨機接入點或基于B幀的隨機接入點,此時將記錄所述目標隨機接入點在所述視頻編碼數(shù)據(jù)中的第二位置(如所述第二位置可以為所述目標隨機接入點所對應的時間信息),并從所述目標隨機接入點對應的NALU頭信息中獲取用于指示所述目標隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量。所述解碼器進一步根據(jù)所述預設參考數(shù)量從所述第二位置開始沿著與所述解碼順序相反的方向逐一查找所述目標隨機接入點所需參考的幀內(nèi)隨機接入點;所查找出的所述目標隨機接入點所需參考的幀內(nèi)隨機接入點的數(shù)量為所述預設參考數(shù)量;所述幀內(nèi)隨機接入點是所述視頻編碼數(shù)據(jù)中的所述隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀。查找所述預設參考數(shù)量的幀內(nèi)隨機接入點的過程可以為:繼續(xù)從所述第二位置開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測并解碼數(shù)據(jù)幀的NALU頭信息(此過程無需解碼數(shù)據(jù)幀以及對應的幀頭信息),通過NALU頭信息中的nal_unit_type的數(shù)值搜索出所述預設參考數(shù)量的基于I幀的隨機接入點。例如,若所述預設參考數(shù)量為1,則在所述目標隨機接入點之前搜索距離所述目標隨機接入點最近的幀內(nèi)隨機接入點;若所述預設參考數(shù)量為2,則在所述目標隨機接入點之前搜索距離所述目標隨機接入點最近和第二近的幀內(nèi)隨機接入點。
所述解碼器可以進一步對查找出的所述預設參考數(shù)量的幀內(nèi)隨機接入點進行解碼,由于所述幀內(nèi)隨機接入點均為基于I幀的隨機接入點,所以可以直接對所查找出的所述目標隨機接入點所需參考的幀內(nèi)隨機接入點進行完全解碼,并將解碼后的幀內(nèi)隨機接入點緩存為第一參考幀;再并根據(jù)所述第一參考幀對所述第二位置上的所述目標隨機接入點進行解碼。若所述目標隨機接入點是基于P幀的隨機接入點,則按照P幀的解碼規(guī)則對所述目標隨機接入點進行解碼;若所述目標隨機接入點是基于B幀的隨機接入點,則按照B幀的解碼規(guī)則對所述目標隨機接入點進行解碼。其中,P幀的解碼規(guī)則是指HEVC(High Efficiency Video Coding,視頻壓縮標準)標準中對P幀中的視頻數(shù)據(jù)進行解碼的規(guī)則,B幀的解碼規(guī)則是指HEVC標準中對B幀中的視頻數(shù)據(jù)進行解碼的規(guī)則,即通過P幀(或B幀)的解碼規(guī)則對P幀(或B幀)解碼后可以得到P幀(或B幀)對應的圖像數(shù)據(jù)。即基于P幀的隨機接入點與HEVC標準中所定義的P幀的不同之處,在于分別對應的NALU頭信息不同(具體為NALU頭信息中的幀類型不同);基于B幀的隨機接入點與HEVC標準中所定義的B幀的不同之處,也在于分別對應的NALU頭信息不同(具體為NALU頭信息中的幀類型不同)。
其中,若所述目標隨機接入點的解碼規(guī)則與P幀解碼規(guī)則相同,則所述目標隨機接入點對應的所述預設參考數(shù)量可以為至少一個,若未在所述NALU頭信息中指明所述預設參考數(shù)量,則可以默認所述預設參考數(shù)量為1個;若所述目標隨機接入點的解碼規(guī)則與B幀解碼規(guī)則相同,則所述目標隨機接入點對應的所述預設參考數(shù)量可以為至少兩個,若未在所述NALU頭信息中指明所述預設參考數(shù)量,則可以默認所述預設參考數(shù)量為兩個,即前向、后向各1個。
S203,從解碼后的目標隨機接入點開始沿著與所述解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完所述起始播放幀;
具體的,當所述解碼器完成對所述目標隨機接入點的解碼時,所述視頻接收端可以根據(jù)所述目標隨機接入點到所述起始播放幀之間的各數(shù)據(jù)幀以及所述起始播放幀分別對應的第二參考幀,從所述第二位置開始沿著與所述解碼順序相同的方向逐一解碼數(shù)據(jù)幀,并當解碼完所述起始播放幀時,所述解碼器可以將解碼后的起始播放幀發(fā)送到播放器,以使播放器播放所述起始播放幀。
其中,以所述目標隨機接入點到所述起始播放幀之間的一個數(shù)據(jù)幀A為例,所述數(shù)據(jù)幀A對應的所述第二參考幀可以是位于所述目標隨機接入點到所述起始播放幀之間,且處于所述數(shù)據(jù)幀A之前的數(shù)據(jù)幀,例如,所述第二參考幀是所述數(shù)據(jù)幀A的上一個數(shù)據(jù)幀,即解碼完所述第二參考幀后,即可根據(jù)解碼后的第二參考幀解碼所述數(shù)據(jù)幀A。或者,所述第二參考幀為所述第一參考幀;或者,所述第二參考幀為所述目標隨機接入點。通過對所述第二參考幀的范圍的設定,可以保證所述解碼器能夠順利解碼所述起始播放幀。
再請一并參見圖3,是本發(fā)明實施例提供的一種視頻編碼數(shù)據(jù)的結構示意圖,圖3中的GOP包括I幀、P幀以及B幀,其中,在A1位置的I幀和在A5的I幀均為基于I幀的隨機接入點,位于A2的B幀為基于B幀的隨機接入點,位于A3的P幀為基于P幀的隨機接入點,其他位置的數(shù)據(jù)幀均不為隨機接入點。當起始播放幀為位于A4的P幀時,則解碼器可以通過NALU頭信息往前搜索一個距離位于A4的P幀最近的隨機接入點,搜索到的隨機接入點為位于A3的基于P幀的隨機接入點,并記錄A3的位置;再進一步通過NALU頭信息往前搜索最近的一個基于I幀的隨機接入點(假設預設參考數(shù)量為1),該最近的基于I幀的隨機接入點是位于A1位置的隨機接入點,因此,可以解碼位于A1的隨機接入點,根據(jù)解碼后的位于A1的隨機接入點以及A3的位置,對位于A3的基于P幀的隨機接入點進行解碼,之后從A3的位置開始逐一解碼P幀、B幀以及位于A4的P幀,當位于A4的P幀解碼完后,則解碼器可以通知播放器開始播放位于A4的P幀所對應的視頻畫面。而現(xiàn)有技術的隨機接入法則需要從位于A1的隨機接入點逐一解碼數(shù)據(jù)幀到A4位置,由此可見,本發(fā)明實施例可以省略A3到A1之間的數(shù)據(jù)幀的解碼(只需解碼NALU頭信息即可),因此可以在不增加I幀數(shù)量的前提下提高隨機接入效率。
可選的,當所述目標隨機接入點的所述隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型時,可以直接解碼所述目標隨機接入點,并從所述目標隨機接入點的位置開始按照解碼順序逐一解碼數(shù)據(jù)幀,直到解碼出所述起始播放幀,則開始播放所述起始播放幀對應的圖像數(shù)據(jù)。
本發(fā)明實施例通過搜索位于起始播放幀之前且距離最近的為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點,可以在目標隨機接入點的隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)目標隨機接入點所參考的幀內(nèi)隨機接入點,對目標隨機接入點進行解碼;幀內(nèi)隨機接入點是視頻編碼數(shù)據(jù)中的隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀;之后,再從解碼后的目標隨機接入點開始沿著與解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完所述起始播放幀。由于不僅將幀內(nèi)編碼幀作為隨機接入點,還可以將部分幀間編碼幀也作為隨機接入點,所以可以在不增加幀內(nèi)編碼幀的前提下,增加隨機接入點的數(shù)量,從而可以在提高視頻編碼效率的同時,提高隨機接入的訪問效率。
請參見圖4,是本發(fā)明實施例提供的一種視頻數(shù)據(jù)編碼裝置1的結構示意圖,所述視頻數(shù)據(jù)編碼裝置1可以包括:編碼模塊10、第一設置模塊20、第二設置模塊30、數(shù)量設置模塊40;
所述編碼模塊10,用于對原始數(shù)據(jù)進行編碼,得到視頻編碼數(shù)據(jù);所述視頻編碼數(shù)據(jù)包括多個幀間編碼幀和多個幀內(nèi)編碼幀;
所述第一設置模塊20,用于在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;
具體的,所述第一設置模塊20可以具體用于將所述視頻編碼數(shù)據(jù)中的第一個幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,并從所述第一個幀間編碼幀開始每間隔預設數(shù)量的幀,選擇一個幀間編碼幀,以將所選擇的幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為所述基于幀間編碼幀的第一隨機接入點類型。
或者,所述第一設置模塊20可以具體用于根據(jù)預設的比例數(shù)值在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中隨機選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;所選擇出的幀間編碼幀的數(shù)量與所述視頻編碼數(shù)據(jù)中的幀間編碼幀的總數(shù)量的比值等于所述預設的比例數(shù)值。
所述第二設置模塊30,用于將所述視頻編碼數(shù)據(jù)中的所述多個幀內(nèi)編碼幀中各幀內(nèi)編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀內(nèi)編碼幀的第二隨機接入點類型。
所述數(shù)量設置模塊40,用于在所述各幀間隨機接入點分別對應的NALU頭信息中添加用于指示所述幀間隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量。
所述編碼模塊10、所述第一設置模塊20、所述第二設置模塊30以及所述數(shù)量設置模塊40的具體功能實現(xiàn)方式可以參見上述圖1對應實施例中的S101-S103,這里不再進行贅述。
進一步的,請一并參見圖5,是本發(fā)明實施例提供的一種視頻數(shù)據(jù)解碼裝置2的結構示意圖,所述視頻數(shù)據(jù)解碼裝置2可以包括:確定搜索模塊50、第一解碼模塊60、第二解碼模塊70;
所述確定搜索模塊50,用于確定視頻編碼數(shù)據(jù)中的起始播放幀,并從所述起始播放幀開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向,搜索距離所述起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點;
所述第一解碼模塊60,用于當所述目標隨機接入點的所述隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)所述目標隨機接入點所參考的幀內(nèi)隨機接入點,對所述目標隨機接入點進行解碼;所述幀內(nèi)隨機接入點是所述視頻編碼數(shù)據(jù)中的所述隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀;
所述第二解碼模塊70,用于從解碼后的目標隨機接入點開始沿著與所述解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完所述起始播放幀;
具體的,所述第二解碼模塊70可以具體用于根據(jù)所述目標隨機接入點到所述起始播放幀之間的各數(shù)據(jù)幀以及所述起始播放幀分別對應的第二參考幀,從所述第二位置開始沿著與所述解碼順序相同的方向逐一解碼數(shù)據(jù)幀,并當解碼完所述起始播放幀時播放所述起始播放幀對應的圖像數(shù)據(jù);其中,所述第二參考幀為位于所述目標隨機接入點到所述起始播放幀之間的數(shù)據(jù)幀;或者,所述第二參考幀為所述第一參考幀;或者,所述第二參考幀為所述目標隨機接入點。以所述目標隨機接入點到所述起始播放幀之間的一個數(shù)據(jù)幀A為例,所述數(shù)據(jù)幀A對應的所述第二參考幀可以是位于所述目標隨機接入點到所述起始播放幀之間,且處于所述數(shù)據(jù)幀A之前的數(shù)據(jù)幀,例如,所述第二參考幀是所述數(shù)據(jù)幀A的上一個數(shù)據(jù)幀,即解碼完所述第二參考幀后,即可根據(jù)解碼后的第二參考幀解碼所述數(shù)據(jù)幀A。或者,所述第二參考幀為所述第一參考幀;或者,所述第二參考幀為所述目標隨機接入點。通過對所述第二參考幀的范圍的設定,可以保證所述視頻接收端能夠順利解碼所述起始播放幀。
進一步的,請一并參見圖6,是本發(fā)明實施例提供的一種確定搜索模塊50的結構示意圖,所述確定搜索模塊50可以包括:位置確定單元501、檢測單元502、確定單元503;
所述位置確定單元501,用于確定起始播放幀在所屬視頻編碼數(shù)據(jù)中的第一位置;
具體的,所述位置確定單元501可以具體用于獲取對視頻編碼數(shù)據(jù)的播放操作指令,并根據(jù)所述播放操作指令所攜帶的起始播放時間信息在所述視頻編碼數(shù)據(jù)中查找處于起始播放位置的數(shù)據(jù)幀以作為起始播放幀,并將所述起始播放位置確定為所述起始播放幀在所述視頻編碼數(shù)據(jù)中的第一位置。
所述檢測單元502,用于從所述第一位置開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測數(shù)據(jù)幀的NALU頭信息;所述NALU頭信息包括數(shù)據(jù)幀的幀類型;
所述確定單元503,用于當檢測到所述NALU頭信息中的數(shù)據(jù)幀的幀類型為隨機接入點類型時,將當前檢測出的為所述隨機接入點類型的數(shù)據(jù)幀確定為目標隨機接入點;
所述NALU頭信息中的所述隨機接入點類型為:預設的基于幀間編碼幀的第一隨機接入點類型或基于幀內(nèi)編碼幀的第二隨機接入點類型。
其中,所述位置確定單元501、所述檢測單元502以及所述確定單元503的具體實現(xiàn)功能可以參見上述圖2對應實施例中的S201,這里不再進行贅述。
進一步的,再請一并參見圖7,是本發(fā)明實施例提供的一種第一解碼模塊60的結構示意圖,所述第一解碼模塊60可以包括:確定獲取單元601、參考幀查找單元602、參考解碼單元603、目標解碼單元604;
所述確定獲取單元601,用于確定所述目標隨機接入點在所述視頻編碼數(shù)據(jù)中的第二位置,并從所述目標隨機接入點對應的NALU頭信息中獲取用于指示所述目標隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量;
所述參考幀查找單元602,用于根據(jù)所述預設參考數(shù)量從所述第二位置開始沿著與所述解碼順序相反的方向逐一查找所述目標隨機接入點所需參考的幀內(nèi)隨機接入點;所查找出的所述目標隨機接入點所需參考的幀內(nèi)隨機接入點的數(shù)量為所述預設參考數(shù)量;
所述參考解碼單元603,用于對所查找出的所述目標隨機接入點所需參考的幀內(nèi)隨機接入點進行解碼以得到解碼后的幀內(nèi)隨機接入點;
所述目標解碼單元604,用于根據(jù)所述解碼后的幀內(nèi)隨機接入點對所述目標隨機接入點進行解碼。
其中,所述確定獲取單元601、所述參考幀查找單元602、所述參考解碼單元603以及所述目標解碼單元604的具體實現(xiàn)功能可以參見上述圖2對應實施例中的S202,這里不再進行贅述。
本發(fā)明實施例通過搜索位于起始播放幀之前且距離最近的為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點,可以在目標隨機接入點的隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)目標隨機接入點所參考的幀內(nèi)隨機接入點,對目標隨機接入點進行解碼;幀內(nèi)隨機接入點是視頻編碼數(shù)據(jù)中的隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀;之后,再從解碼后的目標隨機接入點開始沿著與解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完所述起始播放幀。由于不僅將幀內(nèi)編碼幀作為隨機接入點,還可以將部分幀間編碼幀也作為隨機接入點,所以可以在不增加幀內(nèi)編碼幀的前提下,增加隨機接入點的數(shù)量,從而可以在提高視頻編碼效率的同時,提高隨機接入的訪問效率。
請參見圖8,是本發(fā)明實施例提供的另一種視頻數(shù)據(jù)編碼裝置的結構示意圖。如圖8所示,所述視頻數(shù)據(jù)編碼裝置1000可以包括處理器1001、通信接口1002和存儲器1003(視頻數(shù)據(jù)編碼裝置1000中的處理器1001的數(shù)量可以為一個或多個,圖8中以一個處理器1001為例)。本發(fā)明的一些實施例中,處理器1001、通信接口1002和存儲器1003可通過通信總線或其他方式連接,其中,圖8以通過通信總線連接為例。
其中,所述通信接口1002,用于與解碼器通信;
所述存儲器1003用于存儲程序;
所述處理器1001用于執(zhí)行所述程序,以實現(xiàn)
對原始數(shù)據(jù)進行編碼,得到視頻編碼數(shù)據(jù);所述視頻編碼數(shù)據(jù)包括多個幀間編碼幀和多個幀內(nèi)編碼幀;
在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;
將所述視頻編碼數(shù)據(jù)中的所述多個幀內(nèi)編碼幀中各幀內(nèi)編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀內(nèi)編碼幀的第二隨機接入點類型。
其中,所述處理器1001在執(zhí)行在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型時,具體用于:
將所述視頻編碼數(shù)據(jù)中的第一個幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型,并從所述第一個幀間編碼幀開始每間隔預設數(shù)量的幀,選擇一個幀間編碼幀,以將所選擇的幀間編碼幀對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為所述基于幀間編碼幀的第一隨機接入點類型。
其中,所述處理器1001在執(zhí)行在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型時,具體用于:
根據(jù)預設的比例數(shù)值在所述視頻編碼數(shù)據(jù)中的所述多個幀間編碼幀中隨機選擇至少一個幀間編碼幀,并將所選擇的至少一個幀間編碼幀中各幀間編碼幀分別對應的NALU頭信息中的數(shù)據(jù)幀的幀類型設置為基于幀間編碼幀的第一隨機接入點類型;所選擇出的幀間編碼幀的數(shù)量與所述視頻編碼數(shù)據(jù)中的幀間編碼幀的總數(shù)量的比值等于所述預設的比例數(shù)值。
其中,所述處理器1001還用于:
在所述各幀間隨機接入點分別對應的NALU頭信息中添加用于指示所述幀間隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量。
本發(fā)明實施例通過在視頻編碼過程中,設置NALU頭信息中的nal_unit_type的值,可以將某些P幀或B幀設置為基于幀間編碼幀的隨機接入點,使得在解碼視頻編碼數(shù)據(jù)時,可以提供更多的隨機接入點,以提高隨機接入的訪問效率。
請參見圖9,是本發(fā)明實施例提供的另一種視頻數(shù)據(jù)解碼裝置的結構示意圖。如圖9所示,所述視頻數(shù)據(jù)解碼裝置2000可以包括處理器2001、通信接口2002和存儲器2003(視頻數(shù)據(jù)解碼裝置2000中的處理器2001的數(shù)量可以為一個或多個,圖9中以一個處理器2001為例)。本發(fā)明的一些實施例中,處理器2001、通信接口2002和存儲器2003可通過通信總線或其他方式連接,其中,圖9以通過通信總線連接為例。
其中,所述通信接口2002,用于與編碼器通信;
所述存儲器2003用于存儲程序;
所述處理器2001用于執(zhí)行所述程序,以實現(xiàn)
確定視頻編碼數(shù)據(jù)中的起始播放幀,并從所述起始播放幀開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向,搜索距離所述起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點;
當所述目標隨機接入點的所述隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)所述目標隨機接入點所參考的幀內(nèi)隨機接入點,對所述目標隨機接入點進行解碼;所述幀內(nèi)隨機接入點是所述視頻編碼數(shù)據(jù)中的所述隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀;
從解碼后的目標隨機接入點開始沿著與所述解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完所述起始播放幀。
其中,所述處理器2001在執(zhí)行確定視頻編碼數(shù)據(jù)中的起始播放幀,并從所述起始播放幀開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向,搜索距離所述起始播放幀最近且為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點時,具體用于:
確定起始播放幀在所屬視頻編碼數(shù)據(jù)中的第一位置;
從所述第一位置開始沿著與所述視頻編碼數(shù)據(jù)的解碼順序相反的方向逐一檢測數(shù)據(jù)幀的網(wǎng)絡抽象層單位NALU頭信息;所述NALU頭信息包括數(shù)據(jù)幀的幀類型;
當檢測到所述NALU頭信息中的數(shù)據(jù)幀的幀類型為隨機接入點類型時,將當前檢測出的為所述隨機接入點類型的數(shù)據(jù)幀確定為目標隨機接入點;
所述NALU頭信息中的所述隨機接入點類型為:預設的基于幀間編碼幀的第一隨機接入點類型或基于幀內(nèi)編碼幀的第二隨機接入點類型。
其中,所述處理器2001在執(zhí)行獲取起始播放幀在所屬視頻編碼數(shù)據(jù)中的第一位置時,具體用于:
獲取對視頻編碼數(shù)據(jù)的播放操作指令,并根據(jù)所述播放操作指令所攜帶的起始播放時間信息在所述視頻編碼數(shù)據(jù)中查找處于起始播放位置的數(shù)據(jù)幀以作為起始播放幀,并將所述起始播放位置確定為所述起始播放幀在所述視頻編碼數(shù)據(jù)中的第一位置。
其中,所述處理器2001在執(zhí)行根據(jù)所述目標隨機接入點所參考的幀內(nèi)隨機接入點,對所述目標隨機接入點進行解碼時,具體用于:
確定所述目標隨機接入點在所述視頻編碼數(shù)據(jù)中的第二位置,并從所述目標隨機接入點對應的NALU頭信息中獲取用于指示所述目標隨機接入點所需參考的幀內(nèi)隨機接入點數(shù)量的預設參考數(shù)量;
根據(jù)所述預設參考數(shù)量從所述第二位置開始沿著與所述解碼順序相反的方向逐一查找所述目標隨機接入點所需參考的幀內(nèi)隨機接入點;所查找出的所述目標隨機接入點所需參考的幀內(nèi)隨機接入點的數(shù)量為所述預設參考數(shù)量;
對所查找出的所述目標隨機接入點所需參考的幀內(nèi)隨機接入點進行解碼以得到解碼后的幀內(nèi)隨機接入點;
根據(jù)所述解碼后的幀內(nèi)隨機接入點對所述目標隨機接入點進行解碼。
其中,若所述目標隨機接入點的解碼規(guī)則與P幀解碼規(guī)則相同,則所述預設參考數(shù)量為至少一個;
若所述目標隨機接入點的解碼規(guī)則與B幀解碼規(guī)則相同,則所述預設參考數(shù)量為至少兩個。
本發(fā)明實施例通過搜索位于起始播放幀之前且距離最近的為隨機接入點類型的數(shù)據(jù)幀,并將搜索到的數(shù)據(jù)幀確定為目標隨機接入點,可以在目標隨機接入點的隨機接入點類型為預設的基于幀間編碼幀的第一隨機接入點類型時,根據(jù)目標隨機接入點所參考的幀內(nèi)隨機接入點,對目標隨機接入點進行解碼;幀內(nèi)隨機接入點是視頻編碼數(shù)據(jù)中的隨機接入點類型為基于幀內(nèi)編碼幀的第二隨機接入點類型的數(shù)據(jù)幀;之后,再從解碼后的目標隨機接入點開始沿著與解碼順序相同的方向逐一解碼數(shù)據(jù)幀,直到解碼完所述起始播放幀。由于不僅將幀內(nèi)編碼幀作為隨機接入點,還可以將部分幀間編碼幀也作為隨機接入點,所以可以在不增加幀內(nèi)編碼幀的前提下,增加隨機接入點的數(shù)量,從而可以在提高視頻編碼效率的同時,提高隨機接入的訪問效率。
本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
以上所揭露的僅為本發(fā)明較佳實施例而已,當然不能以此來限定本發(fā)明之權利范圍,因此依本發(fā)明權利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。