• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Android平臺的音視頻監(jiān)控系統(tǒng)的設(shè)計

      2018-12-13 09:07:32楊志勇李衛(wèi)鋒
      計算機應(yīng)用與軟件 2018年12期
      關(guān)鍵詞:音視頻指令語音

      楊志勇 李衛(wèi)鋒 張 盛

      (清華大學(xué)深圳研究生院 廣東 深圳 518055)

      0 引 言

      近年來人工智能技術(shù)的快速發(fā)展,語音識別技術(shù)逐漸成熟,同時隨著Android智能手機和移動互聯(lián)網(wǎng)的普及,人們可以隨時隨地接入互聯(lián)網(wǎng)。如何通過手機實時查看家中的情況,以及家中出現(xiàn)各種狀況時能夠及時地通知到我們,成了大家迫切希望解決的問題。因此開發(fā)基于Android平臺的音視頻監(jiān)控系統(tǒng)對改善人們的居住條件具有重大意義,未來發(fā)展空間巨大。

      本文介紹了一種基于Android平臺的音視頻監(jiān)控系統(tǒng)[1],該系統(tǒng)分為數(shù)據(jù)采集端和用戶手機APP監(jiān)控端。數(shù)據(jù)采集端可以安裝在各種帶有攝像頭和錄音功能的Android終端上,用戶能夠通過語音喚醒系統(tǒng),然后控制攝像頭的打開與關(guān)閉,同時還可以接收其他語音指令并通過云端服務(wù)器發(fā)送到用戶手機APP監(jiān)控端。在用戶手機APP監(jiān)控端可以對收到的語音指令做出對應(yīng)的響應(yīng),同時也可以發(fā)送消息給數(shù)據(jù)采集端。因此,本系統(tǒng)可以非常方便地在數(shù)據(jù)采集端與手機APP監(jiān)控端進行互動,大大增強了傳統(tǒng)監(jiān)控系統(tǒng)的功能,同時可以根據(jù)需要隨時打開和關(guān)閉視頻監(jiān)控,節(jié)約服務(wù)器資源和網(wǎng)絡(luò)帶寬,為監(jiān)控系統(tǒng)提供了一個非常好的解決方案,其主要具有以下幾個特點:

      1) 數(shù)據(jù)采集端可以直接安裝在Android移動終端上,不需要專用設(shè)備,可以很好地利用家中的平板電腦、手機等設(shè)備,做到靈活使用,一機多用。

      2) 支持語音識別功能,能夠在數(shù)據(jù)采集端與用戶APP端進行消息互動,可根據(jù)需要開關(guān)監(jiān)控設(shè)備。

      3) 采用RTMP協(xié)議進行音視頻傳輸,Red5作為流媒體服務(wù)器,支持高清視頻,能夠動態(tài)設(shè)置是否在服務(wù)器上保存音視頻數(shù)據(jù)。

      1 總體方案設(shè)計

      監(jiān)控系統(tǒng)主要是由數(shù)據(jù)采集端、云端服務(wù)器和手機APP組成。數(shù)據(jù)采集端主要負責音視頻數(shù)據(jù)的采集和語音指令的識別處理;云端服務(wù)器則負責音視頻流媒體的傳輸、各種控制指令的解析和轉(zhuǎn)發(fā);手機APP負責UI展示、消息接收、音視頻的解碼播放等功能[2-3],其總體框架如圖1所示。

      圖1 智能監(jiān)控系統(tǒng)總體框架圖

      在數(shù)據(jù)采集端用戶通過語音與設(shè)備進行交互,設(shè)備檢測到人的聲音后會進行識別處理,然后執(zhí)行相應(yīng)的指令,采集端可以是手機、平板電腦等Android設(shè)備,通過連接路由器的Wi-Fi熱點或4G網(wǎng)絡(luò)等接入Internet,然后與服務(wù)器進行通信。手機APP通過網(wǎng)絡(luò)獲取服務(wù)器中的音視頻和各種指令數(shù)據(jù),同時也可以發(fā)送指令到服務(wù)器上,進而轉(zhuǎn)發(fā)到對應(yīng)的采集端。

      2 系統(tǒng)軟件設(shè)計

      監(jiān)控系統(tǒng)的數(shù)據(jù)采集端和手機APP均采用Android系統(tǒng)開發(fā),云端服務(wù)器采用Red5作為流媒體服務(wù)器,業(yè)務(wù)邏輯服務(wù)器使用Apache MINA網(wǎng)絡(luò)應(yīng)用框架。

      2.1 數(shù)據(jù)采集端

      數(shù)據(jù)采集端是監(jiān)控系統(tǒng)的核心模塊,主要包括指令識別以及音視頻的采集和推送功能。指令識別包括文本指令和語音指令。文本指令主要是指用戶通過手機APP發(fā)送過來的操作指令。語音指令一般為采集端通過麥克風獲取到的語音,然后轉(zhuǎn)換成對應(yīng)的文本指令,其功能主要分為:針對采集端的內(nèi)部指令和針對用戶APP的用戶指令。如果是內(nèi)部指令如打開、關(guān)閉攝像頭等,則采集終端會執(zhí)行相應(yīng)的動作;如果是外部指令則發(fā)送給服務(wù)器,進而轉(zhuǎn)發(fā)到APP端由用戶進行處理。本系統(tǒng)語音指令采用百度語音識別技術(shù),其具有識別率高、基礎(chǔ)服務(wù)免費、接入流程簡單等優(yōu)勢。采集端指令識別的工作流程如圖2所示。

      圖2 指令識別處理流程

      采集終端上電啟動后,會檢查是否有接收到用戶的文本指令,如果有則首先執(zhí)行文本指令,如果沒有則初始化語音識別服務(wù),等待喚醒。當檢測到特定的喚醒詞后,開啟指令識別功能,然后判斷指令是內(nèi)部指令還是針對用戶的外部指令,如果是內(nèi)部指令則直接執(zhí)行,否則就發(fā)送到服務(wù)器,進而轉(zhuǎn)發(fā)給相應(yīng)的用戶APP端。

      音視頻的采集主要是獲取麥克風和攝像頭的音視頻數(shù)據(jù),使用H.264進行編碼,然后對其進行RTMP協(xié)議封裝,最終發(fā)送到Red5流媒體服務(wù)器。在Android系統(tǒng)上Mediacodec類封裝了H.264的各種硬編解碼功能,它是Android在4.1中加入的API,是一種低級別的API,可以非常方便地訪問設(shè)備的媒體編解碼器,因此系統(tǒng)采用Mediacodec將音視頻編碼為H.264格式。音視頻傳輸采用RTMP(Real Time Messaging Protocol) 即實時消息傳輸協(xié)議,它是Adobe公司開發(fā)的為Flash播放器和服務(wù)器之間進行音視頻傳輸?shù)囊环N開發(fā)協(xié)議,其運行在TCP協(xié)議之上,能夠支持點播、直播功能,并且具有低延遲的特點,其在視頻監(jiān)控領(lǐng)域被廣泛使用。

      2.2 云端服務(wù)器

      云端服務(wù)器包含業(yè)務(wù)邏輯服務(wù)器和流媒體服務(wù)器。業(yè)務(wù)邏輯服務(wù)器主要負責處理用戶的注冊登錄、設(shè)備的上線、指令消息的轉(zhuǎn)發(fā)、消息推送等功能。流媒體服務(wù)器主要是進行音視頻的保存和轉(zhuǎn)發(fā)。

      業(yè)務(wù)邏輯服務(wù)器采用Apache MINA框架[4],它是一種幫助用戶開發(fā)高性能和高穩(wěn)定性的網(wǎng)絡(luò)應(yīng)用框架,支持TCP和UDP傳輸,具有異步的、非阻塞的、事件驅(qū)動的API,同時還支持Java NIO特性,能夠非常方便地擴展各種功能的數(shù)據(jù)過濾特性,在整個網(wǎng)絡(luò)通信中能夠與應(yīng)用程序互相隔離開來,客戶端和服務(wù)器只需要處理相應(yīng)的業(yè)務(wù)邏輯即可。

      流媒體服務(wù)器使用Red5[5-6],其為Java 語言開發(fā)、開放源代碼的Flash流媒體服務(wù)器,與Macromedia公司的Flash媒體服務(wù)器兼容,支持Linux、MacOS、Windows平臺。它的設(shè)計比較靈活,采用了插件的方式,可以非常方便的集成,能夠?qū)LV、MP3文件進行流化,目前已經(jīng)有成千上萬的公司開始使用RED5,包括亞馬遜和Facebook等。在本系統(tǒng)中數(shù)據(jù)采集端和用戶APP監(jiān)控端與云端服務(wù)器的交互流程如圖3所示。

      圖3 采集端、APP和服務(wù)端通信框架圖

      數(shù)據(jù)采集端設(shè)備啟動后會通過業(yè)務(wù)邏輯服務(wù)器進行設(shè)備的上線注冊,獲取流媒體的RTMP地址和消息的發(fā)送與接收,然后打開攝像頭推送視頻流到流媒體服務(wù)器。手機APP用戶登錄后,可以綁定采集端設(shè)備并獲取設(shè)備信息,如設(shè)備ID、RTMP地址等,從而可以向流媒體服務(wù)器獲取視頻流數(shù)據(jù),同理也可以與業(yè)務(wù)服務(wù)器進行消息的發(fā)送與接收。

      2.3 用戶APP端

      用戶APP監(jiān)控端的主要功能為實現(xiàn)用戶注冊登錄、獲取設(shè)備信息、查看數(shù)據(jù)采集端設(shè)備發(fā)送過來的監(jiān)控視頻等功能[7]。其操作流程如圖4所示。

      圖4 用戶APP處理流程

      用戶注冊登錄后會從服務(wù)器同步綁定的各種設(shè)備并展示在主界面上,如果沒有獲取到設(shè)備,則進入綁定設(shè)備列表進行綁定,綁定成功后會顯示設(shè)備圖標及名稱,點擊設(shè)備圖標會啟動一個新的Activity進入到設(shè)備的控制面板,從而可以執(zhí)行針對設(shè)備的各種控制操作。圖5為注冊登錄及設(shè)備控制面板界面。

      圖5 用戶APP登錄及設(shè)備控制面板

      在設(shè)備的控制面板可以查看從數(shù)據(jù)采集端接收到的各種指令消息,點擊“查看監(jiān)控畫面”即可打開流媒體播放器,播放采集端傳輸過來的音視頻數(shù)據(jù)。

      3 技術(shù)難點及解決方案

      系統(tǒng)中語音的正確識別、解析、轉(zhuǎn)發(fā)和執(zhí)行是體現(xiàn)系統(tǒng)靈活性的關(guān)鍵。數(shù)據(jù)采集端將獲取的音視頻數(shù)據(jù)進行編碼封裝并發(fā)送到流媒體服務(wù)器,以及如何在手機APP上進行播放給系統(tǒng)的實現(xiàn)帶來了挑戰(zhàn)。

      3.1 語音識別功能

      語音識別功能主要是通過對語音信號進行采集、特征提取、模式匹配等技術(shù)將其轉(zhuǎn)換為相應(yīng)的文本消息,然后采用自然語言處理技術(shù)對文本消息進行語義解析[8-9],最終轉(zhuǎn)換成能夠被機器識別和理解的文本指令。系統(tǒng)中采用百度語音SDK進行開發(fā),它集成了語音采集、語音預(yù)處理等功能,并且支持離在線融合技術(shù),能夠根據(jù)網(wǎng)絡(luò)自動判斷使用本地引擎還是云端引擎。其采用的自然語言處理技術(shù)支持三十多個領(lǐng)域的語義理解,可以滿足大部分的語音交互場景,目前的識別準確率可以達到97%以上。數(shù)據(jù)采集端通過語音SDK獲取文本指令,然后根據(jù)其內(nèi)容進行內(nèi)部處理或者通過網(wǎng)絡(luò)發(fā)送到服務(wù)器進而推送到用戶APP端,同時用戶APP端也可以發(fā)送控制指令到服務(wù)器,然后推送到對應(yīng)的采集端設(shè)備,達到了雙向通信功能。其內(nèi)部實現(xiàn)流程如圖6所示。

      圖6 APP與數(shù)據(jù)采集端通信

      服務(wù)器收到用戶APP端和數(shù)據(jù)采集端的指令后,都需要對指令進行解析、重組,并將信息同步到MySQL數(shù)據(jù)庫中進行保存記錄,然后再發(fā)送給對應(yīng)的接收方。

      3.2 音視頻采集及播放

      系統(tǒng)的音視頻編碼器分別采用AAC和H.264格式進行編碼。AAC是針對音頻數(shù)據(jù)而設(shè)計的一種壓縮格式,其具有非常高效的編碼算法,支持多聲道,具有很高的數(shù)據(jù)壓縮比,在網(wǎng)絡(luò)傳輸中應(yīng)用非常普遍。H.264是MPEG4之后開發(fā)的新一代數(shù)字視頻壓縮算法,具有碼率低,支持高質(zhì)量的圖像數(shù)據(jù),并且具有非常好的網(wǎng)絡(luò)適應(yīng)能力和糾錯恢復(fù)功能,同時在大多數(shù)Android系統(tǒng)上能夠通過MediaCodec進行硬編碼。

      在Android系統(tǒng)上音頻數(shù)據(jù)通過調(diào)用AudioRecord進行采集,采樣率使用44.1 kHz,音頻格式使用ENCODING_PCM_16BIT,音頻通道使用CHANNEL_CONFIGURATION_STEREO。在錄音之前首先調(diào)用new AudioRecord初始化AudioRecord。然后新建一個AudioRecordThread線程,在此線程中開啟錄音操作,然后把錄取的音頻數(shù)據(jù)發(fā)送到回調(diào)函數(shù)onRecvAudioData中進行編碼處理,核心代碼如下:

      //初始化AudioRecord

      mAudioRecord=new

      AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,audioChannel,audioFormat, buffsize);

      //開啟錄音線程進行錄音

      AudioRecordThread=new Thread(new Runnable() {

      public void run() {

      //開始錄音

      mAudioRecord.startRecording();

      audioData, 0, dataSize);

      //獲取audioData音頻數(shù)據(jù)

      ……

      //編碼音頻數(shù)據(jù)

      onRecvAudioData(audioData)

      }

      });

      視頻數(shù)據(jù)的采集通過調(diào)用Camera接口的回調(diào)函數(shù)onPreviewFrame獲取,其部分實現(xiàn)代碼如下:

      Public Camera.PreviewCallback

      getPreviewCallback() {

      return new Camera.PreviewCallback() {

      public void onPreviewFrame(final byte[] data, final Camera camera) {

      //data為攝像頭圖像數(shù)據(jù)

      }

      };

      }

      RTMP協(xié)議主要用來在FLV(Flash Video)和服務(wù)器之間進行音視頻通信[10],因此編碼后的音視頻數(shù)據(jù)需要封裝成FLV可以識別的數(shù)據(jù)格式。FLV格式分為Header和Body二部分,而Body則由一個個Tag組成,所以在發(fā)送數(shù)據(jù)時需要先發(fā)送Header。以下為RTMP初始化的部分代碼。

      rtmp=RTMP_Alloc();

      //分配RTMP實例

      RTMP_Init(rtmp);

      //進行RTMP初始化

      //設(shè)置RTMP連接超時時間

      rtmp->Link.timeout=timeOut;

      //設(shè)置RTMP的URL

      RTMP_SetupURL(rtmp,(char*)url.c_str());

      //使能寫功能

      RTMP_EnableWrite(rtmp);

      //開始連接RTMP服務(wù)器

      if (!RTMP_Connect(rtmp, NULL)) {

      return -1;

      }

      //連接RTMP流

      if (!RTMP_ConnectStream(rtmp, 0)) {

      LOGI(″RTMP_ConnectStream error″);

      return -1;

      }

      由于RTMP的流媒體服務(wù)器不對音視頻數(shù)據(jù)進行解碼和播放,在發(fā)送數(shù)據(jù)之前,需要將音視頻的編碼信息發(fā)送到流媒體服務(wù)器,因此首先需要獲取音視頻的編碼參數(shù)。而編碼參數(shù)SPS(序列參數(shù)集)、PPS(圖像參數(shù)集)正好包含在MediaCodec編碼后的前二幀視頻數(shù)據(jù)中,同時也是FLV視頻中Body數(shù)據(jù)的首個Tag,因此調(diào)用pushSpsPpsData函數(shù)先提取SPS和PPS進行發(fā)送。同理對于AAC音頻數(shù)據(jù)通過調(diào)用pushAudioInfo函數(shù)發(fā)送其編碼信息到流媒體服務(wù)器。最終都是調(diào)用RTMP_SendPacket(RTMP*r,RTMPPacket*packet,int queue)函數(shù)進行發(fā)送,其內(nèi)部基于TCP協(xié)議進行實現(xiàn)。

      在本監(jiān)控系統(tǒng)中,用戶可以根據(jù)需要選擇是否在流媒體服務(wù)器上保存數(shù)據(jù),因此在設(shè)備采集端RTMP初始化時可以選擇live、record、append三種模式,其中l(wèi)ive模式為不保存數(shù)據(jù),record模式為保存數(shù)據(jù),append為追加模式保存數(shù)據(jù)。如設(shè)置live模式則設(shè)置對應(yīng)的標志位rtmp->Link.lFlags |=0x40; record模式為0x80,append為0x100。

      在用戶APP端視頻的播放采用Google開源的ExoPlayer播放器,其能夠支持HTTP動態(tài)自適應(yīng)流,能夠非常方便地自定義設(shè)計和擴展。整個音視頻的采集播放流程如圖7所示。

      圖7 音視頻采集播放流程

      4 系統(tǒng)測試及結(jié)果

      系統(tǒng)的測試中,云端服務(wù)器采用阿里云的Linux平臺服務(wù)器,配置為CPU 1核,內(nèi)存1 GB,網(wǎng)絡(luò)為1 Mbps,數(shù)據(jù)采集端和用戶APP端分別在Wi-Fi和4G網(wǎng)絡(luò)的情況下,發(fā)送音視頻可以非常流暢的顯示,其數(shù)據(jù)采集端和用戶APP端的監(jiān)控畫面顯示如圖8所示,左邊手機為采集端,通過攝像頭獲取音視頻數(shù)據(jù),右邊手機為用戶APP端,正常獲取到了采集端的音視頻。

      圖8 采集端(左)和APP端(右)

      5 結(jié) 語

      隨著移動互聯(lián)網(wǎng)、人工智能技術(shù)的發(fā)展,語音識別、圖像分析技術(shù)變得越來越成熟,這些技術(shù)引入到視頻監(jiān)控領(lǐng)域會大大增強監(jiān)控系統(tǒng)的功能。通過增加語音識別功能,改變了傳統(tǒng)監(jiān)控系統(tǒng)只能單方面通信的功能,而引入云端服務(wù)器、用戶監(jiān)控端可以讓用戶隨時隨地查看監(jiān)控系統(tǒng),增加了監(jiān)控系統(tǒng)的可用性,提供了一個非常有效的解決方案。

      猜你喜歡
      音視頻指令語音
      聽我指令:大催眠術(shù)
      魔力語音
      3KB深圳市一禾音視頻科技有限公司
      基于MATLAB的語音信號處理
      電子制作(2019年14期)2019-08-20 05:43:38
      基于MQ3與MP3的價廉物美的酒駕語音提醒器
      電子制作(2019年9期)2019-05-30 09:42:10
      ARINC661顯控指令快速驗證方法
      對方正在輸入……
      小說界(2018年5期)2018-11-26 12:43:42
      LED照明產(chǎn)品歐盟ErP指令要求解讀
      電子測試(2018年18期)2018-11-14 02:30:34
      WIFI音視頻信號傳輸?shù)年P(guān)鍵問題探究
      電子制作(2018年12期)2018-08-01 00:48:06
      高速公路整合移動音視頻系統(tǒng)應(yīng)用
      崇礼县| 桦川县| 措勤县| 湾仔区| 铜陵市| 海门市| 阿勒泰市| 什邡市| 高密市| 天祝| 晋江市| 高清| 开江县| 太湖县| 牙克石市| 江口县| 凉城县| 平顶山市| 濉溪县| 手游| 仙游县| 色达县| 莒南县| 新龙县| 新建县| 桐柏县| 丹棱县| 甘肃省| 鲜城| 香港| 伊宁市| 霍山县| 湘乡市| 安塞县| 公主岭市| 陈巴尔虎旗| 赣榆县| 宁明县| 同江市| 荆州市| 颍上县|