首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过网络同步音频

通过网络同步音频
EN

Stack Overflow用户
提问于 2010-05-08 17:44:29
回答 5查看 23.9K关注 0票数 45

我正在设计一个客户机/服务器音频系统,它可以在网络上任意传输音频。一个中央服务器输出一个音频流,x个客户端接收音频数据并播放它。到目前为止,不需要魔法,我甚至已经让这个场景与VLC媒体播放器开箱即用。

然而,棘手的部分似乎是同步音频回放,以便所有客户端处于可听的同步状态(只要人类侦听器认为它是同步的,就可以允许实际的延迟时间)。

,我的问题是,如果有任何已知的方法或算法来解决这种类型的同步问题(视频很可能以同样的方式解决),我的问题是。我最初的想法是同步物理机器之间的时钟,从而创建一个虚拟的“主定时器”,并以某种方式将音频数据包对齐。

有些产品已经解决了这个问题(但是对于我的整个用例来说仍然不够):

http://www.sonos.com

http://netchorus.com/

任何指点都是最受欢迎的。谢谢。

这个相关的问题似乎很久以前就去世了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-08 18:47:26

Ryan在他的博客上写下了他的发现。

他的解决方案包括使用NTP作为保持所有时钟保持同步的方法:

但是,说真的,p4sync只有一个窍门,那就是它如何使用NTP。一个主机充当p4sync服务器。其他p4sync客户端使用SNTP将它们的系统时钟与服务器时钟同步。当服务器开始播放一首歌曲时,它会记录时间,以毫秒为单位。然后,客户端检索该时间戳,计算当前时间戳与时间戳之间的差异,并将其向前移动到歌曲中。

票数 31
EN

Stack Overflow用户

发布于 2010-05-09 00:27:05

很难解决,但有可能。

使用NTP或替托克为自己提供一个同步时钟,该时钟以系统的时间源的已知速率表示。

也要保持一个估计器运行您的声音时钟的速率;通常这样做是用相同的声音设备正在播放,记录在一个缓冲区预先加载了一个神奇的数字,并看看声卡在一个测量的时间内得到的同步时钟(反之亦然,看看需要多长时间来做一个已知的样本在同步时钟)。你需要这样做,时钟就会相对于网络时间漂移。

所以,现在,您知道多少样本每秒通过您的声卡的时钟,您需要输出,以匹配同步时钟的速度。然后,以这个速率插值从网络接收到的样本,加上或减去一个校正,如果您需要在最后一个缓冲区上追赶或后退一点。在进行这种插值时,您需要非常小心,这样它就不会引入音频工件;您所需要的算法有示例代码这里,但是在您了解这一点之前,需要阅读相当多的代码。

当然,如果你的源是现场录音,你必须测量声卡的采样率并在发送之前插入到网络时间样本中。

票数 10
EN

Stack Overflow用户

发布于 2010-05-09 00:33:53

请看微软研究公司Tom的论文一种Internet协议语音系统。他解决了你正在处理的问题。他的解决方案包括在机器之间同步时钟,并使用时间戳让它们同时播放。这种方法的缺点是延迟。要使所有时钟同步,需要在网络上最大的延迟时间上加注时间。

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

https://stackoverflow.com/questions/2795031

复制
相关文章

相似问题

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