我正在尝试通过 wifi 将来自 Hololens 2 的小型 UDP 数据包(仅包含几个字节)连续发送到计算机。在我的情况下,有必要以 60fps 的稳定速率传输这些数据 - 没有任何丢失。这按预期工作,但我遇到了一个奇怪的问题 - 传入数据每 5 分钟开始严重“滞后”。这种滞后发生了几秒钟,然后它恢复到稳定和连续的流。不幸的是,这对我的用例来说是不可接受的,我希望能摆脱这个问题。此gif实时显示传入 udp 数据的滞后(每个数据报包含在图中可视化的帧号)。
我一直在尝试分析这个问题很长一段时间,但到目前为止我还没有弄清楚是什么原因造成的。尽管如此,我可以从我的测试中得出以下结论:
wifi信号没问题。我有一个 wifi 接入点直接放置在 Hololens 2 旁边 - 提供出色的信号。整个设置包括直接连接到 Cisco 接入点(通过以太网连接)的笔记本电脑和连接到其 wifi 的 Hololens 2。此网络上没有互联网访问 - 它仅用于本地网络。也没有任何网络干扰在这个问题中起作用,因为我在不同的位置尝试过这个,结果相同。我还尝试在此 wifi 上再添加一台计算机,以查看是否可以从中获得稳定的流 - Hololens 2 和这台计算机都将类似的数据流式传输到我的笔记本电脑。在 Hololens 数据滞后的阶段,这台计算机的数据很稳定,没有任何问题。
在 Hololens 2 上运行的应用程序本身具有 60fps 的稳定速率,没有任何丢帧。我使用使用 Unity 创建的简单应用程序以及本机 UWP 应用程序运行测试(两者在网络方面的行为相同)。我还观察到不同套接字实现的相同结果 - 两者都
System.Net.Sockets
执行Windows.Networking.Sockets
相同。有趣的是,当我通过 ethernet 直接连接到 Hololens 2 时,不会出现此问题。我已经用 USB-C 到以太网适配器成功地测试了这个,它提供了稳定的数据传输(没有任何滞后)。因此很明显,只有在 Hololens 2 上使用无线网络适配器时才会出现滞后现象。
我绝对不是网络专家,但我尝试检查通过 Wireshark 进入我的笔记本电脑网络接口的数据包,但在这些滞后期间没有发生任何“可疑”活动。出于好奇,我还直接在 Cisco 接入点上捕获了数据包,并创建了以下图表以可视化那里发生的情况。
该图显示了所有数据包的到达时间(y 轴表示以秒为单位的时间,x 是数据包 ID)。中间区域显然受到上述滞后的影响。
此图仅显示属于我的 udp 通信的已过滤数据包 - 所有其他数据包都显示为 0 时间,以便直观地识别用于不同(未知)通信的数据包。您可以清楚地看出大多数其他请求恰好发生在那些有问题的区域。不幸的是,我不知道这些请求是什么,因为思科接入点的捕获输出对我来说似乎相当神秘。我只能说这些请求中的大多数是从 Hololens 2 发送到 Cisco 接入点的。
基于这些观察,我想说 Hololens 2 每隔 5 分钟就会在后台做一些导致这些网络问题的事情。它仅影响 wifi 网络接口。尽管我没有尝试过全息远程或旁观者视图,但我相信他们必须遭受同样的滞后。请问有人怎么解决这个问题?由于 Hololens 2 无法控制防火墙或服务,我感觉有点卡在这里,希望一些 Hololens 开发人员可以帮助我。谢谢。