安卓设备之间的投屏互联,为了便捷使用无线连接,为了低延时用udp进行数据传输。因为短距离的数据传输,如果使用TCP进行音视频数据传输,容易出现视频数据堆积、音频数据卡顿等问题。

       wifidisplay 的连接考虑的是整个安卓平台设备,所以p2p连接过程是走标准的p2p流程:p2p设备搜索、主从设备协商、连接过程。

走标准的p2p协商有两个问题:(1)主从关系可能协商失败,因为可能协商的等级相同;(2)p2p协商组群,默认走2.4G 通道。问题1会出现 wifidisplay连接不上;问题2 是限制了板子传输能力,现在很多设备都是带双天线,支持5G通道,如果限制在2.4G,就限制了传输能力,抗干扰能力也较弱。所以在定制内部互联协议时,为了快速连接,通过其它方式获取到mac地址,例如通过蓝牙交互、通过NFC、通过二维码,快速获取mac,进行组网。如下代码是简单的创建p2p GO,设置设置为5G传输通道,GO的创建要在要在通道设置之前,否则会设置失败。另外如果要设置成5G 通道,需要硬件支持,如果设置失败,先确认下硬件设备是否支持

wifiP2pManager.createGroup(channel, new WifiP2pManager.ActionListener() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onFailure(int reason) {
            
           }
        }    
                WifiP2pConfig config = new WifiP2pConfig.Builder().setNetworkName("DIRECT-sink")
                        .setPassphrase("passphrase")
                        .enablePersistentMode(false)
                        .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
                        .build();

                wifiP2pManager.createGroup(channel, config, new WifiP2pManager.ActionListener() {
                    @Override
                    public void onSuccess() {
                        dismissLoadingDialog();
                        showToast("onSuccess");
                    }

                    @Override
                    public void onFailure(int reason) {
                        dismissLoadingDialog();
                        showToast("onFailure");
                    }
                });

获取mac后进行连接,连接代码如下

WifiP2pConfig config = new WifiP2pConfig();
        if (config.deviceAddress != null && mWifiP2pDevice != null) {
            config.deviceAddress = mac;
            config.wps.setup = WpsInfo.PBC;
            wifiP2pManager.connect(channel, config, new WifiP2pManager.ActionListener() {
                @Override
                public void onSuccess() {
                }

                @Override
                public void onFailure(int reason) {
                }
            });
        }

这样最简单的p2连接就完成了。

有些同硬件相关的是在性能前期评估时时需要确认的,所用的平台是单天线还是双天线,5G、2.4G对应的带宽是多少,这些都会直接影响用户的体验效果。如果只有单天线,p2p跟AP有个占比会有数据接收的时间切换,这样数据传输就容易出现较大的抖动,对延时、画面流畅、音频是否卡顿都会有较大的影响。

当然在获取mac过程都需要先通过各种方式的认证,毕竟手机涉及各种隐私,需要保证隐私安全。