我正在尝试连续播放音频,没有任何差距。我试过了,
mediaplayer.setLooping(true);
但它给出了重复时间之间的差距。并尝试了这个,
mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp)
{
mediaplayer.start();
}
});
它也有差距。我试过不同的音频格式。但这两种方式都不适合我。在android中还有其他方法吗?
答案 0 :(得分:7)
当播放结束时,播放器引擎会检查所有曲目是否都已完成,一旦完成,它将检查looping
标志。根据{{1}}标记,looping
到seek
秒。作为搜索的一部分,播放器引擎将从特定位置读取数据并开始播放。
延迟可能是由于0
实现以及存储介质引入的延迟(如seek
除了重新初始化所有轨道并重新启动它们)。因此,当玩家恢复到起始位置时会有明确的延迟。
可以在此函数sdcard
中找到基础循环实现,如下所示:http://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/AwesomePlayer.cpp#834
编辑1:
要实现真实的AwesomePlayer::onStreamDone
,您还可以考虑setNextMediaPlayer()
功能。
答案 1 :(得分:0)
可能MediaPlayer
正在从服务器(甚至从设备本身)重新预取数据,这可能需要几秒钟。只有缓冲完成后,它才会重新开始播放
如果你想绕过这个,AFAIK只能使用第二个MediaPlayer
,它会在第一个停止播放前不久开始缓冲媒体文件。然后你可以在OnCompletionListener
上开始第二个。