我有一个非常简单的应用程序,它在启动时寻找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();
}
}
答案 0 :(得分:0)
您的手动计算是以字节为单位的偏移量,即16x24 = 384 KB。如果mp3是16 kbps,那么你大概要求192秒!然而,当你调用seekTo()时,你给了24秒。你想要的职位是什么?