android - 流式音频延迟

标签 android audio-streaming audio-recording android-mediaplayer audio-player

我正在尝试通过服务器流式传输音频。我已设置好所有内容,录制和播放静态音频时工作正常,但当我尝试流式传输音频时,播放端出现延迟。

我进行了 Google 搜索,但找不到正确的方法。我正在使用 AudioRecord 和 Audiotrack Android 媒体 API 来发送和接收音频数据。谁能告诉我如何处理这种延迟?

我已经在 GOOGLE GROUP to get clear picture 上添加了我的代码.

我曾尝试过这种方式,将 5 个音频数据 block 保存在一个缓冲区中,该缓冲区来自服务器并在它填充 5 个数据 block 时播放,然后再次获取下一个 5 个音频数据 block 并像往常一样填充它直到 1024 字节的数据(它写入音轨并调用播放方法)。这也有延迟,还有其他解决方案吗??

最佳答案

如果您真的想无缓冲地执行此操作,请确保您使用的任何播放工具都在尝试无缓冲地播放它。您将很难不延迟。电视、 radio 等都不是真正的“直播”——总会有某种延迟。使用 Internet 流,您会不断发送大量数据。即使除了传输时间之外,所有这些数据都必须按特定顺序保存,没有人希望在最终用户的计算机尝试播放时出现断断续续的播放。我有主要网络的 Flash 播放器在处理播放时在我的计算机上保留大量缓存文件,但他们的播放器不会跳过/等待缓冲/等。 (如果你加载了一些东西并注意到使用了几百 MB 的额外内存,在播放过程中可能更多,就是这样。)

您可以使用 VLC 以非常小的缓冲区(过去的标准是 30-60 秒,许多播放器仍然默认为此设置)逃脱。我已经能够将其缓冲区设置得非常低,但它的流/视频质量非常低。虽然我猜你遇到的大问题是你的播放设置了缓冲区,如果你的播放设置为 60 秒缓冲区,那么你在服务器端做什么并不重要......客户端会等到它有那么多 block ,然后开始播放。

关于android - 流式音频延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576045/

相关文章:

java - Android Studio 3 是否支持 Java 9 进行 Android 开发?如果支持,支持 Java 9 的哪些特性?

android - FindViewById 不适用于按钮

java - 将 json 值 key 对解压为 SharedPreferences 的变量

android - 如何延迟播放 AudioRecord

android - 获取当前用户详细信息,即登录 firebase 的用户

javascript - 网络音频分析器的 getFloatTimeDomainData 缓冲区偏移量在其他时间的缓冲区和 'complete file' 的缓冲区

ios - 在 webView 中流式传输广播时应用程序崩溃

java - 充当 UPnP MediaServer 并通过 UPnP MediaRender 播放流音频(麦克风)

objective-c - 在 Objective-C 中录制来自非默认音频设备的音频

c - 使用 PCM 格式的 ALSA 进行音频录制