学习记录:Android14中的Wifi_Direct(P2P)

Wi-Fi Direct(直连)

术语背景: Miracast 是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的 无线显示标准 。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。

Wi-Fi直连 (英语:Wi-Fi Direct),之前曾被称为 Wi-Fi点对点 (Wi-Fi Peer-to-Peer),是一套无线网络互连协议,让wifi设备可以不必透过 无线热点(Access Point,AP),以点对点的方式,直接与另一个wifi设备连线,进行高速数据传输。这个协议由Wi-Fi联盟发展、支持、授与认证,通过认证的产品将可获得Wi-Fi CERTIFIED Wi-Fi Direct®标志。

无线通信技术综合对比:

基本工作原理

Wi-Fi Direct 基于 IEEE 802.11 协议族,并引入了一些新的机制来实现点对点通信:

1.Group Formation(组形成)

两个设备协商谁作为 Group Owner【群组所有者】【简称GO】 。GO 负责管理 IP 分配、信道选择、安全认证等。其他设备为 Client,连接到 GO。

  1. 服务发现(Service Discovery)

支持 SSDP、DNS-SD 等协议,用于查找其他设备上可用的服务(如打印机、媒体服务器)。用户可以通过搜索找到附近的设备并发起连接。

  1. 安全连接机制(WPS/WPA2/WPA3)

使用 WPS(Wi-Fi Protected Setup) 进行快速配对。使用 WPA2/WPA3 加密保证数据传输的安全性。

Wi-Fi Direct 的所有新增机制(P2P 发现、GO 协商、WPS 配对)都只在 wifi---802.11 的 MAC 子层(数据链路层)里完成,上层仍跑标准 TCP/IP 协议栈,不引入任何额外"传输层"。

关键概念解释

  • Group Owner (简称GO) :类似临时 AP,负责管理连接和网络配置
  • Client :连接到 GO 的设备
  • Device Discovery :发现附近支持 Wi-Fi Direct 的设备
  • Negotiation【协商】 :协商哪个设备成为 GO
  • WPS(Wi-Fi Protected Setup) :快速配对机制,包括 PBC(按钮连接)、PIN 码配对等方式
  • RTSP / Miracast :常见的应用层协议,用于视频投屏

WiFi Direct 主要特性:

WiFi Direct 应用场景:

Wi-Fi Alliance(Wifi联盟、WFA) 向成员厂商/芯片厂提供 Wi-Fi Direct 认证测试套件与参考 SDK(常称 Wi-Fi Direct SDK 或 P2P SDK),里面封装了:

  • P2P 设备发现(Device Discovery)
  • 服务发现(Service Discovery,可选)
  • Group Owner 协商与 WPS 配对
  • 连接建立、密钥管理(WPA2/WPA3)
  • L2 层数据路径初始化(Ethernet-like)

厂商拿到 SDK 后,在驱动/固件里实现 P2P-MLME 动作帧,并向上暴露统一接口(Linux 下即 nl80211 命令与 wpa_supplicant 的 P2P_* 命令集)。Android 再把 wpa_supplicant 封装成 WifiP2pManager API,应用层直接调用即可,无需再管底层细节

Wi-Fi Display(无线显示)

Wi-Fi Display 是Wi-Fi联盟制定的一个标准协议, 简称WFD,它结合了Wi-Fi标准和H.264视频编码技术。利用这种技术,消费者可以从一个移动设备将音视频内容实时镜像到大型屏幕,随时、随地、在各种设备之间可靠地传输和观看内容。Miracast实际上就是Wi-Fi联盟对支持WiFi Display功能的设备的认证名称,产品通过认证后会打上Miracast标签

Wifi Display 涉及的技术及协议框图

Miracast使用的 应用层 技术协议栈

常见的投屏方案与协议组合

不同的投屏技术方案会选择不同的协议组合:

Android14中的WiFi---P2P

Google文档:

中文:source.android.google.cn/docs/core/c...

英文:source.android.google.cn/docs/core/c...

P2P HIDL 定义:

bash 复制代码
android14/
    hardware/interfaces/wifi/1.0/***.hal
    hardware/interfaces/wifi/1.1/***.hal
    hardware/interfaces/wifi/1.2/***.hal
    hardware/interfaces/wifi/1.3/***.hal
    hardware/interfaces/wifi/1.4/***.hal
    hardware/interfaces/wifi/1.5/***.hal
    hardware/interfaces/wifi/1.6/***.hal
>>>android14/hardware/interfaces/wifi/1.0/IWifiP2pIface.hal    

P2P AIDL 定义:

ruby 复制代码
android14/
    hardware/interfaces/wifi/aidl/*/***.aidl
>>>android14/hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiP2pIface.aidl    

P2P Supplicant HIDL 定义:

bash 复制代码
android14/
    hardware/interfaces/wifi/supplicant/1.0/***.hal
    hardware/interfaces/wifi/supplicant/1.1/***.hal
    hardware/interfaces/wifi/supplicant/1.2/***.hal
    hardware/interfaces/wifi/supplicant/1.3/***.hal
    hardware/interfaces/wifi/supplicant/1.4/***.hal

P2P Supplicant AIDL 定义:

shell 复制代码
android14/
    hardware/interfaces/wifi/supplicant/aidl/*/***.aidl
>>>P2pGroupCapabilityMask.aidl
>>>ISupplicantP2pIface.aidl
>>>P2pStatusCode.aidl
>>>ISupplicantP2pNetwork.aidl
>>>P2pGroupStartedEventParams.aidl
>>>P2pClientEapolIpAddressInfo.aidl
>>>P2pProvDiscStatusCode.aidl
>>>ISupplicantP2pIfaceCallback.aidl
>>>P2pFrameTypeMask.aidl

WiFi---P2P 支持

AOSP(Android 开源项目)代码,启用 Wi-Fi Direct 的功能。具体操作是:在位于 device/<oem>/<device> 目录下的 device.mk 文件中,修改 PRODUCT_COPY_FILES 环境变量,以添加对 Wi-Fi Direct 功能的支持:

bash 复制代码
PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml

android.hardware.wifi.direct.xml

xml 复制代码
<!-- This is the standard feature indicating that the device includes WiFi Direct. -->
<permissions>
    <feature name="android.hardware.wifi.direct" />
</permissions>

WiFi---P2P 应用创建

  1. WiFi---P2P 初始设置
  2. WiFi---P2P 发现
  3. WiFi---P2P 连接
  4. WiFi---P2P 数据传输

具体参考Google文档: developer.android.google.cn/develop/con...

本文参考学习:

Miracast技术详解(一):Wi-Fi Display | codezjx's Home

WIFI无线网络之Wi-Fi Direct(Wi-Fi P2P)协议 | DD'Notes

WifiDisplay(Miracast)技术原理及实现

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui