2

ネットワークから 1 つの MP3 曲を再生するために MediaPlayer を使用しています。データ ソースは、ネットワークからダウンロードされたファイルです。このファイルはチャンクで提供されます。

次の再生状態があるとします。

曲の長さ: 4:00

プレーヤーに読み込まれた現在のチャンク: 1:00

曲の一部をスキップして前方にシークしたいとしましょう。MediaPlayer.seekTo() メソッドで行います。位置 (1:40) をシークすると、正しく実行されず、シーク バーが開始位置 (00:00) に移動し、プレーヤーが停止します。

public static void seekTo(int progress) {
try {
    MediaPlayer mp = new MediaPlayer();
    mp.setDataSource(sFilePath);
    mp.prepare();
    int offset = (progress * mp.getDuration()) / 100;

    if (sCompleted)
        return;
    sLastSeek = offset;

    if (offset > sMediaPlayer.getDuration()) {
        sMediaPlayer.reset();
        sMediaPlayer.setDataSource(sFilePath);
        sMediaPlayer.prepareAsync();


    } else {
        sMediaPlayer.seekTo(offset);
    }
} catch (Exception ex) {
    ex.printStackTrace();
}
}
4

0 に答える 0