도와주세여 mediacodec으로 player만드는데 서비스를 이용해서 백드라운드로
동작 되게 만들려고 하거든요 이게 지금 서비스 쪽인데 여기저기 따다가
만들었는데 뭘 더 해야할지 모르겠어요 지금 제가 만든게
pcm으로 잘 만들어진건지.. 다음엔 뭘더 해야하는지.. 깝깝해서 질문올려요 ㅠ
public class SimpleService extends Service implements OnCompletionListener {
MediaPlayer mediaPlayer;
private MediaExtractor mExtractor = null;
private MediaCodec mMediaCodec = null;
private AudioTrack mAudioTrack = null;
private Decoder Decoder;
private final IBinder basBinder = new SimpleServiceBinder();
@Override
public void onCreate() {
// mediaPlayer.setOnCompletionListener(this);
}
public enum State
{
Stopped, Prepare, Buffering, Playing, Pause
};
State mState = State.Stopped;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return basBinder;
}
@Override
public int onStartCommand(Intent intent, int Flags, int startId) {
ByteBuffer[] codecInputBuffers;
ByteBuffer[] codecOutputBuffers;
// Decoder.decoder();
mExtractor = new MediaExtractor();
loder();
MediaFormat format = mExtractor.getTrackFormat(0);
String mime = format.getString(MediaFormat.KEY_MIME);
try {
mMediaCodec = MediaCodec.createDecoderByType(mime);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mMediaCodec.configure(format, null, null, 0);
mMediaCodec.start();
codecInputBuffers = mMediaCodec.getInputBuffers();
codecOutputBuffers = mMediaCodec.getOutputBuffers();
int sampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate,
AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT),
AudioTrack.MODE_STREAM);
mAudioTrack.play();
mExtractor.selectTrack(0);
// final long kTimeOutUs = 10000;
// MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
// boolean sawInputEOS = false;
// int noOutputCounter = 0;
// int noOutputCounterLimit = 50;
// while (true) {
// int res = mMediaCodec.dequeueOutputBuffer(info, kTimeOutUs);
// }
return START_STICKY;
}
public void onDestroy() {
Log.e("onDestroy", "service");
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
stopSelf();
}
public class SimpleServiceBinder extends Binder {
SimpleService getService() {
return SimpleService.this;
}
}
// public void havefun() {
// if (mediaPlayer.isPlaying()) {
// mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() - 2500);
// }
// }
public void loder() {
try {
mExtractor.setDataSource("/sdcard/testiu.mp3");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}