本發(fā)明涉及視頻處理領(lǐng)域,特別涉及一種攝像頭視頻處理方法及終端
背景技術(shù):
:攝像頭又稱為電腦相機(jī)、電腦眼、電子眼等,是一種視頻輸入設(shè)備,現(xiàn)在被廣泛的運(yùn)用于視頻會(huì)議,遠(yuǎn)程醫(yī)療及實(shí)時(shí)監(jiān)控等方面。人們可以通過(guò)彼此的攝像頭在網(wǎng)絡(luò)上進(jìn)行有影像、有聲音的交談和溝通。另外,人們也將其用于當(dāng)前各種流行的數(shù)碼影像,影音處理。一般得攝像頭具有視頻攝像、傳播和靜態(tài)圖像捕捉等基本功能,它是借由鏡頭采集圖像后,由攝像頭內(nèi)的感光組件電路及控制組件對(duì)圖像進(jìn)行處理并轉(zhuǎn)換成電腦所能識(shí)別的數(shù)字信號(hào),然后借由并行端口或USB(UniversalSerialBus)連接輸入到智能終端后由智能終端再進(jìn)行視頻數(shù)據(jù)的相關(guān)處理。當(dāng)前,智能終端對(duì)內(nèi)置攝像頭的視頻數(shù)據(jù)的處理技術(shù)已經(jīng)非常成熟,智能終端可以對(duì)內(nèi)置攝像頭視頻數(shù)據(jù)進(jìn)行圖像處理,編碼及存儲(chǔ)等相關(guān)操作,而目前智能終端還無(wú)法對(duì)外接攝像頭的視頻數(shù)據(jù)進(jìn)行處理。綜上,目前智能終端還無(wú)法對(duì)外接攝像頭的視頻數(shù)據(jù)進(jìn)行處理。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種攝像頭視頻處理方法及終端,用以解決現(xiàn)有技術(shù)中存在無(wú)法對(duì)外接攝像頭的視頻數(shù)據(jù)進(jìn)行處理問(wèn)題。本發(fā)明實(shí)施例提供一種攝像頭視頻處理的方法,該方法包括:終端通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù);所述終端將獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼;所述終端顯示經(jīng)過(guò)圖像渲染的第一視頻數(shù)據(jù),以及存儲(chǔ)經(jīng)過(guò)視頻編碼的第一視頻數(shù)據(jù)。本發(fā)明實(shí)施例提供一種攝像頭視頻處理的終端,該終端包括獲取模塊:用于通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù);第一處理模塊:用于將獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼;第二處理模塊:用于顯示經(jīng)過(guò)圖像渲染的第一視頻數(shù)據(jù),以及存儲(chǔ)經(jīng)過(guò)視頻編碼的第一視頻數(shù)據(jù)。本發(fā)明實(shí)施例終端通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù);所述終端將獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼;所述終端顯示經(jīng)過(guò)圖像渲染的第一視頻數(shù)據(jù),以及存儲(chǔ)經(jīng)過(guò)視頻編碼的第一視頻數(shù)據(jù),采用本發(fā)明實(shí)施例的方式終端可以對(duì)外接攝像頭的視頻數(shù)據(jù)進(jìn)行處理,其中包括圖像渲染,視頻編碼以及視頻存儲(chǔ),提供了一種完整的處理外接攝像頭的視頻數(shù)據(jù)的方法。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例攝像頭視頻處理方法的示意圖;圖2為本發(fā)明實(shí)施例攝像頭視頻數(shù)據(jù)的流向示意圖;圖3為本發(fā)明實(shí)施例硬件編碼器與軟件編碼器切換的過(guò)程示意圖;圖4為本發(fā)明實(shí)施例同時(shí)進(jìn)行內(nèi)置攝像頭和外置攝像頭視頻數(shù)據(jù)處理時(shí)數(shù)據(jù)流向示意圖;圖5為本發(fā)明實(shí)施例攝像頭視頻處理過(guò)程的示意圖;圖6為本發(fā)明實(shí)施例攝像頭視頻處理終端的結(jié)構(gòu)示意圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。如圖1所示,為本發(fā)明實(shí)施例外接攝像頭視頻處理的方法,該方法包括:步驟101:終端通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù);步驟102:所述終端將獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼;步驟103:所述終端顯示經(jīng)過(guò)圖像渲染的第一視頻數(shù)據(jù),以及存儲(chǔ)經(jīng)過(guò)視頻編碼的第一視頻數(shù)據(jù)。其中,UVCHWinterface(外接設(shè)備硬件接口)是由終端創(chuàng)建的接口,該接口通過(guò)調(diào)用V4L2(VideoforLinuxTwo,應(yīng)用程序編程接口)完成對(duì)外接設(shè)備的打開(kāi)、關(guān)閉、初始化和視頻數(shù)據(jù)讀取功能,其中初始化功能通過(guò)ioctl函數(shù)調(diào)用VIDIOC_G_FMT、VIDIOC_S_FMT命令來(lái)完成,VIDIOC_G_FMT用于獲取終端支持的視頻格式,VIDIOC_S_FMT用于設(shè)置捕獲視頻格式;視頻數(shù)據(jù)讀取功能首先通過(guò)VIDIOC_REQBUFS命令向驅(qū)動(dòng)申請(qǐng)連續(xù)內(nèi)存用于緩存視頻信息,讀取過(guò)程中通過(guò)VIDIOC_DQBUF命令向驅(qū)動(dòng)獲取已經(jīng)存放有視頻數(shù)據(jù)的緩存,處理完成后,通過(guò)VIDIOC_QBUF命令向驅(qū)動(dòng)傳遞已經(jīng)處理完成的緩存,如此循環(huán)以完成外接設(shè)備視頻數(shù)據(jù)的讀取。其中,ioctl是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù)。步驟102中,所述終端將獲取的外接攝像頭的第一視頻數(shù)據(jù)復(fù)制為兩份;將其中一份第一視頻數(shù)據(jù)通過(guò)第一接口進(jìn)行圖像渲染,并將另一份第一視頻數(shù)據(jù)通過(guò)第二接口進(jìn)行視頻編碼。所述終端將經(jīng)過(guò)圖像渲染的第一視頻數(shù)據(jù)進(jìn)行顯示操作,將經(jīng)過(guò)視頻編碼的第一視頻數(shù)據(jù)存儲(chǔ)于相應(yīng)的文件夾中。其中,本發(fā)明實(shí)施例的第一接口可以是任何用于進(jìn)行圖像渲染的接口,比如SurfaceFlinger(表面投遞者接口);本發(fā)明實(shí)施例的第二接口可以是任何用于進(jìn)行視頻編碼的接口,比如MediaCodec(媒體編解碼器接口)??蛇x的,本發(fā)明實(shí)施例的終端通過(guò)UVCCameraService(UVC攝像頭服務(wù)接口)調(diào)用第一接口,以及通過(guò)UVCCameraService接口調(diào)用第二接口。UVCCameraService是為了實(shí)現(xiàn)對(duì)外接攝像頭視頻數(shù)據(jù)進(jìn)行處理所創(chuàng)建的接口。UVCCameraService提供預(yù)覽和錄像功能,應(yīng)用程序可以直接通過(guò)調(diào)用UVCCameraService提供的接口完成圖像預(yù)覽的開(kāi)始和結(jié)束、圖像錄制的開(kāi)始和結(jié)束。例如在在安卓系統(tǒng)中,這些功能目前是在JNI(JavaNativeInterface,Java本地接口)層實(shí)現(xiàn),Java程序可以直接調(diào)用UVCCameraService提供的接口。UVCCameraService向下對(duì)接UVC硬件接口層,對(duì)UVC硬件接口層獲取的視頻數(shù)據(jù)進(jìn)行圖像渲染和視頻編碼、存儲(chǔ)等處理;UVCCameraService向上對(duì)接UVC攝像頭應(yīng)用程序,應(yīng)用程序調(diào)用接口可以完成預(yù)覽和錄像等功能。其中,終端調(diào)用第二接口,從而實(shí)現(xiàn)對(duì)外接攝像頭的第一視頻數(shù)據(jù)進(jìn)行視頻編碼之前,需要?jiǎng)?chuàng)建第二接口,創(chuàng)建的方式有很多:比如,終端通過(guò)UVCCameraService接口直接創(chuàng)建第二接口。例如第二接口為MediaCodec接口,終端可以通過(guò)UVCCameraService接口直接創(chuàng)建MediaCodec接口,例如,UVCCameraService可以通過(guò)調(diào)用安卓系統(tǒng)提供的MediaCodec::createByType()或者M(jìn)ediaCodec::createByname()函數(shù)來(lái)創(chuàng)建MediaCodec()接口。還比如,第二接口為MediaRecorder(媒體錄制)接口,則終端可以創(chuàng)建包含MediaCodec接口的MediaRecorder接口。終端通過(guò)安卓系統(tǒng)提供的標(biāo)準(zhǔn)方法newMediaRecorder()來(lái)創(chuàng)建MediaRecorder接口。所述終端通過(guò)UVCHWinterface接口獲取外接攝像頭的第一視頻數(shù)據(jù)之前,終端需要選擇對(duì)外接攝像頭的第一視頻數(shù)據(jù)進(jìn)行視頻編碼的編碼器,選擇過(guò)程如下:所述終端通過(guò)UVCHWinterface接口獲取外接攝像頭的測(cè)試視頻數(shù)據(jù);所述終端通過(guò)硬件編碼器對(duì)獲取的所述測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;若所述輸出幀率小于閾值,則終端通過(guò)軟件編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行視頻編碼;若所述輸出幀率大于閾值,則終端通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。其中,硬件編碼器是指系統(tǒng)所運(yùn)行的硬件平臺(tái)上集成的帶有編解碼功能的硬件單元,例如在安卓系統(tǒng)中硬件編碼器被統(tǒng)一抽象為MediaCodec形式,在系統(tǒng)初始化過(guò)程中,首先將系統(tǒng)中的各種格式的硬件編碼器進(jìn)行統(tǒng)一注冊(cè),在需要使用某種格式硬件編碼器時(shí),在MediaCodec::createByType()函數(shù)參數(shù)中指定相關(guān)格式,例如”video/avc”可以直接創(chuàng)建H.264格式硬件編碼器。軟件編碼器是指系統(tǒng)自帶的或者平臺(tái)供應(yīng)商提供的純軟件實(shí)現(xiàn)編碼功能的視頻編碼器,例如在安卓系統(tǒng)中軟件編碼器被抽象為MediaCodec的形式,并在系統(tǒng)初始化過(guò)程中進(jìn)行注冊(cè),軟件編碼器被調(diào)用的優(yōu)先級(jí)一般低于硬件編碼器,在創(chuàng)建編碼器時(shí),對(duì)于相同編碼格式終端會(huì)優(yōu)先選擇硬件編碼器對(duì)視頻數(shù)據(jù)進(jìn)行編碼,因此,在選擇軟件編碼器時(shí),需要調(diào)用MediaCodec::CreateByName()來(lái)通過(guò)軟件編碼器的注冊(cè)名指定當(dāng)前要求創(chuàng)建的編碼器是軟件編碼器。輸出幀率的計(jì)算方式是10s內(nèi)編碼器輸出幀總數(shù)除以10s。其中,閾值可以根據(jù)終端的視頻編碼的信息進(jìn)行設(shè)定。這里視頻編碼的信息可以是分辨率、輸出幀率等。以視頻編碼的信息是分辨率為例,預(yù)先設(shè)置分辨率和閾值的對(duì)應(yīng)關(guān)系,比如表1所示:分辨率閾值1080P30fps720P30fps480P30fps…………表1其中,當(dāng)視頻數(shù)據(jù)的分辨率為1080P時(shí),表中對(duì)應(yīng)的閾值為30fps,終端將輸出幀率與30fps進(jìn)行比較,如果輸出幀率小于30fps,則終端通過(guò)軟件編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行視頻編碼,如果輸出幀率大于30fps,則終端通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。實(shí)施例中,軟件編碼器是終端自帶的軟件編碼器,硬件編碼器是終端的芯片中所包含的硬件編碼器??蛇x的,外接攝像頭的測(cè)試視頻數(shù)據(jù)可以是終端通過(guò)外接攝像頭預(yù)先錄制視頻獲取的一部分專門用于測(cè)試的外接攝像頭的視頻數(shù)據(jù),也可以是終端從外接攝像頭的第一視頻數(shù)據(jù)中提取的一部分?jǐn)?shù)據(jù)。兩種測(cè)試視頻數(shù)據(jù)的選取、測(cè)試的具體過(guò)程如下:方式一:外接攝像頭進(jìn)行一定時(shí)間的測(cè)試錄制,得到測(cè)試視頻數(shù)據(jù);終端通過(guò)UVCHWinterface接口獲取測(cè)試視頻數(shù)據(jù);終端通過(guò)硬件編碼器對(duì)獲取的所述測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;若所述輸出幀率小于閾值,則終端通過(guò)軟件編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行視頻編碼;若所述輸出幀率大于閾值,則終端繼續(xù)通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。方式二:終端從外接攝像頭的第一視頻數(shù)據(jù)中提取一部分作為測(cè)試數(shù)據(jù);終端通過(guò)UVCHWinterface接口獲取測(cè)試視頻數(shù)據(jù);終端通過(guò)硬件編碼器對(duì)獲取的所述測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;若所述輸出幀率小于閾值,則終端通過(guò)軟件編碼器對(duì)除去測(cè)試數(shù)據(jù)的第一視頻數(shù)據(jù)進(jìn)行視頻編碼;若所述輸出幀率大于閾值,則終端繼續(xù)通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。所述終端通過(guò)外接攝像頭界面層接口接口獲取外接攝像頭的第一視頻數(shù)據(jù)的同時(shí),通過(guò)內(nèi)置攝像頭界面層接口獲取內(nèi)置攝像頭的第二視頻數(shù)據(jù);所述終端將獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼處理的同時(shí),將獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)分別進(jìn)行圖片渲染和視頻編碼;所述終端將經(jīng)過(guò)圖像渲染的第二視頻數(shù)據(jù)顯示在顯示器上,以及存儲(chǔ)經(jīng)過(guò)視頻編碼的第二視頻數(shù)據(jù)。其中,終端對(duì)于內(nèi)置攝像頭的第二視頻數(shù)據(jù)處理采用現(xiàn)有的視頻數(shù)據(jù)處理方式,具體方式如下:終端中的CameraHardwareInterface(攝像頭硬件界面層)接口從終端驅(qū)動(dòng)獲取內(nèi)置攝像頭的第二視頻數(shù)據(jù);終端中的CameraService(攝像頭服務(wù))接口調(diào)用終端中的第一接口和第二接口;終端將獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)傳遞給第三接口進(jìn)行圖像渲染,以及將獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)傳遞給第四接口進(jìn)行視頻編碼處理。其中,第三接口可以是第一接口,終端可以通過(guò)第一接口將獲取的外接攝像頭的第一視頻數(shù)據(jù)進(jìn)行圖像渲染,同時(shí)可以通過(guò)第一接口將內(nèi)置攝像頭的第二視頻數(shù)據(jù)進(jìn)行圖像渲染。所述終端將經(jīng)過(guò)圖像渲染的第二視頻數(shù)據(jù)進(jìn)行顯示操作,將經(jīng)過(guò)視頻編碼的第二視頻數(shù)據(jù)存儲(chǔ)于相應(yīng)的文件夾中。當(dāng)終端中分別對(duì)外接攝像頭的第一視頻數(shù)據(jù)和內(nèi)置攝像頭的第二視頻數(shù)據(jù)進(jìn)行處理時(shí),兩種數(shù)據(jù)的處理過(guò)程是分開(kāi)進(jìn)行的,兩種數(shù)據(jù)的處理過(guò)程不會(huì)相互干擾且允許同時(shí)進(jìn)行。此時(shí)進(jìn)行多路視頻處理要求終端中的芯片支持多路視頻處理,例如支持多路視頻處理的高通芯片等。如圖2所示,為本發(fā)明實(shí)施例外接攝像頭視頻數(shù)據(jù)的流向示意圖。外接攝像頭視頻數(shù)據(jù)從外接攝像頭傳輸至外接驅(qū)動(dòng)中,通過(guò)內(nèi)核外接攝像頭視頻數(shù)據(jù)復(fù)制為兩份,一份外接攝像頭視頻數(shù)據(jù)用于圖像預(yù)覽,一份外接攝像頭視頻數(shù)據(jù)傳輸至編碼器,以H.264的編碼方式進(jìn)行編碼。需要說(shuō)明的是,H.264的編碼方式只是舉例說(shuō)明,還可以是H.263、MPEG-4等凡是可以對(duì)視頻數(shù)據(jù)的進(jìn)行編碼的編碼方式均適用于本發(fā)明實(shí)施例??蛇x的,終端通過(guò)編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行編碼的編碼方式和終端通過(guò)編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行編碼的編碼方式可以采用相同的編碼方式,也可以采用不同的編碼方式。下面以對(duì)終端切換硬件編碼器與軟件編碼器的方案進(jìn)行詳細(xì)說(shuō)明。如圖3所示,為本發(fā)明實(shí)施例硬件編碼器與軟件編碼器切換的過(guò)程示意圖,包括:步驟301:終端通過(guò)外接設(shè)備界面層接口獲取外接攝像頭獲取的測(cè)試視頻數(shù)據(jù);步驟302:終端將外接攝像頭獲取的測(cè)試視頻數(shù)據(jù)輸送至硬件編碼器進(jìn)行編碼;步驟303:終端計(jì)算硬件編碼器的輸出幀率;步驟304:終端判斷輸出幀率是否小于閾值,如果是則執(zhí)行步驟305,如果否則執(zhí)行步驟306;步驟305:終端通過(guò)軟件編碼器對(duì)測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理;步驟306:終端通過(guò)硬件編碼器對(duì)測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理圖4為本發(fā)明實(shí)施例同時(shí)進(jìn)行內(nèi)置攝像頭和外置攝像頭視頻數(shù)據(jù)處理時(shí)數(shù)據(jù)流向示意圖。在本發(fā)明實(shí)施例中,如果終端只獲取內(nèi)置攝像頭的視頻數(shù)據(jù),可以對(duì)內(nèi)置攝像頭的視頻數(shù)據(jù)進(jìn)行處理;如果終端只獲取外接攝像頭的視頻數(shù)據(jù),可以對(duì)外接攝像頭的視頻數(shù)據(jù)進(jìn)行處理;如果終端同時(shí)獲取內(nèi)置攝像頭和外置攝像頭的視頻數(shù)據(jù),可以同時(shí)對(duì)內(nèi)置攝像頭和外置攝像頭的視頻數(shù)據(jù)進(jìn)行處理。終端對(duì)內(nèi)置攝像頭的視頻數(shù)據(jù)處理過(guò)程如下:終端通過(guò)CameraHardwareInterface接口從內(nèi)核中的攝像頭驅(qū)動(dòng)獲取內(nèi)置攝像頭的視頻數(shù)據(jù);終端通過(guò)CameraService接口創(chuàng)建SurfaceFlinger接口和MediaRecorder接口,CameraHardwareInterface接口將獲取內(nèi)置攝像頭的視頻數(shù)據(jù)復(fù)制兩份,分別傳遞至SurfaceFlinger接口和MediaRecorder接口;終端通過(guò)CameraHardwareInterface接口將內(nèi)置攝像頭的視頻數(shù)據(jù)傳遞至SurfaceFlinger接口后,進(jìn)行圖像渲染,并在顯示器上顯示實(shí)現(xiàn)預(yù)覽;終端通過(guò)CameraHardwareInterface接口將內(nèi)置攝像頭的視頻數(shù)據(jù)傳遞至接口MediaRecorder后,進(jìn)行視頻數(shù)據(jù)編碼,并將編碼后的數(shù)據(jù)存儲(chǔ)。其中,CameraHardwareInterface接口是對(duì)Camera硬件進(jìn)行的抽象,提供給CameraService,并通過(guò)CameraService完成上層對(duì)硬件的訪問(wèn)。CameraService是Camera服務(wù),屬于Camera框架的中間層,用于連接CameraHardwareInterface和客戶端部分,通過(guò)調(diào)用實(shí)際的Camera硬件接口實(shí)現(xiàn)客戶端所需的一系列功能。終端對(duì)外接攝像頭的視頻數(shù)據(jù)處理過(guò)程如下:終端通過(guò)UVCCameraHardwareInterface接口從內(nèi)核中的外接攝像頭驅(qū)動(dòng)(UVCDriver)獲取外接攝像頭的視頻數(shù)據(jù);終端通過(guò)UVCCameraService創(chuàng)建SurfaceFlinger接口和Mediacodec接口,終端通過(guò)UVCCameraHardwareInterface接口將獲取外接攝像頭的視頻數(shù)據(jù)復(fù)制兩份,分別傳遞至SurfaceFlinger接口和Mediacodec接口;終端通過(guò)UVCCameraHardwareInterface接口將外接攝像頭的視頻數(shù)據(jù)傳遞至SurfaceFlinger接口后,進(jìn)行圖像渲染,并在顯示器上顯示實(shí)現(xiàn)預(yù)覽;終端通過(guò)UVCCameraHardwareInterface接口將外接攝像頭的視頻數(shù)據(jù)傳遞至接口Mediacodecr后,進(jìn)行視頻數(shù)據(jù)編碼,并將編碼后的數(shù)據(jù)存儲(chǔ)。需要說(shuō)明的是,終端對(duì)于內(nèi)置攝像頭和外接攝像頭的視頻數(shù)據(jù)的處理過(guò)程可以同時(shí)進(jìn)行,并且兩者之間不存在相互干擾,主要是因?yàn)榻K端中存在支持多路視頻處理的芯片。如圖5所示,以測(cè)試數(shù)據(jù)為第一視頻數(shù)據(jù)的一部分為例,詳細(xì)介紹本發(fā)明實(shí)施例攝像頭視頻處理過(guò)程,包括:步驟501:終端通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù);步驟502:終端將獲取的外接攝像頭的第一視頻數(shù)據(jù)復(fù)制為兩份;步驟503:終端將其中一份第一視頻數(shù)據(jù)通過(guò)第二接口進(jìn)行視頻編碼;步驟504:終端從第一視頻數(shù)據(jù)提取一部分作為測(cè)試視頻數(shù)據(jù);步驟505:終端通過(guò)硬件編碼器對(duì)測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;步驟506:終端判斷輸出幀率是否小于閾值,如果是則執(zhí)行步驟507,否則執(zhí)行步驟509;步驟507:終端釋放硬件編碼器,創(chuàng)建軟件編碼器,并對(duì)第一視頻數(shù)據(jù)進(jìn)行編碼;步驟508:終端將編碼完成的數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的文件中;步驟509:終端終端不釋放硬件編碼器,繼續(xù)通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼;步驟510:終端將編碼完成的數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的文件中;步驟511:終端將另一份第一視頻數(shù)據(jù)通過(guò)第一接口進(jìn)行圖像渲染;步驟512:終端將進(jìn)行了圖像處理的視頻數(shù)據(jù)進(jìn)行顯示操作。其中,步驟511和步驟512是在終端進(jìn)行了步驟502之后進(jìn)行的,與步驟503到步驟510沒(méi)有嚴(yán)格的時(shí)序關(guān)系?;谕话l(fā)明構(gòu)思,本發(fā)現(xiàn)實(shí)施例還提供了一種攝像頭視頻處理終端由于該終端解決問(wèn)題的原理與本發(fā)明實(shí)施例信息處理的方法相似,因此該終端的實(shí)施可以參見(jiàn)方法的實(shí)施,重復(fù)之處不再贅述。如圖6所示,本發(fā)明實(shí)施例攝像頭視頻處理設(shè)備,包括:獲取模塊600、第一處理模塊601和第二處理模塊602。所述獲取模塊600:用于通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù);所述第一處理模塊601:用于將所述獲取模塊600獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼;所述第二處理模塊602:用于顯示經(jīng)過(guò)所述第一處理模塊601圖像渲染的第一視頻數(shù)據(jù),以及存儲(chǔ)經(jīng)過(guò)所述第一處理模塊601視頻編碼的第一視頻數(shù)據(jù)。其中,UVCHWinterface接口是由所述獲取模塊600創(chuàng)建的,所述獲取模塊600通過(guò)UVCHWinterface接口可以獲取外接攝像頭的視頻數(shù)據(jù)的接口,其中,接口通過(guò)調(diào)用V4L2(VideoforLinuxTwo,應(yīng)用程序編程接口)完成對(duì)外接設(shè)備的打開(kāi)、關(guān)閉、初始化和視頻數(shù)據(jù)讀取功能,其中初始化功能通過(guò)ioctl函數(shù)調(diào)用VIDIOC_G_FMT、VIDIOC_S_FMT命令來(lái)完成,VIDIOC_G_FMT用于獲取終端支持的視頻格式,VIDIOC_S_FMT用于設(shè)置捕獲視頻格式;視頻數(shù)據(jù)讀取功能首先通過(guò)VIDIOC_REQBUFS命令向驅(qū)動(dòng)申請(qǐng)連續(xù)內(nèi)存用于緩存視頻信息,讀取過(guò)程中通過(guò)VIDIOC_DQBUF命令向驅(qū)動(dòng)獲取已經(jīng)存放有視頻數(shù)據(jù)的緩存,處理完成后,通過(guò)VIDIOC_QBUF命令向驅(qū)動(dòng)傳遞已經(jīng)處理完成的緩存,如此循環(huán)以完成外接設(shè)備視頻數(shù)據(jù)的讀取。其中,ioctl是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù)。第一處理模塊601將所述獲取模塊600獲取的外接攝像頭的第一視頻數(shù)據(jù)復(fù)制為兩份;將其中一份第一視頻數(shù)據(jù)通過(guò)第一接口進(jìn)行圖像渲染,并將另一份第一視頻數(shù)據(jù)通過(guò)第二接口進(jìn)行視頻編碼。第二處理模塊602將經(jīng)過(guò)所述第一處理模塊601圖像渲染的第一視頻數(shù)據(jù)進(jìn)行顯示操作,將經(jīng)過(guò)所述第一處理模塊601視頻編碼的第一視頻數(shù)據(jù)存儲(chǔ)于相應(yīng)的文件夾中。其中,本發(fā)明實(shí)施例的第一接口可以是任何用于進(jìn)行圖像渲染的接口,比如SurfaceFlinger接口;本發(fā)明實(shí)施例的第二接口可以是任何用于進(jìn)行視頻編碼的接口,比如MediaCodec接口。可選的,本發(fā)明實(shí)施例的所述第一處理模塊601通過(guò)UVCCameraService接口調(diào)用第一接口,以及所述第一處理模塊601通過(guò)UVCCameraService接口調(diào)用第二接口。UVCCameraService是為了實(shí)現(xiàn)對(duì)外接攝像頭視頻數(shù)據(jù)進(jìn)行處理所創(chuàng)建的接口。UVCCameraService提供預(yù)覽和錄像功能,應(yīng)用程序可以直接通過(guò)調(diào)用UVCCameraService提供的接口完成圖像預(yù)覽的開(kāi)始和結(jié)束、圖像錄制的開(kāi)始和結(jié)束。例如在在安卓系統(tǒng)中,這些功能目前是在JNI層實(shí)現(xiàn),Java程序可以直接調(diào)用UVCCameraService提供的接口。UVCCameraService向下對(duì)接UVC硬件接口層,對(duì)UVC硬件接口層獲取的視頻數(shù)據(jù)進(jìn)行圖像渲染和視頻編碼、存儲(chǔ)等處理;UVCCameraService向上對(duì)接UVC攝像頭應(yīng)用程序,應(yīng)用程序調(diào)用接口可以完成預(yù)覽和錄像等功能。其中,所述第一處理模塊601調(diào)用第二接口,從而實(shí)現(xiàn)對(duì)外接攝像頭的第一視頻數(shù)據(jù)進(jìn)行視頻編碼之前,需要?jiǎng)?chuàng)建第二接口,創(chuàng)建的方式有很多:比如,所述第一處理模塊601通過(guò)UVCCameraService接口直接創(chuàng)建第二接口。例如第二接口為MediaCodec接口,所述第一處理模塊601可以通過(guò)UVCCameraService接口直接創(chuàng)建MediaCodec接口,例如,UVCCameraService可以通過(guò)調(diào)用安卓系統(tǒng)提供的MediaCodec::createByType()或MediaCodec::createByname()函數(shù)來(lái)創(chuàng)建MediaCodec()接口。還比如,第二接口為MediaCodec接口,則所述第一處理模塊601可以創(chuàng)建包含MediaCodec接口的MediaRecorder接口。終端通過(guò)安卓系統(tǒng)提供的標(biāo)準(zhǔn)方法newMediaRecorder()來(lái)創(chuàng)建MediaRecorder接口。所述獲取模塊600通過(guò)UVCHWinterface接口獲取外接攝像頭的第一視頻數(shù)據(jù)之前,第一處理模塊601需要選擇對(duì)外接攝像頭的第一視頻數(shù)據(jù)進(jìn)行視頻編碼的編碼器,選擇過(guò)程如下:所述獲取模塊600通過(guò)UVCHWinterface接口獲取外接攝像頭的測(cè)試視頻數(shù)據(jù);所述第一處理模塊601通過(guò)硬件編碼器對(duì)獲取的所述測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;若所述輸出幀率小于閾值,則所述第一處理模塊601通過(guò)軟件編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行視頻編碼;若所述輸出幀率大于閾值,則所述第一處理模塊601通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。其中,硬件編碼器是指系統(tǒng)所運(yùn)行的硬件平臺(tái)上集成的帶有編解碼功能的硬件單元,例如在安卓系統(tǒng)中硬件編碼器被統(tǒng)一抽象為MediaCodec形式,在系統(tǒng)初始化過(guò)程中,首先將系統(tǒng)中的各種格式的硬件編碼器進(jìn)行統(tǒng)一注冊(cè),在需要使用某種格式硬件編碼器時(shí),在MediaCodec::createByType()函數(shù)參數(shù)中指定相關(guān)格式,例如”video/avc”就可以直接創(chuàng)建H.264格式硬件編碼器。軟件編碼器是指系統(tǒng)自帶的或者平臺(tái)供應(yīng)商提供的純軟件實(shí)現(xiàn)編碼功能的視頻編碼器,例如在安卓系統(tǒng)中軟件編碼器被抽象為MediaCodec的形式,并在系統(tǒng)初始化過(guò)程中進(jìn)行注冊(cè),軟件編碼器被調(diào)用的優(yōu)先級(jí)一般低于硬件編碼器,在創(chuàng)建編碼器時(shí),對(duì)于相同編碼格式終端會(huì)優(yōu)先選擇硬件編碼器對(duì)視頻數(shù)據(jù)進(jìn)行編碼,因此,在選擇軟件編碼器時(shí),需要調(diào)用MediaCodec::CreateByName()來(lái)通過(guò)軟件編碼器的注冊(cè)名指定當(dāng)前要求創(chuàng)建的編碼器是軟件編碼器。輸出幀率的計(jì)算方式是10s內(nèi)編碼器輸出幀總數(shù)除以10s。其中,閾值可以根據(jù)終端的視頻編碼的信息進(jìn)行設(shè)定。這里視頻編碼的信息可以是分辨率、輸出幀率等。以視頻編碼的信息是分辨率為例,預(yù)先設(shè)置分辨率和閾值的對(duì)應(yīng)關(guān)系,比如表2所示:分辨率閾值1080P30fps720P30fps480P30fps…………表2其中,當(dāng)視頻數(shù)據(jù)的分辨率為1080P時(shí),表中對(duì)應(yīng)的閾值為30fps,所述第一處理模塊601將輸出幀率與30fps進(jìn)行比較,如果輸出幀率小于30fps,則所述第一處理模塊601通過(guò)軟件編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行視頻編碼,如果輸出幀率大于30fps,則所述第一處理模塊601通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。實(shí)施例中,軟件編碼器是終端自帶的軟件編碼器,硬件編碼器是終端的芯片中所包含的硬件編碼器??蛇x的,外接攝像頭的測(cè)試視頻數(shù)據(jù)可以是通過(guò)外接攝像頭預(yù)先錄制視頻所述獲取模塊600獲取一部分專門用于測(cè)試的外接攝像頭的視頻數(shù)據(jù),也可以是所述獲取模塊600從外接攝像頭的第一視頻數(shù)據(jù)中提取的一部分?jǐn)?shù)據(jù)。兩種測(cè)試視頻數(shù)據(jù)的選取、測(cè)試的具體過(guò)程如下:方式一:外接攝像頭進(jìn)行一定時(shí)間的測(cè)試錄制,得到測(cè)試視頻數(shù)據(jù);所述獲取模塊600通過(guò)UVCHWinterface接口獲取測(cè)試視頻數(shù)據(jù);所述第一處理模塊601通過(guò)硬件編碼器對(duì)獲取的所述測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;若所述輸出幀率小于閾值,則所述第一處理模塊601通過(guò)軟件編碼器對(duì)第一視頻數(shù)據(jù)的進(jìn)行視頻編碼;若所述輸出幀率大于閾值,則所述第一處理模塊601繼續(xù)通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。方式二:所述獲取模塊600從外接攝像頭的第一視頻數(shù)據(jù)中提取一部分作為測(cè)試數(shù)據(jù);所述獲取模塊600通過(guò)UVCHWinterface接口獲取測(cè)試視頻數(shù)據(jù);所述第一處理模塊601通過(guò)硬件編碼器對(duì)獲取的所述測(cè)試視頻數(shù)據(jù)進(jìn)行視頻編碼處理,并確定所述硬件編碼器的輸出幀率;若所述輸出幀率小于閾值,則所述第一處理模塊601通過(guò)軟件編碼器對(duì)除去測(cè)試數(shù)據(jù)的第一視頻數(shù)據(jù)進(jìn)行視頻編碼;若所述輸出幀率大于閾值,則所述第一處理模塊601繼續(xù)通過(guò)硬件編碼器對(duì)第一視頻數(shù)據(jù)進(jìn)行視頻編碼。所述獲取模塊600通過(guò)外接設(shè)備界面層接口獲取外接攝像頭的第一視頻數(shù)據(jù)的同時(shí),通過(guò)內(nèi)置攝像頭界面層接口獲取內(nèi)置攝像頭的第二視頻數(shù)據(jù);所述第一處理模塊601將所述獲取模塊600獲取的外接攝像頭的第一視頻數(shù)據(jù)分別進(jìn)行圖像渲染和視頻編碼處理的同時(shí),將所述獲取模塊600獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)分別進(jìn)行圖片渲染和視頻編碼;所述第二處理模塊602將經(jīng)過(guò)所述第一處理模塊601圖像渲染的第二視頻數(shù)據(jù)顯示在顯示器上,以及存儲(chǔ)經(jīng)過(guò)所述第一處理模塊601視頻編碼的第二視頻數(shù)據(jù)。其中,對(duì)于內(nèi)置攝像頭的第二視頻數(shù)據(jù)處理采用現(xiàn)有的視頻數(shù)據(jù)處理方式,具體方式如下:所述獲取模塊600中的CameraHardwareInterface接口從終端驅(qū)動(dòng)獲取內(nèi)置攝像頭的第二視頻數(shù)據(jù);所述第一處理模塊601中的CameraService接口調(diào)用終端中的第一接口和第二接口;所述第一處理模塊601將所述獲取模塊600獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)傳遞給第三接口進(jìn)行圖像渲染,以及將所述獲取模塊600獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)傳遞給第四接口進(jìn)行視頻編碼處理。其中,第三接口可以是第一接口,所述第一處理模塊601可以通過(guò)第一接口將所述獲取模塊600獲取的外接攝像頭的第一視頻數(shù)據(jù)進(jìn)行圖像渲染,同時(shí)可以通過(guò)第一接口將所述獲取模塊600獲取的內(nèi)置攝像頭的第二視頻數(shù)據(jù)進(jìn)行圖像渲染。所述第二處理模塊602將經(jīng)過(guò)所述第一處理模塊601圖像渲染的第二視頻數(shù)據(jù)顯示在顯示器上,將經(jīng)過(guò)所述第一處理模塊601視頻編碼的第二視頻數(shù)據(jù)存儲(chǔ)于相應(yīng)的文件夾中。當(dāng)所述第一處理模塊601分別對(duì)外接攝像頭的第一視頻數(shù)據(jù)和內(nèi)置攝像頭的第二視頻數(shù)據(jù)進(jìn)行處理時(shí),兩種數(shù)據(jù)的處理過(guò)程是分開(kāi)進(jìn)行的,兩種數(shù)據(jù)的處理過(guò)程不會(huì)相互干擾且允許同時(shí)進(jìn)行。此時(shí)進(jìn)行多路視頻處理要求終端中的芯片支持多路視頻處理,例如支持多路視頻處理的高通芯片等。以上參照示出根據(jù)本申請(qǐng)實(shí)施例的方法、裝置(系統(tǒng))和/或計(jì)算機(jī)程序產(chǎn)品的框圖和/或流程圖描述本申請(qǐng)。應(yīng)理解,可以通過(guò)計(jì)算機(jī)程序指令來(lái)實(shí)現(xiàn)框圖和/或流程圖示圖的一個(gè)塊以及框圖和/或流程圖示圖的塊的組合。可以將這些計(jì)算機(jī)程序指令提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)的處理器和/或其它可編程數(shù)據(jù)處理裝置,以產(chǎn)生機(jī)器,使得經(jīng)由計(jì)算機(jī)處理器和/或其它可編程數(shù)據(jù)處理裝置執(zhí)行的指令創(chuàng)建用于實(shí)現(xiàn)框圖和/或流程圖塊中所指定的功能/動(dòng)作的方法。相應(yīng)地,還可以用硬件和/或軟件(包括固件、駐留軟件、微碼等)來(lái)實(shí)施本申請(qǐng)。更進(jìn)一步地,本申請(qǐng)可以采取計(jì)算機(jī)可使用或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品的形式,其具有在介質(zhì)中實(shí)現(xiàn)的計(jì)算機(jī)可使用或計(jì)算機(jī)可讀程序代碼,以由指令執(zhí)行系統(tǒng)來(lái)使用或結(jié)合指令執(zhí)行系統(tǒng)而使用。在本申請(qǐng)上下文中,計(jì)算機(jī)可使用或計(jì)算機(jī)可讀介質(zhì)可以是任意介質(zhì),其可以包含、存儲(chǔ)、通信、傳輸、或傳送程序,以由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用,或結(jié)合指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。當(dāng)前第1頁(yè)1 2 3