欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種針對GPU硬件視頻的解碼容錯方法與流程

文檔序號:12498434閱讀:1306來源:國知局

本發(fā)明涉及一種針對GPU硬件視頻的解碼容錯方法。



背景技術(shù):

隨著多媒體信息技術(shù)的發(fā)展,視頻越來越廣泛地應(yīng)用于網(wǎng)絡(luò)監(jiān)控、視頻直播、家庭影院、移動終端等各個領(lǐng)域,而視頻的分辨率也逐步從最初的標(biāo)清(SD)逐步向高清(HD)、超高清(UHD)演變。越來越高的分辨率對于視頻解碼器的運算能力提出了更高的要求,傳統(tǒng)CPU解碼面臨著解碼速度慢、資源消耗多等諸多問題,GPU(Graphics Processing Unit,圖形處理器)解碼應(yīng)運而生。

GPU是一種專門在服務(wù)器、PC(personal computer,個人電腦)、工作站、游戲機和一些移動設(shè)備(如平板電腦、智能手機等)上圖像運算和視頻解碼處理工作的微處理器。大部分GPU都有專用的視頻硬件解碼加速芯片,支持主流的視頻格式的硬件解碼,用于在觀看視頻時保證性能、節(jié)省功耗。

現(xiàn)有服務(wù)器和PC級別的GPU解碼器主要有基于Nvidia顯卡的NVCUVID解碼器和基于Intel顯卡的Intel MSDK解碼器,它們?yōu)橛脩籼峁┝讼嚓P(guān)的API(Application Programming Interface,應(yīng)用程序編程接口),讓用戶將視頻碼流分段送入解碼API,GPU解碼器內(nèi)部再將API接收的視頻碼流進行解析。GPU解碼器利用GPU強大的計算性能和并行特性,能夠高效地處理解碼過程中數(shù)據(jù)密集且高度獨立化的模塊,因此GPU解碼器速度比CPU快,但是由于GPU解碼器側(cè)重于并行性,對于完整的視頻碼流而言可以按照它原有的并行方式解碼,但是在面對復(fù)雜多變的視頻碼流如丟包、碼流混亂時,就不能再按照既定的并行方式解碼,否則將導(dǎo)致解碼出錯。

視頻編碼器在編碼時會將視頻的寬、高、色度格式、幀率等信息寫入到視頻碼流的SPS(Sequence Parameter Set,序列參數(shù)集)頭信息中;將一個視頻分為若干幀,并將幀類型、以及該幀所對應(yīng)的參考幀等信息寫入到每一幀的PPS(Picture Parameter Set,圖像參數(shù)集)頭信息中;將每一幀切分成若干個Slice(片),并將Slice在當(dāng)前幀中的index(索引)信息寫入到每個Slice頭信息中;將每一個Slice分成若干個MB(Macroblock,宏塊),將圖像中的編碼殘差等寫入到MB信息中。

因此,解碼器在解碼一個視頻時,會從SPS頭信息中提取寬、高等信息,在解碼每一幀時,從PPS頭信息中提取幀類型、參考幀等信息,在解碼每一個Slice時,從Slice頭信息中提取Slice index,在解碼每一個MB時,從MB碼流中提取編碼殘差并解析成畫面細(xì)節(jié),從而呈現(xiàn)給觀眾。

現(xiàn)有GPU解碼器在面對復(fù)雜多變的視頻碼流時容易出錯,導(dǎo)致解碼器終止工作。



技術(shù)實現(xiàn)要素:

本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足而提供一種針對GPU硬件視頻的解碼容錯方法。

為實現(xiàn)上述目的,一方面,本發(fā)明提供的一種針對GPU硬件視頻的解碼容錯方法,包括如下步驟:

在SPS層檢測視頻的寬和高是否屬于集合M1、所述視頻的色度格式是否屬于集合M2、所述視頻的幀率是否屬于集合M3,當(dāng)所述視頻的寬和高、色度格式和幀率屬于相應(yīng)集合則標(biāo)記當(dāng)前所述視頻的SPS頭信息可正確分析,當(dāng)所述視頻的寬和高、色度格式和幀率不屬于相應(yīng)集合則尋找下一個包含所述SPS頭信息的視頻碼流;

當(dāng)所述視頻的SPS頭信息可正確分析,則在PPS層判斷當(dāng)前幀的幀類型是否屬于集合M4、所述當(dāng)前幀的參考幀數(shù)目是否屬于集合M5,當(dāng)所述幀類型和參考幀數(shù)目屬于相應(yīng)集合則標(biāo)記所述當(dāng)前幀的PPS頭信息可正確分析,當(dāng)當(dāng)所述幀類型和參考幀數(shù)目不屬于相應(yīng)集合則尋找下一個包含所述PPS頭信息的視頻碼流;

當(dāng)所述當(dāng)前幀的PPS頭信息可正確分析,則在Slice層判斷當(dāng)前Slice的index是否等于前一個獲取到的Slice的index+1,當(dāng)不等于時則丟棄余下所有的Slice信息并尋找下一個包含所述PPS頭信息的視頻碼流,當(dāng)?shù)扔跁r則判斷當(dāng)前Slice是否所述當(dāng)前幀中的最后一個Slice頭信息;

當(dāng)所述當(dāng)前Slice不是所述當(dāng)前幀中的最后一個Slice頭信息則將所述當(dāng)前Slice頭信息保存至緩沖區(qū)并尋找下一個Slice頭信息;

當(dāng)所述當(dāng)前Slice頭信息是所述當(dāng)前幀中的最后一個Slice頭信息則將所述緩沖區(qū)中的碼流送入GPU解碼器。

優(yōu)選地,集合M1={{128,96},{176,144},{320,240},{640,480},{704,576},{720,480},{720,576},{800,480},{960,540},{1024,576},{1280,720},{1440,1080},{1920,1080},{1920,1088},{2560,1440},{3840,2160},{4096,2160}}。

優(yōu)選地,集合M2={YUV420,YUV422}。

優(yōu)選地,集合M3={23.97,24,25,29.97,30,50,59.94,60}。

優(yōu)選地,集合M4={I,P,B}。

優(yōu)選地,集合M5={0~32}。

根據(jù)本發(fā)明提供的一種針對GPU硬件視頻的解碼容錯方法,在視頻碼流進入GPU解碼器之前,先在CPU上對視頻碼流進行一次語法分析,將易出錯的碼流丟棄并將有效的碼流送入GPU解碼器,既保證了解碼速度又提升了GPU解碼器的容錯性。

具體實施方式

下面詳細(xì)描述本發(fā)明的實施例。

本發(fā)明一實施例提供了一種針對GPU硬件視頻的解碼容錯方法,包括如下步驟:

1、在SPS層,檢測視頻的寬和高是否屬于集合M1、色度格式是否屬于集合M2、幀率是否屬于集合M3,其中

M1={{128,96},{176,144},{320,240},{640,480},{704,576},{720,480},{720,576},{800,480},{960,540},{1024,576},{1280,720},{1440,1080},{1920,1080},{1920,1088},{2560,1440},{3840,2160},{4096,2160}},

M2={YUV420,YUV422},

M3={23.97,24,25,29.97,30,50,59.94,60},

若是則標(biāo)記為當(dāng)前視頻的SPS頭信息可正確解析,并執(zhí)行下一步驟,若不是則尋找下一個包含SPS頭信息的視頻碼流;

2、在PPS層,判斷當(dāng)前幀的類型是否屬于集合M4、參考幀數(shù)目是否屬于集合M5,其中

M4={I,P,B},

M5={0~32},

若是則標(biāo)記為當(dāng)前幀的PPS頭信息可正確解析,執(zhí)行下一步驟,若不是則尋找下一個包含PPS頭信息的視頻碼流;

3、在Slice層,判斷當(dāng)前Slice的index是否等于前一個獲取到的Slice的index加1,若不等于則丟棄接下來所有的Slice信息,尋找下一個包含PPS的視頻碼流,若等于則判斷當(dāng)前Slice是否當(dāng)前幀中的最后一個Slice頭信息,若不是將當(dāng)前Slice保存到一個緩沖區(qū)臨時保持,并尋找下一個Slice頭信息,否則執(zhí)行下一步驟;

4、將緩沖區(qū)中的碼流送入GPU解碼器。

現(xiàn)有解碼器方案通常采用純CPU解碼或純GPU解碼,純CPU解碼能力受CPU性能影響,通常速度較慢,功耗較高;純GPU解碼芯片速度快,功耗低,但是由于解碼芯片硬件固化,對于因流媒體網(wǎng)絡(luò)傳輸丟包的隨機性影響穩(wěn)定性,容易造成crash,而本發(fā)明將CPU和GPU解碼進行結(jié)合,增加CPU解碼預(yù)分析階段,將視頻碼流中影響最大的SPS、PPS、Slice層語法信息進行針對性的語法分析,將可能導(dǎo)致GPU解碼器出錯的部分視頻碼流丟棄,將能夠正常解析的碼流送入GPU解碼器,在保證解碼速度的同時提升解碼穩(wěn)定性。

而本發(fā)明的針對GPU硬件視頻的解碼容錯方法,考慮到MB碼流信息不易引起GPU解碼錯誤,且為保證CPU解碼階段的速度,不做MB級的語法分析,只需做Slice級的語法分析,同時開設(shè)緩沖區(qū),將一幀中所有的Slice進行緩存,在確保一幀中所有Slice的index是有序排列而且完整的情況下,再將該幀的碼流送給GPU解碼器,解決了Slice重要信息丟失以及部分碼流混亂導(dǎo)致GPU解碼器出錯的問題。

將本發(fā)明和純GPU解碼方法進行測試和對比,測試源為復(fù)雜多變的衛(wèi)星視頻流,測試時長為30*24小時,純GPU解碼方法在此期間報錯次數(shù)為7次,而本發(fā)明報錯次數(shù)為0次,說明本發(fā)明有較好的解碼容錯能力,提升了解碼穩(wěn)定性。同時,相對于純GPU解碼,本發(fā)明的解碼速度下降在1%以內(nèi),說明本發(fā)明的解碼速度得到了有效保障。

因此,綜上,根據(jù)本發(fā)明提供的一種針對GPU硬件視頻的解碼容錯方法,在視頻碼流進入GPU解碼器之前,先在CPU上對視頻碼流進行一次語法分析,將易出錯的碼流丟棄并將有效的碼流送入GPU解碼器,既保證了解碼速度又提升了GPU解碼器的容錯性。

在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。盡管上面已經(jīng)示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在不脫離本發(fā)明的原理和宗旨的情況下在本發(fā)明的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
建阳市| 肥西县| 新余市| 白沙| 双辽市| 曲阳县| 班戈县| 梧州市| 曲麻莱县| 五华县| 马鞍山市| 昌黎县| 监利县| 鞍山市| 剑川县| 无棣县| 永登县| 江都市| 安溪县| 洛南县| 赞皇县| 仪陇县| 当阳市| 安徽省| 通道| 彭山县| 浦东新区| 阳城县| 驻马店市| 定西市| 武陟县| 衡东县| 资兴市| 许昌县| 莒南县| 桃源县| 边坝县| 密山市| 白水县| 嘉定区| 开原市|