java - Android MediaPlayer 需要很长时间来准备和缓冲

标签 java android buffer audio-streaming android-mediaplayer

我的应用程序需要很长时间来准备和缓冲音频流。我已阅读此问题 Why does it take so long for Android's MediaPlayer to prepare some live streams for playback? ,但是它只是说人们遇到了这个问题,并没有说明如何改进这个问题。

我在从 2.2 到 4.1.2 测试的所有 Android 版本中都遇到了这种情况。

流的比特率适合移动和 3G 连接。相同的流在等效的 iOS 应用中开始缓冲需要不到一秒的时间。

有没有办法指定应该缓冲的时间量?我知道 Tune In radio 应用程序提供此功能 (https://play.google.com/store/apps/details?id=tunein.player)。

谢谢。

编辑:我再次测试,发现它只发生在运行 Gingerbread 及更高版本 (>=2.3) 的设备上。我知道 Android 将底层框架从 OpenCore 更改为 StageFright。那么如何优化媒体框架呢?旧的 HTC Wildfire 可以准备、流式传输和播放,这似乎是错误的,比全新的 HTC One X 和 Nexus 7 快 10 倍。

最佳答案

几个月来我一直在为这个问题苦苦挣扎。终于找到了解决办法。

真正的问题在于 MediaPlayer 类的实现。特别是 MediaPlayer 缓冲数据的方式。这就是为什么解决方案是创建自己的缓冲,将其保存到临时文件并将其提供给 MediaPlayer。

本教程和源代码详细解释了如何操作。 http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html

通过修改此代码,可以轻松创建更好的流媒体播放器。

Google Developers 真的搞砸了。

编辑:这个答案相当陈旧。现在我建议不要使用 MediaPlayer 而是使用 ExoPlayer 。它可扩展、稳定,可以播放多种不同类型的媒体。你可以在这里找到它:https://github.com/google/ExoPlayer/

关于java - Android MediaPlayer 需要很长时间来准备和缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821216/

相关文章:

java - 表达式与文字 && 表达式与语句

java - Java 中的性能问题

java - 修改动态输入字符串

android - 如何分配卸载密码,当我们卸载应用程序时

android - 如何在 SupportMapFragment 中使用 View 绑定(bind)?

database - 当在 Node.js 中从 firebird 中选择时,未知值 <Buffer d2 f3 f0 e0 e5 e2 e0 20>

json - 使用原始 tcp 时确保完整消息传递的好方法是什么?

emacs - 我如何自动回答 y(kill-matching-buffers 询问我是否应该杀死修改过的缓冲区)?

JavaFX init() 方法将字段重置为 null

安卓 : programmatically copying apk to/system/app