繁体   English   中英

Web Audio Api实时流式传输PCM ADPCM

[英]Web Audio Api Realtime streaming PCM ADPCM

我有一台服务器传递客户端PCM或ADPCM数据。

我最初决定使用PCM,因为我不想处理编码和解码。

我得到PCM工作但是在每一段音频之间我都听到了毛刺。(有点像剪辑)

所以我想也许原因是延迟/高质量的音频和所有这些东西。

所以我决定使用ADPCM来减少数据量。 我在javascript中写了一个adpcm到pcm解码器。 这很麻烦。 我希望,因为数据计数减少可能会阻止故障(数据将赶上正在播放的内容)

但是我错了。 我仍然有毛刺。

这甚至可以用TCP完成吗? 或者这是一个失败的原因。 我没有UDP over websockets。

我需要实现缓冲算法吗? 我不想这样做,因为它是实时音频,我只是想尽快处理它。

你们知道一个很好的链接,通过网络阅读有关实时音频的信息。

我可以给出代码示例,但这是一个高级问题。

PS:我试图使用制表符,但我们遇到缓冲问题,我们无法控制它。 我也没有从服务器获得任何流量控制。 它没有说音频启动器或音频停止了我们的暂停。 它是推送协议,我得到的只是ADPCM和PCM数据

是的,当然你可以使用TCP。 UDP通常用于电话应用程序,因为较低的开销使一切更快,对于此应用程序,数据包是否被丢弃或以错误的顺序到达并不重要。 但由于UDP不是一个选项,您可以使用TCP。

正如您所怀疑的那样,在我看来,您的问题是缓冲区不足。 您与服务器的连接速度不够快(或者至少足够快),或者您没有以足够快的速度从编码器提供数据。 如果您实时记录数据并尝试实时播放,则可能会发生这种情况。

解决方案是在将数据发送到客户端之前缓冲数据服务器端。 拥有与延迟要求允许的一样大的缓冲区。 对于互联网广播目的,我通常会选择一个30秒的缓冲区,因为延迟并不重要。 出于您的目的,您可能需要至少64KB的缓冲区。 这是TCP数据包中允许的最大大小。 这个包将在整个过程中碎片化,但这没关系。

您还可以查看服务器如何发送数据。 尝试禁用Nagle算法,以便服务器在发送更多数据之前不等待ACK。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM