WLAN 直連(對等鏈接或 P2P)調研及iOS跨平臺調研

# 研究背景android

  1. 兩個設備鏈接同一局域網不一樣頻率的網絡後,兩端可能出現不能正常通訊的問題。
  2. 若是經過Socket進行本地局域網通訊,不在一個網絡會出現找不到設備IP,沒法鏈接的問題,外網走服務器會出現延遲、數據同步不許確的問題。
  3. 在混合網絡場景中,在鏈接AP時,既能同時在兩端點對點通訊,而且兩端也能分別進行外網訪問。
  4. 新技術方向必要條件:須要同時支持Android和iOS兩端。

Andorid端:WiFi-P2P

Wifi P2P (peer to peer):定義爲 Wifi 點對點,也叫 Wifi 直連(Wifi Direct),它是 Wifi Display(投屏) 應用的技術基礎。ios

官方定義

使用 WLAN 直連 (P2P) 技術,可讓具有相應硬件的 Android 4.0(API 級別 14)或更高版本設備在沒有中間接入點的狀況下,經過 WLAN 進行直接互聯。使用這些 API,您能夠實現支持 WLAN P2P 的設備間相互發現和鏈接,從而得到比藍牙鏈接更遠距離的高速鏈接通訊效果。對於多人遊戲或照片共享等須要在用戶之間共享數據的應用而言,這一技術很是有用。

其餘定義

WiFi Direct是指容許無線網絡中的設備無需經過無線路由器便可相互鏈接。其原理與藍牙技術相似,這種標準容許無線設備以點對點形式互連。而更爲重要的是,WiFi Direct技術容許一個WiFi設備同時創建多個無線鏈接,這是目前不少新形態WiFi應用最關鍵的技術。git

WiFi Direct是一種P2P的無線互聯技術,它所創建的網絡是一種改進型的adhoc網絡,採用無線通信模式。github

WiFi兩種網絡模式:Infrastructure Mode 和Ad Hoc Mode.安全

WiFi Direct主要解決了物理層的鏈接問題,包括設備發現和服務發現等。相關技術有NFC和DLNA。服務器

WiFi Direct其餘特性:微信

  • 不須要AP或者路由器,設備內置「soft AP」
  • 對等鏈接的雙方只需一方支持WiFi Direct便可實現無線互聯
  • 同時支持基礎設施網絡和P2P網絡。
  • 能夠以一對一或者一對多的方式造成設備互聯
  • 至少符合802.11g協議才能夠經過WiFi Direct CERTIFIED驗證
  • 最大傳輸距離可達到200米,最大傳輸速度爲250Mbps,使用2.4GHz與5GHz兩種頻段頻段,並它支持一對一,以及一對多模式。

重要特性

  1. Wifi P2P 技術並不會訪問網絡,但因爲會使用到 Java Socket,因此須要申請網絡權限。
  2. 只須要打開 Wifi 便可,不須要加入任何網絡或 AP,便可實現對等點鏈接通信。(注:在後文的demo中有驗證)
  3. 支持服務器給羣裏設備發送消息。
  4. Wifi Direct實現的只是設備間的配對,配對後的文件傳輸操做仍是須要開發者本身來作的。

擴展

Miracast依賴的Wi-Fi技術項有:網絡

  • Wi-Fi Direct,也就是Wi-Fi P2P。它支持在沒有AP(Access Point)的狀況下,兩個Wi-Fi設備直連並通訊。
  • Wi-Fi Protected Setup:用於幫助用戶自動配置Wi-Fi網絡、添加Wi-Fi設備等。
  • 11n/WMM/WPA2:其中,11n就是802.11n協議,它將11a和11g提供的Wi-Fi傳輸速率從56Mbps提高到300甚至600Mbps。WMM是Wi-Fi Multimedia的縮寫,是一種針對實時視音頻數據的QoS服務。而WPA2意爲Wi-Fi Protected Acess第二版,主要用來給傳輸的數據進行加密保護。

上述的Wi-Fi技術中,絕大部分功能由硬件廠商實現。而在Android中,對Miracast來講最重要的是兩個基礎技術:架構

  • Wi-Fi Direct:該功能由Android中的WifiP2pService來管理和控制。
  • Wi-Fi Multimedia:爲了支持Miracast,Android 4.2對MultiMedia系統也進行了修改。

使用場景

  1. 手機鏈接到某AP上網,運行youtube客戶端看視頻;手機同時經過Wi-Fi Direct鏈接到電視,將視頻經過Wi-Fi Direct Display投射到大銀幕上.
  2. 可實現經過 Wifi 鏈接,同時使用數據網絡的場景,好比:手機遙控無人機的同時,無人機須要訪問遠程服務器上傳數據。
  3. 目前在市場上,Client形式(客戶、用戶使用的)的WiFi產品(不管是USB接口、SDIO接口仍是UART接口)都支持WiFi Direct,只是這項技術的用戶感知不強。市面上其實已經有不少用WiFi Direct底層技術的App,例如快牙、瓦力快傳等利用智能手機自身的WiFi模塊自建網絡並傳送文件。

Demo研究

Android端

說明:根據官方的demo,整理成Andorid Studio中可編譯的項目,並添加測試用例。app

代碼及測試apk請點擊:WiFiDirectDemo

官方文檔:WLAN 直連(對等鏈接或 P2P)概覽
官方源碼連接:WiFiDirectDemo

測試安裝包:
在apk目錄下,文件名爲:wifidirectDemo.apk

測試用例:

測試以前,記得首先打開手機WiFi,不然部分手機可能出現閃退的問題。

設備支持必要條件:開啓WiFI並容許獲取定位權限。

如下爲五種測試場景:

  1. 同一局域網場景:

兩個手機鏈接WLAN熱點:如Smart(2.4G/5G),在同一個網絡下。
運行結果:兩個手機能正常通訊,能正常收發圖片。

  1. 同一局域網分離出兩個路由:

一個手機鏈接WLAN熱點:如Smart-Slim(5G),另外一個手機鏈接Smart(2.4G/5G)

運行結果:兩個手機能正常通訊,能正常收發圖片。

  1. AP隔離場景:

一個手機鏈接4G網絡虛擬的人個熱點,一個手機鏈接Smart(2.4G/5G)
運行結果:兩個手機能正常通訊,能正常收發圖片。

  1. 兩個手機只須要打開WiFi,不須要鏈接任何網絡。

運行結果:兩個手機能正常通訊,能正常收發圖片。

  1. 開發板的測試場景

    同上述四種測試場景。

小結:只要兩端都打開wifi,不管連的是否同一個網絡,均可以鏈接上並收發圖片。

異常狀況:

有時候會出現搜索不到的狀況,須要多試幾回才能搜索成功。另外須要Rom取消發送邀請、確認配對鏈接彈窗。

iOS端

Multipeer connectivity是一個使附近設備經過Wi-Fi網絡、P2P Wi-Fi以及藍牙我的局域網進行通訊的框架。

互相連接的節點能夠安全地傳遞信息、流或是其餘文件資源,而不用經過網絡服務。

此框架是在iOS7之後推出,旨在替代GameKit下的GKPeerPickerController通訊。

經過此框架咱們能夠直接鏈接同一網絡下的設備,讓其直接進行相似微信,qq那樣的即時通信效果。

使用場景:

如何在iPhone移動設備上使用Wi-Fi Direct功能

第三方開源跨平臺研究

Android-iOS 跨平臺傳輸方案調研

https://stackoverflow.com/que...

alljoyn(目前只找到Android 項目services-simulators,iOS端沒有找到 )

AllJoyn,由高通公司主導的高通創新中心(Qualcomm Innovation Center)所開發的開放源代碼專案,主要用於近距離無線傳輸,透過Wifi或藍牙技術,進行定位與點對點檔案傳輸。

(Android端和iOS端都有相應的App。未找到開源的項目)

FireChat,是一個專門用於手機的APP,由開放花園公司開發。它能使智能手機在沒有網絡存取時,經由無線網狀網絡的藍牙、Wi-Fi,或蘋果公司的多點連線(Multipeer Connectivity)對等網絡架構連線。
  • udark (Android和iOS端都有開源項目,Android端底層未用到WiFi-P2P接口,以藍牙和NSD爲主,兩端文檔接口不完善)
Mobile peer-to-peer mesh networking library.Integrates into iOS and Android apps and works over Wi-Fi and Bluetooth.

重點對udark進行Demo驗證,驗證後發現存在如下問題:

Android 端:

能夠看到底層源碼(只能經過implementation 'io.underdark:underdark:1.0.12'查看jar包),底層代碼初步判斷是基於藍牙和WiFI(NSD)混合模式實現。可是鏈接成功或是失敗,尋找緣由時,因爲沒有文檔接口說明很差定位問題。

iOS端: 真機存在適配系統版本13及以上的適配問題,目前只能在iOS模擬器上跑通Demo。代碼不開源,沒法看到鏈接原理,沒法定位問題。

文檔:

兩端沒有接口文檔說明,開源做者也沒法進一步聯繫。

結論

該開源項目暫時不能在項目中運用,須要考慮其餘方向。

下一步方向

  • MQTT
  • 藍牙套接字
  • ……

最後,若是你看到了此文,對Wifi P2P及跨平臺通訊研究感興趣,歡迎交流。

參考

Wi-Fi Direct

深刻理解Wi-Fi P2P

Android 10.0相關權限的變動(使用WiFi Direct必須打開定位)

WiFi和AP共存方案研究--Android8.0

Android 實現無網絡傳輸文件1

Android 實現無網絡傳輸文件2(wifi熱點)

手機端對端直連技術

Android無網絡傳輸文件之WifiP2P

WifiDirect (WIFIP2P) 最全最詳細,應用於智能硬件(智能家居,車機,無人機)等

Android Wi-Fi Display(Miracast)介紹(其中的第四種Miracast拓撲圖應用場景有用)

三種主流無線同屏技術介紹(Miracast、DLNA與AirPlay技術)

相關文章
相關標籤/搜索