Android MediaPlayer 2小时mp3流,10分钟后暂停或seekTo导致跳过帧错误
我正在尝试编写我的第一个应用程序,它将播放来自URL的音频文件,大约2小时长 我一直努力工作,打得很好,一直测试到30分钟,但我不希望在2小时内出现任何问题 但是,如果我在10分钟后暂停并重新开始播放,我将得到跳过的帧错误 交互式SeekTo的情况也是如此 我正在使用MediaPlayer和广播服务更新进度条和时间 请输入下面的代码Android MediaPlayer 2小时mp3流,10分钟后暂停或seekTo导致跳过帧错误,android,audio,mp3,Android,Audio,Mp3,我正在尝试编写我的第一个应用程序,它将播放来自URL的音频文件,大约2小时长 我一直努力工作,打得很好,一直测试到30分钟,但我不希望在2小时内出现任何问题 但是,如果我在10分钟后暂停并重新开始播放,我将得到跳过的帧错误 交互式SeekTo的情况也是如此 我正在使用MediaPlayer和广播服务更新进度条和时间 请输入下面的代码 package com.example.myfirstapp.service; import android.app.Service; import androi
package com.example.myfirstapp.service;
import android.app.Service;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
public class MP3Service extends Service implements OnCompletionListener, OnPreparedListener, OnSeekCompleteListener, OnBufferingUpdateListener, OnErrorListener, OnInfoListener
{
MediaPlayer mediaPlayer;
boolean playState;
String mp3Url;
int seekTo;
Intent broadCastIntent;
public MP3Service()
{
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.v("Mp3 App", "Service On Create");
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnSeekCompleteListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnInfoListener(this);
broadCastIntent = new Intent("com.example.myfirstapp.SEEKBAR");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v("Mp3 App", "Service On Start");
Bundle extras = intent.getExtras();
mp3Url = (String)extras.get("Mp3URL");
seekTo = (int)extras.getInt("SeekTo");
if (!mediaPlayer.isPlaying()) {
try {
mediaPlayer.setDataSource(mp3Url);
mediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
return START_STICKY;
}
public void onCompletion(MediaPlayer _mediaPlayer) {
Log.v("Mp3 App", "Service On Completed");
stopSelf();
}
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
//Log.v("Mp3 App", "Runnable Run Method");
if(playState && mediaPlayer != null)
{
int mCurrentPosition = mediaPlayer.getCurrentPosition();
broadCastIntent.putExtra("CURRENT_POS", mCurrentPosition);
sendBroadcast(broadCastIntent);
mHandler.postDelayed(this, 1000);
}
}
};
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
Log.v("Mp3 App", "Service OnPrepared");
try {
playState = true;
Log.v("Mp3 App", "on Start SeekTo : " + seekTo);
mediaPlayer.seekTo(seekTo);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onSeekComplete(MediaPlayer mp) {
// TODO Auto-generated method stub
Log.v("Mp3 App", "Service OnSeekComplete");
try {
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
mRunnable.run();
broadCastIntent.putExtra("DURATION", mediaPlayer.getDuration());
} catch (Exception e) {
e.printStackTrace();
}
}
public void onDestroy() {
Log.v("Mp3 App", "Service On Destroy");
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
playState = false;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
// TODO Auto-generated method stub
//Log.v("Mp3 App", "Service OnBufferingUpdate");
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
Log.v("Mp3 App", " -- " + what + " -- " + extra);
return true;
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
Log.v("Mp3 App", " -- " + what + " -- " + extra);
return true;
}
}
如果我做错了什么,或者我必须改变我的方法,请告诉我
提前感谢。我使用SeekTo逻辑进行暂停和播放,现在我通过在活动中绑定服务来使用暂停和启动(暂停/播放)。这解决了暂停的问题。但SeekTo问题仍然存在,将继续我的调试。