本發(fā)明屬于數(shù)據(jù)通信領域,具體地涉及一種基于Android系統(tǒng)及Wi-Fi Direct的實時協(xié)作數(shù)據(jù)共享系統(tǒng)。
背景技術:
Android設備就目前來說擁有較高的普及率,并且由于其自身的便攜性使得人們在生產(chǎn)和生活的協(xié)作更為方便。然而,對于野外的壞境或者是工業(yè)環(huán)境中,由于流動性等原因,我們不容易把無線局域網(wǎng)覆蓋到整個工作環(huán)境中,手機移動信號在野外被屏蔽的情況下則更難進行交流。
例如在較為偏遠的山區(qū)有一群游客失蹤了,緊急組成的搜索隊分開尋找失聯(lián)人員,然而此時并沒有手機信號或者其他通訊工具,分布在大面積范圍內(nèi)的人員無法及時的信息溝通和任務分派。
又或者是在一片大區(qū)域的工業(yè)環(huán)境中,幾個施工人員負責一件需要協(xié)同完成的任務,然而此時沒有手機信號和無線網(wǎng)絡,由于相隔較遠,無法及時溝通。
因此我們需要在不能連接到互聯(lián)網(wǎng)中同時移動信號也無法獲得的情況下,通過我們的移動智能設備如手機等進行即時而方便的信息交流。
Wi-Fi Direct通信協(xié)議是指允許設備無需通過無線路由器或者是移動數(shù)據(jù)網(wǎng)絡即可對等連接。建立對等連接后的設備可以進行數(shù)據(jù)傳輸?shù)绕渌δ埽ㄟ^合理的設置數(shù)據(jù)格式及靈活的Android設備間的數(shù)據(jù)流及控制流的交互機制,可以實現(xiàn)設備采集到的音視頻數(shù)據(jù)的靈活共享。與藍牙技術相同的地方在于,這種協(xié)議允許無線設備以P2P的形式互連,不過相比較藍牙在傳輸速度和傳輸距離上有大幅提升。由此可見,在中距離的不基于基礎網(wǎng)絡設施的無線通信中Wi-Fi Direct具有更好的應用前景。
技術實現(xiàn)要素:
針對上述技術問題,本發(fā)明目的是:提供一種基于Android系統(tǒng)及Wi-Fi Direct的實時協(xié)作數(shù)據(jù)共享系統(tǒng),使得用戶可以在有效工作范圍內(nèi)搜索到其他設備并建立起對等連接,建立連接的過程不需要依賴移動信號或者是無線熱點。當連接建立之后,設備之間可以進行實時視頻畫面?zhèn)鬏敽鸵纛l對講功能的實時協(xié)作數(shù)據(jù)共享。
本發(fā)明的技術方案是:
一種基于Android系統(tǒng)及Wi-Fi Direct的實時協(xié)作數(shù)據(jù)共享系統(tǒng),其特征在于,包括:
Wi-Fi Direct模塊,通過Wi-Fi Direct進行設備搜索與匹配連接及管理;
Socket通信模塊,用于在已連接的設備間基于TCP協(xié)議的套接字進行數(shù)據(jù)傳輸;
實時視頻模塊,用于在成功匹配連接的設備中,通過TCP/IP網(wǎng)絡通信協(xié)議發(fā)送和接收實時視頻圖像;
語音對講模塊,用于在成功匹配連接的設備中,通過TCP/IP網(wǎng)絡通信協(xié)議發(fā)送和接收語音信息。
優(yōu)選的,所述Wi-Fi Direct模塊包括:
Wi-Fi Direct啟動模塊,將頁面跳轉至系統(tǒng)的Wi-Fi設置界面,用于設置打開或者關閉;
Wi-Fi Direct搜索模塊,當打開Wi-Fi Direct后,注冊一個廣播監(jiān)聽器監(jiān)聽設備當前的連接狀態(tài)和設備信息并把附近的可用設備顯示在列表中,當設備的當前信息改變時,觸發(fā)相應的事件;
Wi-Fi Direct連接模塊,通過調(diào)用相應的API函數(shù)進行連接請求建立對等連接小組,建立小組的過程中確立服務器端和客戶端。
優(yōu)選的,所述Socket通信模塊的通信包括服務器端Socket通信和客戶端Socket通信,所述服務器端Socket通信包括:
a) 創(chuàng)建服務器Socket實例對象用于監(jiān)聽設定的端口;
b) 創(chuàng)建一個線程用于監(jiān)聽客戶端的連接請求,等待客戶端連接;
c) 成功建立連接后,進行讀取的數(shù)據(jù)和寫入;
所述客戶端Socket通信包括:
1)創(chuàng)建客戶端Socket實例對象,設定網(wǎng)絡地址和端口號來指定對應的服務器端的服務器Socket實例對象;
2)主動連接到服務端的Socket;
3)成功建立連接后,進行讀取的數(shù)據(jù)和寫入。
優(yōu)選的,所述實時視頻模塊包括:
圖像采集模塊,通過Android的onPreviewFrame()重載函數(shù)獲取攝像頭的當前圖像,對圖像進行壓縮和裁剪,轉換成文件線程類中傳輸格式數(shù)據(jù),發(fā)送圖像數(shù)據(jù);
圖像顯示模塊,接收到圖像數(shù)據(jù)后,對圖像數(shù)據(jù)進行解碼還原,通過圖像展示組件顯示圖像。
優(yōu)選的,所述語音對講模塊包括:
音頻采集模塊,創(chuàng)建音頻錄制的實例對象用于錄音設置,根據(jù)觸發(fā)事件開始錄音線程,并把采集的音頻信息存入buffer緩沖區(qū),通過傳輸線程根據(jù)觸發(fā)事件將采集的音頻信息進行發(fā)送;
音頻播放模塊,創(chuàng)建音頻設置的實例對象對播放時的參數(shù)進行設置,當子線程獲取到接收到的音頻數(shù)據(jù)后,通過相應的API函數(shù)方法將獲取到的內(nèi)容以音頻形式播放。
本發(fā)明又公開了一種基于Android系統(tǒng)及Wi-Fi Direct的實時協(xié)作數(shù)據(jù)共享方法,其特征在于,包括以下步驟:
S01:通過Wi-Fi Direct進行設備搜索與匹配連接及管理;
S02:在已連接的設備間基于TCP協(xié)議的套接字進行數(shù)據(jù)傳輸;
S03:在成功匹配連接的設備中,通過TCP/IP網(wǎng)絡通信協(xié)議發(fā)送和接收實時視頻圖像和語音信息。
優(yōu)選的,所述步驟S01包括:
將頁面跳轉至系統(tǒng)的Wi-Fi設置界面,用于設置打開或者關閉;
當打開Wi-Fi Direct后,注冊一個廣播監(jiān)聽器監(jiān)聽設備當前的連接狀態(tài)和設備信息并把附近的可用設備顯示在列表中,當設備的當前信息改變時,觸發(fā)相應的事件;
通過調(diào)用相應的API函數(shù)進行連接請求建立對等連接小組,建立小組的過程中確立服務器端和客戶端。
優(yōu)選的,所述步驟S02包括服務器端Socket通信和客戶端Socket通信,所述服務器端Socket通信包括:
a) 創(chuàng)建服務器Socket實例對象用于監(jiān)聽設定的端口;
b) 創(chuàng)建一個線程用于監(jiān)聽客戶端的連接請求,等待客戶端連接;
c) 成功建立連接后,進行讀取的數(shù)據(jù)和寫入;
所述客戶端Socket通信包括:
1)創(chuàng)建客戶端Socket實例對象,設定網(wǎng)絡地址和端口號來指定對應的服務器端的服務器Socket實例對象;
2)主動連接到服務端的Socket;
3)成功建立連接后,進行讀取的數(shù)據(jù)和寫入。
優(yōu)選的,所述步驟S03包括:
通過Android的onPreviewFrame()重載函數(shù)獲取攝像頭的當前圖像,對圖像進行壓縮和裁剪,轉換成文件線程類中傳輸格式數(shù)據(jù),發(fā)送圖像數(shù)據(jù);
接收到圖像數(shù)據(jù)后,對圖像數(shù)據(jù)進行解碼還原,通過圖像展示組件顯示圖像;
創(chuàng)建音頻錄制的實例對象用于錄音設置,根據(jù)觸發(fā)事件開始錄音線程,并把采集的音頻信息存入buffer緩沖區(qū),通過傳輸線程根據(jù)觸發(fā)事件將采集的音頻信息進行發(fā)送;
創(chuàng)建音頻設置的實例對象對播放時的參數(shù)進行設置,當子線程獲取到接收到的音頻數(shù)據(jù)后,通過相應的API函數(shù)方法將獲取到的內(nèi)容以音頻形式播放。
與現(xiàn)有技術相比,本發(fā)明的優(yōu)點是:
1、使用Wi-Fi Direct技術的移動設備不需要通過無線局域網(wǎng)絡或者GPRS基站等其他基礎網(wǎng)絡設施,也不需要通過網(wǎng)線將設備限制在一個固定的路由器或者中心節(jié)點上,Wi-Fi Direct設備可以隨時隨地進行對等連接。
2、可以簡單方便的設備發(fā)現(xiàn)功能。使用Wi-Fi Direct技術的移動設備能夠搜索對等設備,同時將在有效工作范圍的設備信息展示出來,用戶可以方便地選擇想要連接的設備。
3、Wi-Fi Direct設備的連接是簡單而安全的。因為Wi-Fi Direct設備采用的是安卓設備的WPS機制,所以相應簡化了在對等設備之間建立連接的過程。
4、Wi-Fi Direct設備的采用的是P2P的數(shù)據(jù)傳輸模式,因為不用接入無線網(wǎng)絡,從而避免了通道的阻塞。
5、應用前景廣闊,未來越來越多的設備會使用Android系統(tǒng),比如手機、相機、顯示器和打印機等等。通過Wi-Fi Direct的通信方式,可以使用一臺智能手機在沒有無線局域網(wǎng)的情況下與周圍的其他智能設備進行數(shù)據(jù)交互。比如,通過移動智能手機與打印機通過Wi-Fi Direct進行互連,可以很方便的打印出我們手機中的照片或者文檔;又比如,在辦公室里,員工可以通過基于Wi-Fi Direct的移動設備互連來進行會議文件或者視頻音頻等文件的傳輸。Wi-Fi Direct標準的推出,為未來的移動智能辦公、智能家居生活等方面提供了非常大的幫助。
附圖說明
下面結合附圖及實施例對本發(fā)明作進一步描述:
圖1為本發(fā)明基于Android系統(tǒng)及Wi-Fi Direct的實時協(xié)作數(shù)據(jù)共享系統(tǒng)的層次結構圖;
圖2為本發(fā)明基于Android系統(tǒng)及Wi-Fi Direct的實時協(xié)作數(shù)據(jù)共享系統(tǒng)的模塊結構圖;
圖3為本發(fā)明廣播接收器的監(jiān)聽流程圖;
圖4為本發(fā)明設備搜索流程圖;
圖5為本發(fā)明圖像接收流程圖。
具體實施方式
為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚明了,下面結合具體實施方式并參照附圖,對本發(fā)明進一步詳細說明。應該理解,這些描述只是示例性的,而并非要限制本發(fā)明的范圍。此外,在以下說明中,省略了對公知結構和技術的描述,以避免不必要地混淆本發(fā)明的概念。
實施例:
本實施例以Android智能移動設備,每臺設備都能夠?qū)i-Fi進行設置,然后開始搜索可用的對等設備并在可用設備列表中顯示出來。用戶選擇想要連接的設備點擊連接按鈕后系統(tǒng)發(fā)出連接請求,收到連接請求的設備確認后即可建立起對等連接。
系統(tǒng)會使正在連接過程中的設備組成一個小組,系統(tǒng)由GroupOwner協(xié)商算法決定服務器端和客戶端。
本發(fā)明的系統(tǒng)可分為四個層次,如圖1所示,包括用戶直接操作的界面層(UI層)、業(yè)務處理的邏輯層、數(shù)據(jù)交互的通信層和設備底層的驅(qū)動層。每層的功能具體如下:
a) 界面層(UI層):用戶通過界面層(UI層)直接和系統(tǒng)進行交互,通過進行相應的操作發(fā)送給請求給邏輯層,邏輯層做出相應的不同反應然后展示到界面上,完成用戶對軟件進行操作的過程。
b) 邏輯層:對用戶不同的操作請求進行處理和響應,通過不同的API函數(shù)庫進行相應的操作,實現(xiàn)系統(tǒng)和用戶的交互。
c) 通信層:實現(xiàn)設備間的信息數(shù)據(jù)交互,即搜索、連接、圖像數(shù)據(jù)和音頻數(shù)據(jù)等。
d) 驅(qū)動層:本層主要實現(xiàn)系統(tǒng)的Wi-Fi Direct的相關技術支持,為底層的應用程序提供API函數(shù)接口等。
本系統(tǒng)通過Socket套接字且利用Wi-Fi Direct技術進行設計,如圖2所示,本發(fā)明包括四個模塊,分別為實時視頻模塊、語音對講模塊、Socket通信模塊和Wi-Fi Direct模塊,每個模塊具體內(nèi)容如下:
a) 實時視頻模塊:在成功匹配連接后的設備中,用戶可以對方傳送自己攝像頭當前的畫面,亦或可以接受對方的實時畫面。
b) 語音對講模塊:在成功匹配連接后的設備中,用戶可以進行語音對講,實現(xiàn)交流協(xié)作。
c) Socket通信模塊:通過Socket套接字為上述的系統(tǒng)功能實現(xiàn)提供網(wǎng)絡通信接口。
d) Wi-Fi Direct模塊:系統(tǒng)通過Wi-Fi Direct完成設備的搜索與匹配連接,在連接建立成功后,進行其他的功能實現(xiàn)。
Wi-Fi Direct模塊是系統(tǒng)的核心模塊,通過底層的硬件支持和API的函數(shù)接口為后面基于Socket的通信提供技術支持。Wi-Fi Direct模塊包括以下幾個模塊:
1) Wi-Fi Direct啟動模塊
在用戶打開程序后,如果設備沒有默認開啟Wi-Fi Direct功能,為了方便用戶的操作體驗,在需要開啟Wi-Fi Direct功能選項的時候,通過按鈕來直接跳轉到系統(tǒng)的Wi-Fi設置界面,用戶可以直接選擇打開或者關閉選項,然后返回程序界面。
2) Wi-Fi Direct搜索模塊
當用戶打開Wi-Fi Direct功能后,通過注冊一個廣播監(jiān)聽器來監(jiān)聽設備的當前的連接狀態(tài)、設備信息等并把附近的可用設備顯示在列表中,當設備的當前信息改變時,觸發(fā)相應的事件。
3) Wi-Fi Direct連接模塊
當用戶搜索到附近的可連接的對等設備后,用戶可以選擇想要連接的設備進行連接。此時,通過調(diào)用相應的API函數(shù)進行連接請求建立起對等連接小組,建立小組的過程中確立服務器端和客戶端。設備連接的過程使用的是WPS(Wi-Fi Protected Setup)機制,在Android系統(tǒng)中有三種WPS:PIN(Personal Information Number)模式,通過4或8位數(shù)建立連接;PBC(Push Button Configuration)模式,通過點擊按鈕確認建立連接;WAP2加密模式,通過安全密碼建立連接。
Wi-Fi Direct的實現(xiàn)包括初始化Wi-Fi Direct、監(jiān)聽Wi-Fi Direct狀態(tài)、搜索對等設備和連接對等設備。
初始化Wi-Fi Direct
a) 獲取系統(tǒng)權限
Android應用程序必須在AndroidManifest.xml文件中設置了應用程序的權限后才能夠使用Wi-Fi Direct的相關接口函數(shù)和其他設備硬件使用權限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
</uses-permission>
上述代碼就加入了APP訪問Wifi狀態(tài)的權限,同時還需要加入拍攝圖片視頻、完全訪問WLAN、讀取手機狀態(tài)和身份等權限。之后在安裝應用程序的時候,系統(tǒng)會顯示需要用到的權限并確認安裝。
b) 初始化
在應用程序的主Activity中的創(chuàng)建一個WifiP2pManager實例對象,通過相應的Wi-Fi Direct接口函數(shù)注冊當前的應用程序。應用程序通過WifiP2pManager系統(tǒng)服務進行Wi-Fi Direct的連接與管理,成功注冊后返回一個WifiP2pManager.Channel對象,這兩個參數(shù)最后都被傳給系統(tǒng)創(chuàng)建的廣播接收器。系統(tǒng)創(chuàng)建一個WifiP2pManager的動作監(jiān)聽器,通過Broadcast Intent得到WifiP2pManager相關聯(lián)的動作返回值。主要代碼如下:
//表示W(wǎng)i-Fi對等網(wǎng)絡狀態(tài)發(fā)生了改變
intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
//表示可用的對等點的列表發(fā)生了改變
intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
//表示W(wǎng)i-Fi對等網(wǎng)絡的連接狀態(tài)發(fā)生了改變
intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
//設備配置信息發(fā)生了改變
intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
c) Wi-Fi Direct廣播接收器
在系統(tǒng)的主Activity中注冊Wi-Fi Direct廣播接收器同時要在onDestroy()方法里面主要這個廣播接收器。主要代碼如下:
//注冊wifi廣播接收者
receiver = new WiFiDirectBroadcastReceiver();
registerReceiver(receiver, intentFilter);
//取消wifi廣播接收者
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}。
監(jiān)聽Wi-Fi Direct狀態(tài)
a) 創(chuàng)建廣播接收器,用來監(jiān)聽相應的事件并進行響應。
首先注冊WifiP2pManager和其中Channel的實例化對象,然后創(chuàng)建一個廣播接收器。
b) 在廣播接收器對特定的意向進行函數(shù)操作從而實現(xiàn)監(jiān)聽響應。具體流程如圖3所示。
搜索對等設備
當用戶按下搜索按鈕后,系統(tǒng)會廣播匹配意向,程序接收到該意向后,調(diào)用相應的方法就能獲得已經(jīng)得到的設備清單。具體流程如圖4所示。
連接對等設備
用戶點擊可連接列表中的設備進行連接,需要調(diào)用Wi-Fi Direct中的connect()方法,而設備的相關信息保存在WifiP2pConfig對象中。
成功連接后的設備通過Socket通信來進行設備之間的數(shù)據(jù)傳輸。Socket通信是服務器和客戶端之間的通信,Socket通信模塊是基于TCP協(xié)議的套接字來進行實時畫面的傳輸和音頻數(shù)據(jù)的傳輸。分為服務器端的Socket通信和客戶端的Socket通信兩個部分。
首先,服務端的Socket通信包括:
a) 創(chuàng)建ServerSocket實例對象用來監(jiān)聽設定好的端口。
b) 創(chuàng)建一個線程用來監(jiān)聽客戶端的連接請求,等待客戶端主動連接。
c) 成功建立連接后,通過Input Stream讀取數(shù)據(jù),通過Output Stream寫入數(shù)據(jù)。
其次,客戶端的Socket通信包括:
a) 創(chuàng)建客戶端Socket的實例對象,設定好網(wǎng)絡地址和端口號來指定對應的服務端的ServerSocket。
b) 主動連接到服務端的Socket。
c) 成功建立連接后,通過Input Stream讀取數(shù)據(jù),通過Output Stream寫入數(shù)據(jù)。
實時視頻模塊用于獲取當前攝像頭的實時畫面并進行傳輸。實時視頻模塊是建立在服務器和客戶端的連接基礎上的,主要分為三個部分:圖像的采集,數(shù)據(jù)的傳輸和圖像的顯示。以下分別對三個部分進行介紹。
a) 圖像采集
通過Android的onPreviewFrame()重載函數(shù)來獲取攝像頭的當前圖像,參數(shù)byte[]是這個函數(shù)中的一個重要參數(shù),內(nèi)容是攝像頭的實時圖像數(shù)據(jù),然后系統(tǒng)使用YuvImage方法可以將該數(shù)據(jù)轉換為圖片文件,之后系統(tǒng)就可以對該圖片進行壓縮和裁剪,將圖片進行壓縮轉換后轉換成文件線程類中需要的ByteArrayOutputStream數(shù)據(jù),然后啟動發(fā)送線程將圖像數(shù)據(jù)發(fā)送給對方。
b) 數(shù)據(jù)傳輸
在用戶成功建立Socket連接后,單擊開始傳輸按鈕觸發(fā)點擊時間后,啟動數(shù)據(jù)傳輸?shù)木€程。發(fā)送方將數(shù)據(jù)通過OutputStream傳送給接收方,接收方則通過發(fā)送方的Socket獲取對應的InputStream,讀取其中的字節(jié)流,然后通過相應的數(shù)據(jù)還原展現(xiàn)在圖像展示組件中。
c) 圖像顯示
接收方在收到發(fā)送方傳來的數(shù)據(jù)后,對數(shù)據(jù)進行解碼還原,通過surfaceview組件將收到的圖像顯示在屏幕上,主要流程如圖5所示。
語音對講模塊主要負責實時語音通信的功能。語音對講模塊同樣也是建立在服務器和客戶端的連接基礎上的,主要分為三個部分:音頻數(shù)據(jù)的采集,數(shù)據(jù)的傳輸和音頻的播放。以下分別對三個部分進行介紹。
a) 音頻的采集
在錄音開始前需要創(chuàng)建一個AudioRecord的實例對象來進行相關的錄音設置。在用戶按下錄音按鈕觸發(fā)點擊事件后開始錄音線程,系統(tǒng)通過start Recording()開始錄音并且把采集到的音頻存入到buffer緩沖區(qū)中,然后通過傳輸線程將采集到音頻信息發(fā)送給對方的設備。用戶松開按鈕后觸發(fā)相應的事件結束錄音并啟動發(fā)送線程。
b) 數(shù)據(jù)傳輸
與視頻畫面?zhèn)鬏旑愃?,通過OutputStream和InputStream進行數(shù)據(jù)流的傳輸接收。
c) 音頻的播放
系統(tǒng)通過Android的AudioTrack類來進行音頻的播放。通過創(chuàng)建一個AudioTrack實例對象并對播放時的參數(shù)進行相應的設置。當子線程獲取到接收到的數(shù)據(jù)后,通過相應的API函數(shù)方法將獲取到的內(nèi)容以音頻的形式播放,從而讓用戶聽到對方的語音信息。
應當理解的是,本發(fā)明的上述具體實施方式僅僅用于示例性說明或解釋本發(fā)明的原理,而不構成對本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。此外,本發(fā)明所附權利要求旨在涵蓋落入所附權利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。