流媒体音频延迟

13

我正在尝试通过服务器流式传输音频。我已经设置好了一切,使用AudioRecord和Audiotrack Android媒体API录制和播放静态音频时一切正常,但当我尝试流式传输音频时,播放端会有延迟。

我在谷歌上搜索了一下,但没有找到正确的方法。我正在使用AudioRecord和Audiotrack Android媒体API发送和接收音频数据,有人可以告诉我如何处理这个延迟问题吗?

我已经将我的代码添加到谷歌小组中以获得更清晰的图片。

我曾经尝试过这种方式,在缓冲区中保留5个音频数据块,当它填满5个数据块时进行回放,然后再获取下一个5个音频数据块并进行填充,如此往复直到1024字节的数据(它写入到audiotrack并调用play方法)。这样也存在延迟问题,请问是否还有其他解决方案?


2
在为播放缓冲音频时,会存在固有的延迟。如果你希望在移动设备上获得不经常中断的良好流畅性,这是必须要做的。 - Brad
你不能把不存在的东西放入缓冲区。 - njzk2
那我应该如何一次播放5个数据块?我在播放音频时遇到了延迟。你能帮我解决吗? - Rahul Baradia
1个回答

2
如果您真的要实现无缓冲播放,请确保您使用的播放工具正在尝试不带缓冲区进行回放。您很难没有延迟。电视、广播等上的任何内容都不是真正的“实时”——总会有某种延迟。对于互联网流,您正在不断发送大量的数据。即使除了旅行时间之外,所有这些数据都必须按照特定的顺序保持,而且没有人想在最终用户的计算机尝试播放时出现卡顿的回放。我曾经拥有过主要网络的Flash播放器,在处理回放时在我的计算机上保存了大量高速缓存文件,但他们的播放器并不会跳过/等待缓冲等操作。(如果您加载了某个内容,并注意到额外使用了几百MB的内存,甚至在播放时使用更多,那就是它所使用的东西。)
您可能可以通过使用VLC来使用非常小的缓冲区(过去的标准通常是30-60秒,许多播放器仍然默认为此),但只适用于极低质量的流/视频。但是您遇到的最大问题我猜测是您的回放正在设置缓冲区,如果您的回放设置为60秒缓冲,那么无论您在服务器端做什么,客户端都会等待它有那么多的块,然后才开始回放。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接