利用cpu和gpu實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及刑偵領(lǐng)域中對(duì)監(jiān)控視頻的處理,具體為一種利用CPU和GPU實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的方法及系統(tǒng),屬于刑偵視頻處理業(yè)務(wù)領(lǐng)域。
【背景技術(shù)】
[0002]隨著平安城市的廣泛建設(shè)和社會(huì)面監(jiān)控的普及,刑偵破案工作越來(lái)越倚重于視頻監(jiān)控資源。視頻偵查技術(shù)已成為新的破案增長(zhǎng)點(diǎn),但也正是由于視頻監(jiān)控大規(guī)模建設(shè),給刑偵破案帶來(lái)一系列問(wèn)題,主要表現(xiàn)在如下幾個(gè)方面:(I)國(guó)內(nèi)外監(jiān)控廠家種類多、方法各異,其采用的視頻編碼格式各不相同,刑偵人員不但需要獲取大量案件相關(guān)的視頻,還需要收集各類設(shè)備的播放器,此舉將會(huì)浪費(fèi)寶貴的破案時(shí)間,延誤破案時(shí)機(jī);(2)現(xiàn)有的監(jiān)控設(shè)備異構(gòu)、視頻格式多樣,使得視頻圖像資源難以實(shí)現(xiàn)高效整合和共享,為智能化的偵查手段帶來(lái)巨大障礙;(3)現(xiàn)有的視頻轉(zhuǎn)碼技術(shù)效率低下,主要表現(xiàn)為設(shè)備只能處理一路轉(zhuǎn)碼,或只能利用CPU或GPU中的一種硬件資源,這極大程度增加了視頻圖像資源準(zhǔn)備的時(shí)間損耗。
[0003]公開號(hào)為“ 102273205A”,名稱為“以GPU加速的軟件視頻轉(zhuǎn)碼器”的中國(guó)專利,提出了一種運(yùn)用GPU的多核心特征來(lái)分擔(dān)視頻轉(zhuǎn)碼工作量的方法和系統(tǒng)。該系統(tǒng)結(jié)合工業(yè)標(biāo)準(zhǔn)微軟DXVA方法的用法,以便以GPU編碼方案及縮放視頻的中間步驟來(lái)加速視頻解碼,但存在不足的是不能對(duì)轉(zhuǎn)碼的過(guò)程進(jìn)行實(shí)時(shí)的監(jiān)測(cè),無(wú)法通過(guò)CPU和GPU的使用情況來(lái)自適應(yīng)的調(diào)整轉(zhuǎn)碼的策略,只能流水線的將GPU解碼的數(shù)據(jù)送到編碼器中進(jìn)行編碼從而完成轉(zhuǎn)碼工作,不能盡最大可能利用系統(tǒng)的資源,不能滿足刑偵系統(tǒng)中對(duì)海量視頻文件快速轉(zhuǎn)碼的需求。
[0004]公開號(hào)為“ 101908035A”,名稱為“視頻編解碼方法、GPU及其與CPU的交互方法及系統(tǒng)”的中國(guó)專利,提出了一種GPU與CPU的交互系統(tǒng)、一種GPU和一種視頻編碼方法。利用GPU的并行計(jì)算,提高幀內(nèi)視頻編解碼的速度,減少對(duì)CPU資源的占用,但存在的不足是缺少對(duì)對(duì)CPU和GPU編碼選擇的靈活性,不能支持眾多視頻監(jiān)控設(shè)備視頻編解碼,不能滿足智能化選擇編碼模式的需求。
【發(fā)明內(nèi)容】
[0005]本發(fā)明目的在于克服上述現(xiàn)有技術(shù)的不足而提供一種利用CPU和GPU實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的方法及系統(tǒng),該方法根據(jù)系統(tǒng)的實(shí)時(shí)狀態(tài)信息和先驗(yàn)知識(shí),對(duì)監(jiān)控視頻信息判斷是否開啟一路轉(zhuǎn)碼進(jìn)程進(jìn)行轉(zhuǎn)碼,本發(fā)明能夠?qū)崟r(shí)掌握系統(tǒng)資源狀態(tài),不斷開啟轉(zhuǎn)碼進(jìn)程,對(duì)多個(gè)文件或視頻流進(jìn)行轉(zhuǎn)碼,從而達(dá)到多路并行轉(zhuǎn)碼的目的。
[0006]實(shí)現(xiàn)本發(fā)明目的采用的技術(shù)方案是一種利用CPU和GPU實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的方法,該方法包括:
[0007]獲得監(jiān)控視頻信息,檢測(cè)系統(tǒng)的實(shí)時(shí)狀態(tài)信息,調(diào)用先驗(yàn)知識(shí);并根據(jù)所述系統(tǒng)的實(shí)時(shí)狀態(tài)信息和先驗(yàn)知識(shí),對(duì)所述監(jiān)控視頻信息判斷,如按監(jiān)控視頻信息進(jìn)行轉(zhuǎn)碼所消耗的資源未達(dá)到最大負(fù)載,則開啟一路轉(zhuǎn)碼進(jìn)程,否則不開啟轉(zhuǎn)碼進(jìn)程;
[0008]開啟轉(zhuǎn)碼進(jìn)程后,采用與監(jiān)控視頻對(duì)應(yīng)廠家的解碼插件進(jìn)行解碼,解碼后輸出YUV數(shù)據(jù);
[0009]對(duì)所述YUV數(shù)據(jù)用CPU資源進(jìn)行編碼或用GPU資源進(jìn)行編碼,直至轉(zhuǎn)碼結(jié)束生成新的文件。
[0010]此外,本發(fā)明還提供一種實(shí)現(xiàn)上述方法的系統(tǒng),該系統(tǒng)包括:
[0011]自適應(yīng)監(jiān)測(cè)調(diào)度單元,用于獲得監(jiān)控視頻信息,檢測(cè)系統(tǒng)的實(shí)時(shí)狀態(tài)信息,調(diào)用先驗(yàn)知識(shí);并根據(jù)所述系統(tǒng)的實(shí)時(shí)狀態(tài)信息和先驗(yàn)知識(shí),對(duì)所述監(jiān)控視頻信息判斷,如按監(jiān)控視頻信息進(jìn)行轉(zhuǎn)碼所消耗的資源未達(dá)到最大負(fù)載,則開啟一路轉(zhuǎn)碼進(jìn)程,否則不開啟轉(zhuǎn)碼進(jìn)程;
[0012]多廠家視頻解碼單元,開啟轉(zhuǎn)碼進(jìn)程后,采用與監(jiān)控視頻對(duì)應(yīng)廠家的解碼插件進(jìn)行解碼,解碼后輸出YUV數(shù)據(jù);以及
[0013]雙模式視頻編碼單元,用于對(duì)所述YUV數(shù)據(jù)用CPU資源進(jìn)行編碼或用GPU資源進(jìn)行編碼,直至轉(zhuǎn)碼結(jié)束生成新的文件。
[0014]本發(fā)明方法能夠根據(jù)系統(tǒng)的實(shí)時(shí)狀態(tài)信息和先驗(yàn)知識(shí),判斷待轉(zhuǎn)碼視頻的信息是否能夠轉(zhuǎn)碼,如能轉(zhuǎn)碼則開啟一路進(jìn)程進(jìn)行轉(zhuǎn)碼。由于本發(fā)明實(shí)時(shí)獲取獲得監(jiān)控視頻信息和檢測(cè)系統(tǒng)的實(shí)時(shí)狀態(tài)信息,能夠不斷開啟轉(zhuǎn)碼進(jìn)程,且能夠同時(shí)CPU和GPU分別進(jìn)行編碼,從而實(shí)現(xiàn)多路并行轉(zhuǎn)碼。
【附圖說(shuō)明】
[0015]圖1為本發(fā)明利用CPU和GPU實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的系統(tǒng)結(jié)構(gòu)框圖。
[0016]圖2為本發(fā)明利用CPU和GPU實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的方法流程圖。
【具體實(shí)施方式】
[0017]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
[0018]如圖1所示,本發(fā)明利用CPU和GPU實(shí)現(xiàn)多路自適應(yīng)并行轉(zhuǎn)碼的系統(tǒng)包括:自適應(yīng)監(jiān)測(cè)調(diào)度單元1、多廠家視頻解碼單元2和雙模式視頻編碼單元3。其中,
[0019]自適應(yīng)監(jiān)測(cè)調(diào)度單元I包括:文件/流預(yù)處理模塊101、實(shí)時(shí)狀態(tài)監(jiān)測(cè)模塊102、知識(shí)庫(kù)模塊103和決策與調(diào)度模塊104。各模塊的作用如下:
[0020]文件/流預(yù)處理模塊101用于對(duì)現(xiàn)有監(jiān)控錄像文件、監(jiān)控平臺(tái)視頻流進(jìn)行識(shí)別,獲取文件或視頻流的廠家信息、畫面分辨率、時(shí)長(zhǎng)等信息,可根據(jù)這些信息和先驗(yàn)知識(shí)判定其轉(zhuǎn)碼所需要使用的資源。
[0021]實(shí)時(shí)狀態(tài)監(jiān)測(cè)模塊102用于在監(jiān)控錄像文件、監(jiān)控平臺(tái)視頻流進(jìn)行轉(zhuǎn)碼的過(guò)程中,對(duì)整個(gè)系統(tǒng)的CPU、GPU和內(nèi)存的實(shí)際使用情況進(jìn)行實(shí)時(shí)的監(jiān)測(cè)。
[0022]知識(shí)庫(kù)模塊103用于收集不同廠家、不同分辨率、不同時(shí)長(zhǎng)下視頻轉(zhuǎn)碼所需消耗的CPU或GPU資源,以及視頻解碼所需調(diào)用的廠家解碼插件,形成下一轉(zhuǎn)碼時(shí)可以依靠的先驗(yàn)知識(shí)。
[0023]決策與調(diào)度模塊104用于根據(jù)待轉(zhuǎn)碼視頻的先驗(yàn)轉(zhuǎn)碼消耗資源情況和實(shí)時(shí)消耗資源情況,綜合判定將要開啟的轉(zhuǎn)碼進(jìn)程是否符合系統(tǒng)的最低要求。如果判定啟動(dòng)轉(zhuǎn)碼,還需在此基礎(chǔ)上選擇相應(yīng)的廠家解碼插件進(jìn)行解碼,以及用CPU資源進(jìn)行編碼或用GPU資源進(jìn)行編碼。
[0024]多廠家視頻解碼單元2包括:文件解碼框架模塊201、視頻流解碼框架模塊202和各廠家解碼插件模塊203,各模塊的作用如下:
[0025]文件解碼框架模塊201用于針對(duì)待轉(zhuǎn)碼的監(jiān)控錄像文件,提供對(duì)其轉(zhuǎn)碼所需的框架支持,根據(jù)各廠家視頻文件不同的信息自適應(yīng)的選擇最佳解碼插件。
[0026]視頻流解碼框架模塊202用于針對(duì)待轉(zhuǎn)碼的監(jiān)控平臺(tái)視頻流,提供對(duì)其轉(zhuǎn)碼所需的框架支持,根據(jù)各廠家視頻流不同的信息自適應(yīng)的選擇最佳解碼插件。
[0027]各廠家解碼插件模塊203包括目前市場(chǎng)上主流的監(jiān)控廠家的視頻解碼插件,用于對(duì)監(jiān)控錄像文件和視頻流進(jìn)行高效解碼,提供編碼所需的YUV數(shù)據(jù)流。
[0028]雙模式視頻編碼單元3包括:CPU編碼模塊301和GPU編碼模塊302,各模塊的作用如下:
[0029]CPU編碼模塊301用于利用CPU資源對(duì)已解碼的YUV數(shù)據(jù)流進(jìn)行編碼,即利用軟件算法對(duì)數(shù)據(jù)進(jìn)行編碼,可將解碼數(shù)據(jù)編碼為標(biāo)準(zhǔn)格式(如H.264、AVS)的視頻文件,或非標(biāo)準(zhǔn)格式的視頻文件;以及
[0030]GPU編碼模塊302用于利用GPU資源對(duì)已解碼的YUV數(shù)據(jù)流進(jìn)行編碼,主要是指利用圖形處理單元對(duì)數(shù)據(jù)進(jìn)行編碼,GPU資源包括但不限于NVIDIA顯卡、Intel GPU、AMDGPU、微架構(gòu)處理器、DSP的并行處理器等。同樣可以將解碼數(shù)據(jù)編碼為標(biāo)準(zhǔn)格式或非標(biāo)準(zhǔn)格式的視頻文件。
[0031]上述轉(zhuǎn)碼系統(tǒng)實(shí)現(xiàn)利用CPU和GPU多路自適應(yīng)并行轉(zhuǎn)碼的方法包括以下步驟:
[0032]步驟S1:信息獲取。獲取錄像文件、視頻流以及系統(tǒng)實(shí)時(shí)狀態(tài)等的相關(guān)信息,為進(jìn)一步的調(diào)度與決策做準(zhǔn)備。具體包括以下步驟:
[0033]步驟Sll:獲取文件或視頻流信息。自適應(yīng)監(jiān)測(cè)調(diào)度單元I中的文件/流預(yù)處理模塊101獲取錄像文件或視頻流的廠家信息、畫面分辨率、時(shí)長(zhǎng)等信息。
[0034]步驟S12:獲取系統(tǒng)實(shí)時(shí)狀態(tài)信息。自適應(yīng)監(jiān)測(cè)調(diào)度單元I的實(shí)時(shí)狀態(tài)監(jiān)測(cè)模塊102對(duì)系統(tǒng)的實(shí)時(shí)狀況、正在進(jìn)行的轉(zhuǎn)碼進(jìn)程進(jìn)行實(shí)時(shí)的監(jiān)測(cè),收集相關(guān)信息,也為后