0

我有许多需要按顺序播放的音轨。我正在使用 MediaPlayer OnCompletionListener,如下所示:

public void OnCompletion(MediaPlayer mp)
{
    _completed++;
    mp.Reset();

    if (_completed < _tracks.Length)
    {
        try
        {
            AssetFileDescriptor afd = _context.Resources.OpenRawResourceFd(_tracks[_completed]);

            if (afd != null)
            {
                mp.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length);
                afd.Close();
                mp.Prepare();
                mp.Start();    
            }


        }
        catch (Exception ex)
        {

            throw;
        }
    }
}

这可行,但轨道之间存在明显的延迟。我想将这段时间减少到尽可能接近零。这可能吗?

4

2 回答 2

2

MediaPlayer“链接”是在 API 级别 16 (Jellybean) 中添加的。您感兴趣的方法是setNextMediaPlayer(MediaPlayer next)

设置在播放结束MediaPlayer时开始MediaPlayer(即到达流的末尾)。媒体框架将尝试尽可能无缝地从该播放器过渡到下一个播放器。下一个玩家可以在完成前的任何时间设置。下一个播放器必须由应用程序准备,应用程序不应调用start()它。

于 2013-08-21T14:49:09.083 回答
0

尽管有很多要求添加无缝播放的请求,但不适用于标准的 android 播放器 - https://code.google.com/p/android/issues/detail?id=3461

您可以尝试创建和准备 MediaPlayer 的第二个实例,并在 OnCompletion 回调中快速切换它们。

于 2013-08-21T14:44:47.837 回答