標籤:android 視頻監控 音視頻開發 即時通訊 音視頻軟體
網路資訊化的趨勢,跟著流媒體技術、無線網路技術以及視頻壓縮技術的不斷進步,視頻監控技術得到了廣泛的運用,一起,監控的規劃和規劃也在不斷的擴充。大家關於安全保證的需求不斷的提高,然後使得過去以圖文為主的內容服務應經不能夠滿意使用者的需要,取而代之的則是音視頻多媒體服務。運用移動終端技術的視頻監控體系,不只具有體積小型化、裝置傻瓜化以及裝備靈活化的優勢,最重要的是還降低了成本。因為網路功用和視頻壓縮都被會集的儲存在小體積的裝置中,因此,經過網路長途監控視頻裝置就能夠取得監控視頻。當前,網路視頻監控不只面向企業級客戶,逐漸的,也經過視頻監控為福士供給服務。如旅遊景點人流、景點檢查、交通導航等。依據敞開渠道的移動視頻監控已經成為監控研究領域的熱門
視頻監控體系需要的傳輸資料分為兩類:操控資訊和視頻資料。儘管兩類資料進行傳輸的時分都是依據IP協議進行的,可是,他們分別採取了運用層協議和傳輸層協議,這是因為兩者的特性需求和完結軟體的規劃不一樣導致的[3]:榜首,選用TCP傳輸層協議進行資訊操控。之所以選用TCP/IP的傳輸形式進行資訊操控,這是因為操控資訊儘管不需求較高的即時性,可是關於傳輸的可靠性需求卻非常高。因此,選用了有嚴厲握手進程和重傳機制的TCP傳輸層協議。第二,傳輸視頻資料時,選用RTP運用層協議和UDP傳輸層協議。因為網路視頻的時效性需求遠遠高於可靠性,因此,本文選用了RTP運用層的傳輸協議支撐即時傳輸服務。在傳輸層,儘管UDP盡量選用交給辦法進行出資料轉送,可是卻沒有擁塞操控,然後關於大資料量的即時視頻資料對比合適此辦法,因此,本論文選用UDP協議作為傳輸層協議。接納到上層運用程式的多媒體資訊碼流後,經過RTP裝配成資料包發送給下層,然後在經過UDP/IP協議封裝後構成RTP流。傳輸操控子體系是依據RTP協議構建的,經過傳輸層通訊運用的UDPSocket完結。
在PC機上完結了對視頻監控體系運用程式的開發,首要選用圖畫接納辦法來完結移動渠道的智能視頻監控體系。
伺服器端的功用首要是初始化網路攝影機和網路連接埠號碼以及主機地址,敞開視頻監控服務,即時捕捉監控現場圖畫然後等待用戶端的銜接懇求[4]。與長途懇求的手機用戶端成功樹立銜接後,便開端向用戶端發送視頻圖畫資訊。伺服器端的規劃流程圖2所示。擔任現場監控的Pc伺服器端,需要對監控裝置進行初始化操控,選用Visual Studio編程環境下的c++/MFC語言來完結。在進行網路通訊傳輸時,體系是依據RTP協議構建的,經過傳輸層通訊運用的UDPSocket來完結伺服器端和用戶端之間的通訊,以完結圖畫安穩傳輸。Socket通訊的有些經過MFC語言中的CSocket類來完結,而網路攝影機圖畫收集和操控則運用相應服務廠商供給的SDK進行完結。視頻的捕獲中,規划了CCaptureVideo類,並將其完結,經過對翻開視頻響應函數中該類的調用來完結對視頻的捕捉。在處理捕獲的視頻圖畫時,將捕獲的視頻圖畫轉換成接連的JPEG格局的圖畫儲存在資料緩衝區中,該線程不停地承受用戶端的銜接懇求,將圖畫發送給用戶端。
該視頻監控體系的用戶端首要經過TCP/IP協議和伺服器端進行施行通訊的,一起運用Socket完結全部進程。作為通訊鏈控制代碼的Socket網路通訊通訊端用於描繪連接埠和IP地址。經過Socket編程,運用程式會向網路發出懇求或應對網路懇求。Socket作為通訊的柱石,支撐TCP/IP協議的網路通訊的根本操作單元。本程式中運用的Socket傳輸形式,是面向銜接的Socket操作運用TCP協議。Socket在該形式下,有必要在用戶端和服務端樹立Socket銜接,一旦樹立好銜接,便能夠在一個流介面進行翻開、讀、寫以及封閉等操作,而另一端則以一樣的次序承受所有的資訊。相比無銜接而言,儘管面向銜接的操作功率較低,但資料卻具有更高的安全性。依據Android視頻伺服器體系終端,有必要經過選用Socket網路通訊技術承受來自監控前端的視頻資料。Socket通訊使得監控前端和終端,經過網路銜接完結資料的互動。Socket銜接初始化後才能進行Socket通訊,其完結進程與面向銜接的Socket通訊一樣。創立Socket服務線程,當發生監聽後,服務主進程擔任不斷迴圈的監聽接納到的懇求,一起樹立新的客戶銜接Socket,創立針對此Socket的通訊進程。在視頻監控體系中創立Socket的進程,首先用ServerSocket serverSocket=null在伺服器端創立一個Socket,然後用serverSocket=new ServerSocket(8888)監聽連接埠8888。假如在該連接埠接納到用戶端Socket的懇求,則用Socketclient=serverSocket.accept()來創立一個Socket目標。樹立銜接後,調用InputStreamReader來接納伺服器端發送的視頻資料,然後經過BufferedReader將此資料讀取出來。伺服器從前端收集體系接納的資料經過BufferedWriter寫入,並經過OutputStreamWriter發送給網路用戶端。通訊結束以後,經過os.close()、is.close()和socket.close()來封閉輸出輸入資料流並封閉Socket連接埠,伺服器中止Socket通訊。網路用戶端終端作為接納資料的用戶端,首先用Socketsocket=null在終端創立一個Socket,然後設定Socket通訊的伺服器的IP地址和通訊連接埠socket=new Socket("192.168.1.101",8888),成功與伺服器樹立銜接後,用InputStreamReader創立輸入資料流,以後經過BufferedReader讀取出來,進行解析並顯現在使用者端介面上,資料接納結束後,經過BufferedWriter寫入接納結束資訊並經過OutputStreamWriter發送至伺服器,通訊結束後,經過os.close()、is.close()、socket.close()封閉輸入輸出資料流,並封閉Socket連接埠,至此全部Socket通訊完結。
因為伺服器發送的是解碼後的圖畫資料,因此用戶端接納到的資料流能夠構成一幅圖畫[5-6]。經過Android供給的BitmapFactory.decodeByteAllrayO函數,能夠從接納到的資料流中得到Bitmap格局的目標。後文的處理皆針對此Bitmap目標進行。
為了完結監控畫面的顯現,需承繼View類,重寫了onDraw()辦法。其中,在onDraw()辦法中所完結的內容,將在用戶端介面上顯現出來。界說一個Bitmap目標,此目標將在畫布中製作出來。當擔任接納圖畫的線程接納到新的圖畫資料時,將資料傳給該目標,並線上程中調用postlnvalidate0辦法,重繪畫面。為了體系完結非常好的顯現作用,本規劃選用了雙緩衝機制。顯現的畫面儲存在原先目標中,而接納的畫面儲存在變數另一目標中。假如網路情況不好,並不能及時接納到新的資料,使得另一目標為空白,則原先的變數不更新,還將顯現之前的畫面,這樣處理將在必定程度上提高使用者體會,削減網路情況不好情況下的突發性黑屏。
依據Android的GUI體系,能夠完結長途視頻即時監督的使用者介面,並供給播放器和使用者之間的互動介面。Java和C語言結構一起構成了GUI體系,此體系對下層經過調用顯現輸入、輸出裝置的驅動,將Android的軟體體系和底層的硬體聯絡起來;此體系關於上層供給了Java層次的繪圖介面,Android的Java結構層調用這些介面來構建各種UI元素。此外,Java也能夠調用繪圖介面。
本文出自 “音視頻即時通訊” 部落格,請務必保留此出處http://yinshipin1.blog.51cto.com/9620924/1589280
基於Android平台的移動視頻監控系統開發