我需要按顺序播放许多音轨。我使用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;
}
}
}
这有效,但曲目之间有明显的延迟。我希望将这段时间缩短到尽可能接近零。这可能吗?
答案 0 :(得分:1)
MediaPlayer“chaining”添加了API级别16(Jellybean)。您感兴趣的方法是setNextMediaPlayer(MediaPlayer next)
:
将
MediaPlayer
设置为在此MediaPlayer
完成播放时启动(即到达流的末尾)。媒体框架将尝试尽可能无缝地从该播放器转换到下一个播放器。下一个玩家可以在完成之前随时设置。下一个玩家必须由应用程序准备,应用程序不应该在其上调用start()
。
答案 1 :(得分:0)
虽然有很多请求要添加无间隙播放,但不是标准的Android播放器 - https://code.google.com/p/android/issues/detail?id=3461
您可以尝试创建并准备第二个MediaPlayer实例,并在OnCompletion回调中快速切换它们。