安卓设备之间的投屏互联,为了便捷使用无线连接,为了低延时用udp进行数据传输。因为短距离的数据传输,如果使用TCP进行音视频数据传输,容易出现视频数据堆积、音频数据卡顿等问题。
wifidisplay 的连接考虑的是整个安卓平台设备,所以p2p连接过程是走标准的p2p流程:p2p设备搜索、主从设备协商、连接过程。对p2p整个流程有兴趣的小伙伴可以跟下看下这几篇p2p的文章很详细:
。
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过程都需要先通过各种方式的认证,毕竟手机涉及各种隐私,需要保证隐私安全。