我创建了对讲机/对讲机,用户可以在其中朝一个方向进行通信。音频字节是实时广播的。
我面临网络延迟的问题。在本地网络中它工作正常,但在实时网络中它会出现故障。
以下是相关信息。请提出优化延迟的正确方法。
以下是广播字节的代码:
socket.on('talk', function (data) {
io.emit('listen', data);
});
Samples rate per second : 44100 Hz
Buffer size: 1024
在移动端我有以下速度:
0.49 Mbps Download
0.88 Mbps Upload
我的网速如下,这是我托管我的socket.io nodejs服务的服务器,我从外部网络连接套接字:
最佳答案
网络延迟是您无法影响的(除非您更改 ISP)。但是应用程序延迟掌握在您的手中(意味着您的应用程序编码/解码声音数据的速度)。
您提到 44100Hz 的采样率对于语音来说似乎太高了。减少它也会减少您发送的数据量。
增加缓冲区大小(缓存)是另一种选择,这样您的应用程序可以在每个周期处理更长的数据 block 。这会增加延迟,但会提供整体更稳定的通信
您可以考虑从 TCP 传输层协议(protocol)切换到 UDP 传输层协议(protocol),消除 ACK 数据包,从而提高吞吐量。如果您打算将您的应用程序用作实时语音通信工具,那么丢失一些语音数据包(与传统的电路交换固定电话网络相比,这是互联网等数据包交换网络不可避免的一部分),并且随着对话的进行而重新捕获它们是没有用的
说到不可避免的损失,您可以考虑压缩音频而不损失质量(无损)。示例格式有:FLAC、ALAC 和 WAV。有损(有质量损失)格式(例如 MP3)的性能甚至要好 10-100 倍,质量损失通常几乎不明显,这可能是一个可行的选择(想一想,您是否注意到 MP3 上有任何质量损失?)
最后,总体了解一下其他流行的系统和服务(例如 Skype、Discord、Slack 或 Spotify)如何解决您的问题,也许可以考虑应用它们所采用的一些已知技术。
关于node.js - Socket.io 延迟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253768/