流式传输音频文件并缓存它

Posted

技术标签:

【中文标题】流式传输音频文件并缓存它【英文标题】:Streaming audio file and caching it 【发布时间】:2013-02-11 13:41:09 【问题描述】:

我想流式传输一个音频 mp3 文件,然后通过 android 媒体播放器播放它另外我还想缓存这个文件,这样媒体播放器就不必最近播放的曲目的流。

我曾尝试使用prepareAsync 方法,但它无法让我访问缓冲区内容,因此我决定自己流式传输音频文件,然后将其传递给媒体播放器进行播放。我通过遵循这篇文章 here 实现了这一点,但这种方法存在问题,即在将文件传输到媒体播放器时,它进入错误模式,导致我的播放器行为不一致。

当媒体播放器进入其错误模式时,它不会自动退出,因此我不得不创建一个新的媒体播放器,然后重新为其提供下载的文件,这种解决方法会导致用户在播放过程中遇到不希望的暂停正在播放的歌曲。

那么,是否有人改进了上面link 中给出的代码版本? 他们是否知道解决此问题的更好方法实际上是否有一个库用于在 android 中流式传输音频文件?

谢谢

【问题讨论】:

MediaPlayer的角度来看,抽象为DataSource的输入源应该能够在拉模式下工作。根据您上面的评论,MediaPlayer 将从您的流媒体源中提取数据。您能否确认您的源支持拉取操作模式?你能分享一下你面临的错误吗? @Ganesh 我不熟悉拉模型,你能解释一下吗,或者你能提到任何实现或解释媒体播放器拉模型的链接 【参考方案1】:

您提供的链接看起来不太理想(更不用说过时了)。您可能想要的是一个本地代理服务器,它可以让您在MediaPlayer 获取字节数据之前访问它。请参阅我的回答 here 以获得更多解释。

【讨论】:

以上是关于流式传输音频文件并缓存它的主要内容,如果未能解决你的问题,请参考以下文章

将音频文件流式传输到 soundpool load() Android

如何实时流式传输音频文件

在 C++ 中连续流式传输 PCM 数据?

在移动浏览器上流式传输/播放音频文件

如何使用 swift 仅在已知持续时间内流式传输音频

从网络服务器流式传输音频