4

我正在尝试连续重复播放音频,没有任何间隙。我试过了,

mediaplayer.setLooping(true);

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

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

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

4

2 回答 2

8

当播放完成时,播放器引擎将检查是否所有曲目都已完成,一旦完成,它将检查looping标志。基于looping标志,一seek0秒。作为搜索的一部分,播放器引擎将从特定位置读取数据并开始播放。

除了重新初始化所有轨道并重新启动它们之外,延迟可能是由于执行以及存储介质seek引入的延迟造成的。因此,玩家回到起始位置时会有一定的延迟。sdcard

可以在此函数中找到底层循环实现AwesomePlayer::onStreamDone,如下所示:http ://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/AwesomePlayer.cpp#834

编辑1:

要实现一个 true gapless playback,您还可以考虑该setNextMediaPlayer()功能。

于 2013-03-20T14:40:48.523 回答
0

Probably MediaPlayer is re-prefetching the data from server (or even from the device itself), this may take some seconds. Only if the buffering is done, it starts playing again.
If you want to bypass this, you can AFAIK only use a second MediaPlayer which starts buffering the media file shortly before the first one stops playing. Then you can start the second one on OnCompletionListener.

于 2013-03-20T14:12:33.240 回答