gpt4 book ai didi

audio - Web Audio Api 实时流式传输 PCM ADPCM

转载 作者:行者123 更新时间:2023-12-04 20:07:20 25 4
gpt4 key购买 nike

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

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

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

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

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

但是我错了。我仍然遇到问题。

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

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

你们知道通过网络阅读有关实时音频的好链接吗?

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

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

最佳答案

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

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

一种解决方案是在将数据发送到客户端之前在服务器端缓冲数据。在您的延迟要求允许的范围内拥有尽可能大的缓冲区。出于网络广播的目的,我通常选择 30 秒的缓冲区,因为延迟无关紧要。出于您的目的,您可能需要至少 64KB 的缓冲区。这是 TCP 数据包中允许的最大大小。这个数据包会在途中变得碎片化,但这没关系。

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

关于audio - Web Audio Api 实时流式传输 PCM ADPCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com