首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web Audio Api实时流PCM ADPCM

Web Audio Api实时流PCM ADPCM
EN

Stack Overflow用户
提问于 2013-06-15 02:14:12
回答 1查看 1.7K关注 0票数 3

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

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

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

所以我想可能是因为延迟/高质量的音频之类的东西。

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

但我错了。我还是会遇到一些小问题。

使用TCP能做到这一点吗?或者这是一个失败的事业。我没有在websockets上使用UDP。

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

你们知道在网上阅读实时音频的好链接吗?

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-16 01:16:52

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17114808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档