Android MediaPlayer寻求不寻求合适的位置

时间:2016-07-25 09:13:10

标签: android-mediaplayer

我有一个非常简单的应用程序,它在启动时寻找mp3的特定位置,并从该位置启动MediaPlayer。然而,我看到,在回放时,寻找位置总是向前或向后移动大约2-3秒。我尝试过具有16,32和可变比特率的mp3。只有wav文件似乎工作正常,但由于它们的大小适合我的目的,它们是不切实际的。有趣的是,如果我手动计算搜索(例如,如果是16位mp3,则为16 * 24000)并将其作为偏移传递给mp.setDataSource,它运行正常。我不能使用它,因为我的应用程序中也需要TimedText,它不适用于偏移量。非常感谢帮助。

以下是完整的代码:

package com.example.mediaplayertest;

import java.io.FileDescriptor;
import java.io.IOException;

import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;

public class MainActivity extends Activity implements MediaPlayer.OnSeekCompleteListener{
    static MediaPlayer mp = new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            AssetFileDescriptor afd = getAssets().openFd("English text only.mp3");
            long length = afd.getLength();
            FileDescriptor fd = afd.getFileDescriptor();
            mp.reset();
            mp.setDataSource(fd, 0, length);

            afd.close();
            mp.setOnSeekCompleteListener(this);
            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mp.prepare();

            mp.seekTo(24000);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onSeekComplete(MediaPlayer mp) {
        int pos = mp.getCurrentPosition();
        //debug shows the pos value correctly as 24000 
        mp.start();
    }
}

1 个答案:

答案 0 :(得分:0)

您的手动计算是以字节为单位的偏移量,即16x24 = 384 KB。如果mp3是16 kbps,那么你大概要求192秒!然而,当你调用seekTo()时,你给了24秒。你想要的职位是什么?