使用Android MediaPlayer进行无缝播放

时间:2013-03-20 12:38:46

标签: android media-player

我正在尝试连续播放音频,没有任何差距。我试过了,

mediaplayer.setLooping(true);

但它给出了重复时间之间的差距。并尝试了这个,

mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener()  {
    @Override
    public void onCompletion(MediaPlayer mp)
    {
        mediaplayer.start();
    }
});

它也有差距。我试过不同的音频格式。但这两种方式都不适合我。在android中还有其他方法吗?

2 个答案:

答案 0 :(得分:7)

当播放结束时,播放器引擎会检查所有曲目是否都已完成,一旦完成,它将检查looping标志。根据{{​​1}}标记,loopingseek秒。作为搜索的一部分,播放器引擎将从特定位置读取数据并开始播放。

延迟可能是由于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上开始第二个。