本發(fā)明屬于警用執(zhí)法設(shè)備技術(shù)領(lǐng)域,具體地說,是針對基于Android平臺開發(fā)的執(zhí)法記錄儀提出的一種錄像本地保存與遠程同步推送的實現(xiàn)方法。
背景技術(shù):
執(zhí)法記錄儀又稱警用執(zhí)法記錄儀或現(xiàn)場執(zhí)法記錄儀,集數(shù)碼攝像、數(shù)碼照相、對講送話器功能于一身,能夠在執(zhí)法過程中進行動態(tài)、靜態(tài)的現(xiàn)場情況數(shù)字化記錄,便于公安干警在各種環(huán)境中執(zhí)法使用。
近年來,執(zhí)法記錄儀隨著一些社會事件的發(fā)生而被越來越多的公安干警所使用?,F(xiàn)有的執(zhí)法記錄儀在對執(zhí)法現(xiàn)場進行錄音、錄像時,通過麥克風和攝像頭采集到的音頻數(shù)據(jù)和視頻數(shù)據(jù)有三種處理方式:
其一,先將現(xiàn)場采集到的音視頻數(shù)據(jù)保存在本地,即保存在執(zhí)法記錄儀中,等回到單位后再同步到云端進行備份;
其二,將現(xiàn)場采集到的音視頻數(shù)據(jù)實時上傳到指揮中心,使指揮中心可以同步觀看到現(xiàn)場情況;
其三,將現(xiàn)場采集到的音視頻數(shù)據(jù)實時上傳到指揮中心,指揮中心在同步觀看現(xiàn)場情況的同時,利用NVR或者DVR錄像機對接收到的音視頻數(shù)據(jù)進行備份。
也就是說,現(xiàn)有的執(zhí)法記錄儀要么將采集到的音視頻數(shù)據(jù)保存在本地,要么直接推送到遠程的指揮中心(本地不保存),無法實現(xiàn)本地保存與遠程推送的同步進行。究其原因,是因為現(xiàn)有的執(zhí)法記錄儀基本上都是基于安卓Android平臺開發(fā)的。在Android系統(tǒng)中,麥克風在同一時刻只能被Android系統(tǒng)的一個應(yīng)用所占用,當使用MediaRecoder應(yīng)用進行錄像時,MediaRecoder應(yīng)用會獨占麥克風,并將麥克風采集到的音頻數(shù)據(jù)進行本地保存。此時,由于麥克風已被MediaRecoder應(yīng)用所占用,因此其他的應(yīng)用將無法使用麥克風獲取其輸出的音頻數(shù)據(jù),因而也就無法將音頻數(shù)據(jù)推送到遠程的指揮中心,實現(xiàn)本地保存與遠程推送同步進行的功能。
技術(shù)實現(xiàn)要素:
本發(fā)明基于現(xiàn)有執(zhí)法記錄儀所存在的上述問題,提出了一種基于安卓平臺的錄像本地保存與遠程同步推送的實現(xiàn)方法,規(guī)避了Android平臺上麥克風的獨占問題。
為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案予以實現(xiàn):
一方面,本發(fā)明提出了一種基于安卓平臺的本地錄像與同步推送的方法,在啟用錄像功能時,在Android系統(tǒng)的應(yīng)用層直接獲取攝像頭輸出的原始視頻數(shù)據(jù)和麥克風輸出的原始音頻數(shù)據(jù);創(chuàng)建視頻預(yù)處理模塊和音頻預(yù)處理模塊,分別對獲取到的所述原始視頻數(shù)據(jù)和原始音頻數(shù)據(jù)統(tǒng)一進行預(yù)編譯;創(chuàng)建視頻編碼器和音頻編碼器,分別對預(yù)編譯后的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行編碼;創(chuàng)建視頻分流器和音頻分流器,分別將編碼后的視頻數(shù)據(jù)和音頻數(shù)據(jù)分成兩路,將其中一路編碼后的視頻數(shù)據(jù)和其中一路編碼后的音頻數(shù)據(jù)傳送至RTP通信模塊進行打包封裝,并向遠程實時推送;將另外一路編碼后的視頻數(shù)據(jù)和另外一路編碼后的音頻數(shù)據(jù)發(fā)送至媒體混合器MediaMuxer進行音視頻混合處理后,進行本地保存。
優(yōu)選的,所述原始視頻數(shù)據(jù)可以通過攝像頭的Preview接口回調(diào)獲??;所述原始音頻數(shù)據(jù)可以通過Android系統(tǒng)的AudioRecoder接口獲取。
由于音視頻數(shù)據(jù)在分發(fā)前的預(yù)編譯需要統(tǒng)一,如果按照Android系統(tǒng)常規(guī)的處理方式在native層做視頻數(shù)據(jù)的預(yù)編譯,那么在應(yīng)用層還需做RTP前的預(yù)編譯,導(dǎo)致數(shù)據(jù)處理不統(tǒng)一、繁瑣。為了解決此問題,本發(fā)明在Android系統(tǒng)的應(yīng)用層創(chuàng)建所述的視頻預(yù)處理模塊和所述的音頻預(yù)處理模塊,在Android系統(tǒng)的應(yīng)用層完成對所述原始視頻數(shù)據(jù)和原始音頻數(shù)據(jù)的預(yù)編譯,以統(tǒng)一數(shù)據(jù)來源,便于數(shù)據(jù)的統(tǒng)一處理。
優(yōu)選的,本發(fā)明優(yōu)選在Android系統(tǒng)的應(yīng)用層利用標準API的MediaCodec編碼接口創(chuàng)建所述的視頻編碼器和音頻編碼器,在Android系統(tǒng)的應(yīng)用層完成對所述預(yù)編譯后的視頻數(shù)據(jù)和音頻數(shù)據(jù)的編碼處理。
優(yōu)選的,本發(fā)明優(yōu)選在Android系統(tǒng)的應(yīng)用層創(chuàng)建所述的視頻分流器和音頻分流器,分別對編碼后的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行拷貝,以形成兩路編碼后的視頻數(shù)據(jù)和兩路編碼后的音頻數(shù)據(jù),并進行分發(fā)。
另一方面,本發(fā)明基于上述本地錄像與同步推送的方法,還提出了一種執(zhí)法記錄儀,其系統(tǒng)軟件基于Android平臺開發(fā)設(shè)計,包括攝像頭、麥克風、視頻數(shù)據(jù)采集模塊、音頻數(shù)據(jù)采集模塊、視頻預(yù)處理模塊、音頻預(yù)處理模塊、視頻編碼器、音頻編碼器、視頻分流器、音頻分流器、RTP通信模塊和媒體混合器MediaMuxer;所述視頻數(shù)據(jù)采集模塊創(chuàng)建于Android系統(tǒng)的應(yīng)用層,在啟用錄像功能時,采集所述攝像頭生成的原始視頻數(shù)據(jù);所述音頻數(shù)據(jù)采集模塊創(chuàng)建于Android系統(tǒng)的應(yīng)用層,在啟用錄像功能時,采集所述麥克風生成的原始音頻數(shù)據(jù);所述視頻預(yù)處理模塊對所述視頻數(shù)據(jù)采集模塊采集到的原始視頻數(shù)據(jù)進行預(yù)編譯;所述音頻預(yù)處理模塊對所述音頻數(shù)據(jù)采集模塊采集到的原始音頻數(shù)據(jù)進行預(yù)編譯;所述視頻編碼器對所述視頻預(yù)處理模塊編譯輸出的視頻數(shù)據(jù)進行編碼;所述音頻編碼器對所述音頻預(yù)處理模塊編譯輸出的音頻數(shù)據(jù)進行編碼;所述視頻分流器將所述視頻編碼器編碼輸出的視頻數(shù)據(jù)分成兩路,一路發(fā)送至RTP通信模塊,另一路發(fā)送至媒體混合器MediaMuxer;所述音頻分流器將所述音頻編碼器編碼輸出的音頻數(shù)據(jù)分成兩路,一路發(fā)送至RTP通信模塊,另一路發(fā)送至媒體混合器MediaMuxer;所述RTP通信模塊將接收到的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行打包封裝,并向遠程的指揮中心實時推送;所述媒體混合器MediaMuxer將接收到的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行音視頻混合處理,并保存在所述執(zhí)法記錄儀內(nèi)部的存儲器中。
優(yōu)選的,所述視頻數(shù)據(jù)采集模塊優(yōu)選通過攝像頭的Preview接口回調(diào)獲取所述的原始視頻數(shù)據(jù);所述音頻數(shù)據(jù)采集模塊優(yōu)選通過Android系統(tǒng)的AudioRecoder接口獲取所述麥克風輸出的原始音頻數(shù)據(jù)。
為了避免視頻數(shù)據(jù)在不同層進行兩次編譯處理,本發(fā)明在Android系統(tǒng)的應(yīng)用層創(chuàng)建所述的視頻預(yù)處理模塊和所述的音頻預(yù)處理模塊,在Android系統(tǒng)的應(yīng)用層完成對所述原始視頻數(shù)據(jù)和原始音頻數(shù)據(jù)的預(yù)編譯,以統(tǒng)一數(shù)據(jù)來源,便于數(shù)據(jù)的統(tǒng)一處理。
優(yōu)選的,所述視頻編碼器和音頻編碼器可以在Android系統(tǒng)的應(yīng)用層利用標準API的MediaCodec編碼接口創(chuàng)建,利用所述視頻編碼器和音頻編碼器在Android系統(tǒng)的應(yīng)用層完成對預(yù)編譯后的視頻數(shù)據(jù)和音頻數(shù)據(jù)的編碼處理。
優(yōu)選的,所述視頻分流器和音頻分流器優(yōu)選在Android系統(tǒng)的應(yīng)用層創(chuàng)建,分別對所述編碼后的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行拷貝,以形成兩路編碼后的視頻數(shù)據(jù)和兩路編碼后的音頻數(shù)據(jù),并進行分發(fā)。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點和積極效果是:本發(fā)明針對Android系統(tǒng)的麥克風和攝像頭,采用在應(yīng)用層單獨創(chuàng)建音頻數(shù)據(jù)采集模塊和視頻數(shù)據(jù)采集模塊的方式,在應(yīng)用層直接獲取麥克風采集輸出的原始音頻數(shù)據(jù)和攝像頭采集輸出的原始視頻數(shù)據(jù),自行進行預(yù)編譯、編碼和封裝處理,由此可以規(guī)避麥克風在啟用錄像功能時因被Android系統(tǒng)的MediaRecoder應(yīng)用所獨占,而導(dǎo)致其他應(yīng)用獲取不到音頻信號的問題。在啟用錄像功能時,本發(fā)明通過自行獲取原始音視頻數(shù)據(jù),并利用自行創(chuàng)建的音視頻預(yù)處理模塊、音視頻編碼器以及音視頻分流器對獲取到的音頻數(shù)據(jù)和視頻數(shù)據(jù)進行預(yù)編譯、編碼和分流處理,從而可以生成兩路完全同步的音視頻數(shù)據(jù)流,一路用于遠程的實時傳送,另一路用于本地保存,由此解決了本地錄像與音視頻流同步推送的問題。將其應(yīng)用于執(zhí)法記錄儀中,公安干警在執(zhí)法過程中不僅可以將現(xiàn)場錄制的音視頻數(shù)據(jù)保存在執(zhí)法記錄儀中,而且還可以將現(xiàn)場錄制的音視頻數(shù)據(jù)同步上傳至遠程的指揮中心,以便于指揮中心指揮和協(xié)助警務(wù)人員的執(zhí)法過程。指揮中心在同步觀看現(xiàn)場情況的同時,還可以通過錄像機進行錄像備份,以滿足多種應(yīng)用需求。
結(jié)合附圖閱讀本發(fā)明實施方式的詳細描述后,本發(fā)明的其他特點和優(yōu)點將變得更加清楚。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是現(xiàn)有Android平臺的系統(tǒng)架構(gòu)圖;
圖2是本發(fā)明所提出的執(zhí)法記錄儀改進后的Android平臺的一種實施例的系統(tǒng)架構(gòu)圖;
圖3是圖2所示的執(zhí)法記錄儀為實現(xiàn)本地錄像與同步推送而設(shè)計的一種實施例的數(shù)據(jù)處理流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的具體實施方式作進一步詳細地說明。
Android平臺采用層次化的系統(tǒng)架構(gòu),從上層到下層分別是應(yīng)用程序?qū)印?yīng)用程序框架層(native層)、系統(tǒng)運行庫層以及Linux內(nèi)核層,如圖1所示。對于執(zhí)法記錄儀中的Android平臺,根據(jù)其應(yīng)用需要,在其應(yīng)用程序?qū)釉O(shè)置有攝像頭、麥克風、通話器、報警器、時鐘、日歷、媒體播放器等應(yīng)用模塊,以滿足執(zhí)法記錄儀的錄音、錄像、對講、報警、日期時間顯示以及音視頻媒體播放功能等。
對于執(zhí)法記錄儀中設(shè)置的麥克風,由于受Android系統(tǒng)編程的限制,在同一時刻只能被一個應(yīng)用所占用,即存在麥克風獨占的問題,因此,在啟用執(zhí)法記錄儀的錄像功能錄制執(zhí)法現(xiàn)場的音視頻信號時,若需要本地保存,則Android系統(tǒng)將自動調(diào)用其MediaRecoder應(yīng)用讀取攝像頭采集到的視頻數(shù)據(jù)和麥克風采集到的音頻數(shù)據(jù),并在native層對讀取到的音頻數(shù)據(jù)和視頻數(shù)據(jù)進行編譯、編碼、音視頻混合等一系列處理后,生成本地音視頻數(shù)據(jù)流,保存到執(zhí)法記錄儀內(nèi)部的存儲器中。由于麥克風被MediaRecoder應(yīng)用所占用,因此,在錄像過程中其他應(yīng)用將無法使用該麥克風獲取其采集到的音頻數(shù)據(jù),從而也就無法將錄制的音視頻數(shù)據(jù)進行RTP封裝,實時地向指揮中心進行遠程傳送。也就是說,指揮中心無法同步地觀看到執(zhí)法現(xiàn)場的實時狀況。
為了規(guī)避 Android系統(tǒng)中麥克風的獨占問題,實現(xiàn)錄像數(shù)據(jù)的本地保護和遠程同步推送的功能,本實施例提出了一種在Android系統(tǒng)的應(yīng)用層自行獲取麥克風和攝像頭的原始音視頻數(shù)據(jù),并對獲取到的原始音視頻數(shù)據(jù)進行自行處理、自行封裝和分發(fā)的設(shè)計思想,使得執(zhí)法記錄儀在錄制現(xiàn)場的過程中既可以將錄制到的現(xiàn)場音視頻數(shù)據(jù)保存到執(zhí)法記錄儀內(nèi)部的存儲器中,實現(xiàn)本地保存,又可以同步推送到遠程的指揮中心,使遠程的指揮中心可以觀看到現(xiàn)場的實時狀況。
基于上述設(shè)計思想,本實施例首先在Android系統(tǒng)的應(yīng)用層單獨創(chuàng)建音頻數(shù)據(jù)采集模塊和視頻數(shù)據(jù)采集模塊,如圖2所示,在執(zhí)法記錄儀啟用錄像功能時,分別獲取麥克風采集輸出的原始音頻數(shù)據(jù)和攝像頭采集輸出的原始視頻數(shù)據(jù),并通過在Android系統(tǒng)中單獨創(chuàng)建音頻預(yù)處理模塊、視頻預(yù)處理模塊、音頻編碼器、視頻編碼器、音頻分流器和視頻分流器,自行對獲取到的原始音、視頻數(shù)據(jù)進行預(yù)編譯、編碼和分發(fā)處理,繼而可以形成兩路音視頻信號,一路分發(fā)到Android系統(tǒng)的RTP通信模塊進行封裝,以用于向遠程的指揮中心傳送,另一路分發(fā)到Android系統(tǒng)的媒體混合器MediaMuxer,進行音視頻數(shù)據(jù)的混合處理,以用于本地保存,由此便可以規(guī)避麥克風被Android系統(tǒng)的MediaRecoder應(yīng)用所獨占的問題,實現(xiàn)錄像本地保存和遠程同步推送的功能。
在本實施例中,所述音頻數(shù)據(jù)采集模塊可以通過Android系統(tǒng)封裝的標準接口的AudioRecoder獲取所述麥克風輸出的原始音頻數(shù)據(jù),例如PCM數(shù)據(jù);所述視頻數(shù)據(jù)采集模塊可以通過攝像頭的Preview接口采用回調(diào)的方式獲取其輸出的原始視頻數(shù)據(jù),例如YUV數(shù)據(jù)。
對于獲取到的原始音頻數(shù)據(jù)和原始視頻數(shù)據(jù)在分發(fā)封裝前需要進行預(yù)編譯和編碼處理,為此,本實施例分別在Android系統(tǒng)的應(yīng)用層創(chuàng)建音頻預(yù)處理模塊和視頻預(yù)處理模塊,如圖2所示,在應(yīng)用層完成對原始音、視頻數(shù)據(jù)的預(yù)編譯處理,例如,在視頻圖像上添加水?。ɡ缇瘶?、時間、GPS定位坐標等)等。當然,在視頻圖像上添加水印也可以在Android系統(tǒng)的native層完成,并且按照Android系統(tǒng)的常規(guī)處理方式,對于原始視頻數(shù)據(jù)的預(yù)編譯過程通常都是在native層進行的。本實施例之所以將原始音、視頻數(shù)據(jù)的預(yù)編譯過程統(tǒng)一放到Android系統(tǒng)的應(yīng)用層完成,主要是考慮音、視頻數(shù)據(jù)在后面要經(jīng)過分流器進行分發(fā),分發(fā)前的預(yù)編譯必須是統(tǒng)一的,如果在native層做視頻數(shù)據(jù)的預(yù)編譯,那么在應(yīng)用層還需做RTP封裝前的預(yù)編譯。本實施例將音頻預(yù)處理模塊和視頻預(yù)處理模塊創(chuàng)建在應(yīng)用層,可以統(tǒng)一數(shù)據(jù)來源,便于數(shù)據(jù)的統(tǒng)一處理。此外,本實施例將獲取到的原始音視頻數(shù)據(jù)放到應(yīng)用層做數(shù)據(jù)的編譯和分發(fā)處理,相比放到native層,可以處理更加復(fù)雜的業(yè)務(wù)場景或者滿足并發(fā)的業(yè)務(wù)場景需求。例如可以滿足本實施例所提出的同時錄像和發(fā)送RTP數(shù)據(jù)包至流媒體服務(wù)器的設(shè)計需求等。
將通過所述音頻預(yù)處理模塊編譯輸出的音頻數(shù)據(jù)和視頻預(yù)處理模塊編譯輸出的視頻數(shù)據(jù)分別傳輸至音頻編碼器和視頻編碼器,如圖3所示,以進行音頻數(shù)據(jù)和視頻數(shù)據(jù)的編碼處理。在本實施例中,所述音頻編碼器和視頻編碼器優(yōu)選創(chuàng)建在Android系統(tǒng)的應(yīng)用層,結(jié)合圖2所示,具體可以利用Android系統(tǒng)標準API的MediaCodec編碼接口來創(chuàng)建,以對預(yù)編譯后的音頻數(shù)據(jù)和視頻數(shù)據(jù)進行壓縮、格式轉(zhuǎn)換等一系列的編碼處理。
將通過音頻編碼器編碼輸出的音頻數(shù)據(jù)傳輸至音頻分流器,利用音頻分流器對編碼后的音頻數(shù)據(jù)進行拷貝,以生成兩路相同的音頻數(shù)據(jù)進行分發(fā),如圖3所示。同理,將通過視頻編碼器編碼輸出的視頻數(shù)據(jù)傳輸至視頻分流器,利用視頻分流器對編碼后的視頻數(shù)據(jù)進行拷貝,以生成兩路相同的視頻數(shù)據(jù)進行分發(fā)。在本實施例中,所述音頻分流器和視頻分流器也優(yōu)選創(chuàng)建在Android系統(tǒng)的應(yīng)用層,結(jié)合圖2所示,以便于數(shù)據(jù)的統(tǒng)一處理。
本實施例將通過所述音頻分流器拷貝生成的兩路音頻信號進行分發(fā),一路傳送至Android系統(tǒng)的RTP通信模塊 (PRT,Real-time Transport Protocol, 實時傳輸協(xié)議),用于數(shù)據(jù)的遠程實時傳送;另一路傳送至Android系統(tǒng)的媒體混合器MediaMuxer,以用于本地保存,如圖3所示。同理,將通過所述視頻分流器拷貝生成的兩路視頻信號進行分發(fā),一路傳送至所述的RTP通信模塊,用于數(shù)據(jù)的遠程實時傳送;另一路傳送至所述的媒體混合器MediaMuxer,用于本地保存。
所述RTP通信模塊將接收到的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行打包封裝,上傳至流媒體服務(wù)器,以實現(xiàn)向遠程指揮中心的實時推送,完成流媒體數(shù)據(jù)的同步推送功能。指揮中心通過接收到的音視頻數(shù)據(jù)觀看到執(zhí)法現(xiàn)場的實時狀況,以便開展監(jiān)督、指揮和部署等工作。此外,指揮中心在同步觀看現(xiàn)場的實時狀況的同時,還可以利用指揮中心的NVR或者DVR錄像機進行錄像備份,以滿足不同的應(yīng)用需求。
所述媒體混合器MediaMuxer對接收到的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行音視頻混合處理,進而生成本地音視頻數(shù)據(jù),保存在執(zhí)法記錄儀內(nèi)部的存儲器中,以實現(xiàn)錄像數(shù)據(jù)的本地保存,便于現(xiàn)場的警務(wù)人員調(diào)取回放。
本實施例通過對執(zhí)法記錄儀中的Android系統(tǒng)的應(yīng)用層進行改進,解決了麥克風的獨占問題,實現(xiàn)了錄像數(shù)據(jù)本地保存以及遠程同步推送的功能,且同步效率高,實時性強,極大方便了警務(wù)人員的執(zhí)法工作。
最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。