Audio Web音频Api实时流式PCM ADPCM

Audio Web音频Api实时流式PCM ADPCM,audio,web,audio-streaming,pcm,adpcm,Audio,Web,Audio Streaming,Pcm,Adpcm,我有一个传递客户机PCM或ADPCM数据的服务器 我最初决定使用PCM,因为我不想处理编码和解码 我让PCM工作,但在我听到的每个音频块之间都有小故障。(有点像剪辑) 所以我想原因可能是延迟/高质量音频等等 所以我决定使用ADPCM来减少数据量。我用javascript编写了一个adpcm到pcm的解码器。这是一个麻烦。我希望,由于数据数量减少,可能这将停止故障(数据将赶上正在播放的内容) 但我错了。我还是有小毛病 这甚至可以通过TCP实现吗?或者这是一个失败的事业。我在WebSocket上没有

我有一个传递客户机PCM或ADPCM数据的服务器

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

我让PCM工作,但在我听到的每个音频块之间都有小故障。(有点像剪辑)

所以我想原因可能是延迟/高质量音频等等

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

但我错了。我还是有小毛病

这甚至可以通过TCP实现吗?或者这是一个失败的事业。我在WebSocket上没有UDP

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

你们知道一个很好的链接来阅读网络上的实时音频吗

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

PS:我试着使用标签,但我们遇到了缓冲问题,我们无法控制它。 我也没有从服务器获得任何流控制。它并没有说音频启动器或音频停止了我们的暂停。
这是一个推送协议,我得到的只是ADPCM和PCM数据是的,当然你可以使用TCP。UDP通常用于电话应用程序中,因为较低的开销使一切都更快,对于该应用程序而言,数据包是否以错误的顺序丢弃或到达并不重要。但由于UDP不是一个选项,所以可以使用TCP

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

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


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

如果您需要实时(即低延迟),那么TCP不是一个好的选择。谢谢,我明天将查看它。但我感到厌倦的是,我尝试了缓存数据客户端。N秒数,我不记得它是什么。但它是30个块(22050,16位cpm),我必须将其转换为32位浮点(这就是Web音频api所采用的)。我将在服务器端进行所有的计算,看看如何工作)。有些人是这样想的,但我仍然能在每个样品上都得到点击。但我还是要试试你说的,因为现在我使用web套接字,它只是推送数据,但我还需要为http实现这个系统(不丢失任何音频样本)