【发布时间】:2022-01-14 22:11:29
【问题描述】:
我正在尝试使用带有 WinSocket 库的 UDP 协议以 1 kHz 与外部机器人通信。我正在使用 Windows 10 专业版 21H2。在硬件方面,我使用的是带有英特尔酷睿 i9 10900X 32 GB RAM 和英特尔 I219 的电脑。
在某个时候它工作得很好,我确实测量了通信所花费的时间(顺序发送和接收数据包需要 200 微秒到 500 微秒之间),我还使用wireshark 测量了交换的数据包数量(每秒发送 1000 个数据包,每秒也接收 1000 个数据包)。发送吞吐量为 2 Mbps,接收吞吐量为 3Mbps。
当任何音频被渲染(甚至是在 Windows 上改变音量时发生的声音)时,问题就开始了,这会导致明显的延迟(大约 10 到 15 毫秒)。 当我停止 Windows 音频服务时,这解决了问题,但在我们的应用程序中,我们需要永久呈现声音。
graph : round trip time and frequency vs index of udp query, using NIC PCI
临时解决方案是使用 USB/以太网适配器而不是 NIC。使用这种类型的设备,我们没有延迟,但我们过去已经遇到过一些与热节流导致的性能下降相关的问题。
graph : round trip time and frequency vs index of udp query, using USB/Ethernet adapter
我也尝试过降低音频进程的优先级,没有区别。我还尝试在与我的应用程序不同的线程中设置音频服务的关联掩码,也没有区别。
我的问题:有没有办法增加音频延迟以便优先考虑 udp 通信或减少 udp 通信的延迟以满足我们对 1 kHz 频率的需求。
【问题讨论】:
-
您使用的是哪种网卡?一个好的 PCI NIC 应该很容易胜过 USB/以太网加密狗。应该是驱动问题。机器人是如何连接的?以太网铜线?
-
我确实尝试了许多网卡 intel I219 芯片组(集成在主板中)intel gigabyte on PCI、intel Killer 和两个 realtek。所有这些 NIC 在没有 Windows 呈现的音频声音时都表现出色,但是一旦我播放任何类型的声音,USB 就会继续工作,但 PCI 上的所有 NIC 都有明显的延迟。这里有两个因素:延迟和吞吐量。也许使用 PCI 接口可以提高吞吐量,但在我的情况下,我更关心音频渲染引起的延迟
-
对不起,我忘了说电脑和机器人实际上是使用铜质以太网电缆连接的,中间没有路由器。
-
您能否通过使用 TCP/IP ping 重现延迟问题?最终尝试来自 Microsoft 的 PsPing。
-
这并不容易,因为延迟不是永久性的。
标签: windows audio network-programming udp latency