WIFI Direct 意为通过 WIFI 直接建立连接。2010 年 10 月,Wi-Fi Alliance(WIFI 联盟)发布 WIFI Direct 白皮书,白皮书中介绍了关于这种技术的基本信息、特点和功能。WIFI Direct 标准是指允许无线网络中的设备无须通过无线路由器即可相互连接。这种标准支持 WIFI 的无线设备像蓝牙那样以点对点的形式互连,与蓝牙相比,在传输速度与传输距离方面有大幅提升,功耗方面也比蓝牙要高。
Wi-Fi Direct是一种点对点连接技术,它可以在两台station之间直接建立tcp/ip链接,并不需要AP的参与;其中一台station会起到传统意义上的AP的作用,称为Group Owner(GO),另外一台station则称为Group Client(GC),像连接AP一样连接到GO。GO和GC不仅可以是一对一,也可以是一对多。更厉害的是,Wi-Fi Direct和传统wifi技术并不是互斥的:GO可以可以像AP一样为几台GC提供服务;它同时可以像传统的station一样,连接到某个AP;它同时自己也可以是一个AP。
想象下这种使用场景:手机连接到某AP上网,运行youtube客户端看视频;手机同时通过Wi-Fi Direct连接到电视,将视频通过Wi-Fi Direct Display投射到大银幕上。
Android N 提供了 WIFI Direct 用于 WIFI 的直接连接。借助于 WIFI Direct API,支持 WIFI 功能的 Android N 系统的手机可以直接通过 WIFI 连接,而不需要经过接入点。
WIFI Direct 提供 WifiP2pManager 类,其功能主要分为以下三部分:
一般情况下,这三部分功能是共同使用的。例如,可以通过 WifiP2pManager.ActionListener 调用 discoverPeers(),以便当建立连接时,可以通过 ActionListener.onSuccess() 和 ActionListener.onFailure() 方法获得相应结果的通知。
当 discoverPeers() 方法探测到发现列表中的点发生改变时,一个包含 WIFI_P2P_PEERS_CHANGED_ACTION 信息的 Intent 会被广播。WifiP2pManager 提供的方法如表 1 所示。
方法名 | 描述 |
---|---|
initialize() | 为应用程序注册 WIFI 框架。该方法必须在任何其他 WIFI Direct 方法被调用前调用 |
connect() | 与具有指定配置的 WIFI 设备建立点对点连接 |
cancelConnect() | 断开连接 |
requestConnectInfo() | 获取设备的连接信息 |
createGroup() | 以当前设备为拥有者创建一个点对点组 |
removeGroup() | 删除当前的点对点组 |
requestGroupInfo() | 获取点对点组的信息 |
discoverPeers() | 初始化发现对等点设备服务 |
requestPeers() | 获取当前已发现的对等点设备列表 |
WifiP2pManager 支持的监听器如表 2 所示
监听器接口 | 相关动作 |
---|---|
WifiP2pManager.ActionListener | connect(), cancelConnect(), createGroup(), removeGroup(), and discoverPeers() |
WifiP2pManager.ChannelListener | initialize() |
WifiP2pManager.ConnectionInfoListener | requestConnectInfo() |
WifiP2pManager.GroupInfoListener | requestGroupInfo() |
WifiP2pManager.PeerListListener | requestPeers() |
WifiP2pManager 支持的 Intent 如表 3 所示。
Intent | 描述 |
---|---|
WIFI_P2P_CONNECTION_CHANGED_ACTION | 当 WIFI 设备的连接状态改变时广播 |
WIFI_P2P_PEERS_CHANGED_ACTION | 当 discoverPeers() 方法被调用时广播。通过该 Intent 可以获取 到最新的对等点设备的列表 |
WIFI_P2P_STATE_CHANGED_ACTION | 当 WIFI Direct 功能在设备上被打开或者关闭时广播 |
WIFI_P2P_THIS_DEVICE_CHANGED_ACTION | 当 WIFI 设备的具体信息改变时广播,例如设备的名字改变时 |
AirPlay 是苹果开发的一种无线技术,可以通过WiFi将iPhone 、iPad、iPod touch 等iOS 设备上的包括图片、音频、视频通过无线的方式传输到支持AirPlay 设备。
AirPlay具备AirPlay镜像功能,可将iPhone 或iPad 上的画面无线传输到电视上,也就是说你设备显示的是什么,电视屏幕显示就就是什么,而不仅限于图片和视频。你可以拿着iPad 来当做方向盘,然后看着大屏玩游戏。
另外AirPlay镜像最牛地方是它可以实现双屏游戏,让你的游戏有更多的交互。比如,电视里显示的是游戏画面,而iPad上显示的是比赛的路线图。
遗憾的是,苹果的AirPlay更多的只适用于认证过的苹果设备,此外还有一些苹果授权的合作伙伴的设备,如向Pioneer和Sony提供技术授权的音响。
Miracast 是一种通过无线连接的方式将设备(比如笔记本电脑、平板电脑、智能手机)的音视频传送到显示设备(比如电视、监视器、投影仪)上的技术标准。它诞生的目的是用于取代使用有线方式进行连接和音视频数据传输的方式(比如HDMI)。我们也可以简单地将 Miracast 理解为“使用 Wi-Fi 进行连接的 HDMI”。
Miracast 标准的制定由 Wi-Fi 联盟发起,可以兼容不同厂家生产的设备。它基于点对点 Wi-Fi 直连技术(peer-to-peer Wi-Fi Direct)来传输数据,最高可传输 1080p 分辨率(H.264编码)的图像和 5.1 环绕声道的音频。在网络传输协议模型上,Miracast 的网络层使用 IPv4 协议,传输层可使用 TCP 或 UDP 协议,应用层使用 RTSP 协议或 RTP 协议来发起和控制数据传输。
Android4.2版本以后系统标配此功能,Miracast可以将手机上的屏幕内容镜像到电视,不仅仅是视频和图片。
DNLA,Digital Living Network Alliance,是索尼、英特尔、微软等发起的一套 PC、移动设备、消费电器之间互联互通的协议。它们的宗旨是“随时随地享受音乐、照片和视频”。
DLNA与苹果的AirPlay功能比较类似,协议也大体相同,他们都可以让你手机中的媒体内容投放到电视屏幕里。不同的是手机上的DLNA 并没有类似Apple TV的AirPlay的镜像功能,也没有Apple TV 所支持的双屏体游戏体验。目前DLNA更多只是能将手机的照片和视频投送到大屏幕中。
另外,在线视频也可以用DLNA模式推送到客厅电视上显示,安卓系统部分播放器就具备DLNA功能,目前支持无线推送的视频客户端有以下:腾讯视频、搜狐视频、PPTV视频。可以将原来应该在N7屏幕的影片转移到电视屏幕上。前提是你要有能支持DLNA的电视或者电视盒。
DLNA是基于文件的,媒体文件可能有各种各样的编码格式,播放器这端必须能够处理这么多种编码格式。通常为了比较好的播放体验,DLNA会先缓存一小段时间。
Miracast是实时的,它可以实时传输源端(Source)的输出。源端任何屏幕的操作都会被传输到接收(Sink)端。如果源端是播放媒体文件,源端负责先对媒体文件解码,然后再编码成H.264的格式。接收端只需要做H.264的解码就可以了。相对DLNA,Miracast对于WiFi通路的要求要更高一些。