如何减少流媒体应用的缓冲时间?

时间:2017-12-28 20:11:48

标签: android streaming android-mediaplayer buffering online-radio

我正在构建一个应用程序,该应用程序应该从URL流式传输在线广播电台。

我目前正在进行演示,我从在线教程中获得了很多帮助,但我遇到了问题。

当我点击“下一步”按钮时,它应该从另一个URL获取它的音频,这样可以改变电台,但是它需要花费太多时间,而且大部分时间都没有#&# 39;似乎工作。

我有什么方法可以将时间缩短95%因为我希望它几乎立即开始你点击下一个按钮

下一个按钮的代码

b_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               mediaPlayer.stop();
                mediaPlayer.reset();
                try {
                    mediaPlayer.setDataSource("http://stream.radioreklama.bg/veronika.opus");
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                mediaPlayer.start();
            }
        });

1 个答案:

答案 0 :(得分:1)

问题可能不是缓冲 - 例如,服务器端可能会有一些缓慢的启动时间。

无论哪种方式,如果你想要监控缓冲,MediaPlayer都会提供一个回调来执行此操作 - ' OnBufferingUpdateListener.onBufferingUpdate()'。

来自MediaPlayer文档(https://developer.android.com/reference/android/media/MediaPlayer.html#setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)):

  

当处于Started状态时,如果事先通过setOnBufferingUpdateListener(OnBufferingUpdateListener)注册了OnBufferingUpdateListener,则内部播放器引擎会调用用户提供的OnBufferingUpdateListener.onBufferingUpdate()回调方法。此回调允许应用程序在流式传输音频/视频时跟踪缓冲状态。

加速跨平台切换流的一种常用技术是提前准备下一个流。

对于你的情况,你需要第二个媒体播放器,你可以初始化并转移到准备状态,甚至可能寻找一个点,然后在你停止另一个时立即播放。

对于直播流来说,这会有点困难,因为你无法以同样的方式看到某一点。您可以尝试让第二个播放器播放但音量调低,尽管这显然效率不高,除非您有一些可靠的方法来预测用户何时即将切换。