0

順番に再生する必要がある多数のオーディオ トラックがあります。OnCompletionListener次のように MediaPlayer を使用しています。

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 の 2 番目のインスタンスを作成して準備し、OnCompletion コールバックですばやく切り替えることができます。

于 2013-08-21T14:44:47.837 に答える