도와주세여 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() {
}
public
enum
State
{
Stopped, Prepare, Buffering, Playing, Pause
};
State mState = State.Stopped;
@Override
public
IBinder onBind(Intent intent) {
return
basBinder;
}
@Override
public
int
onStartCommand(Intent intent,
int
Flags,
int
startId) {
ByteBuffer[] codecInputBuffers;
ByteBuffer[] codecOutputBuffers;
mExtractor =
new
MediaExtractor();
loder();
MediaFormat format = mExtractor.getTrackFormat(
0
);
String mime = format.getString(MediaFormat.KEY_MIME);
try
{
mMediaCodec = MediaCodec.createDecoderByType(mime);
}
catch
(IOException e) {
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
);
return
START_STICKY;
}
public
void
onDestroy() {
Log.e(
"onDestroy"
,
"service"
);
if
(mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
@Override
public
void
onCompletion(MediaPlayer mp) {
stopSelf();
}
public
class
SimpleServiceBinder
extends
Binder {
SimpleService getService() {
return
SimpleService.
this
;
}
}
public
void
loder() {
try
{
mExtractor.setDataSource(
"/sdcard/testiu.mp3"
);
}
catch
(IOException e) {
e.printStackTrace();
}
}
}