Audio 포맷
- WAV, MP3(8~320Kbps), MIDI, OGG, 3GP
Video 포맷
- H263, H264, Mpeg4


생성자
public MediaPlayer()

재생할 미디어 전달
void setDataSource(String path)
void setDataSource(Context context, Uri uri)
void setDataSource(FileDescriptor fd, [long offest, long length])

method호출
void prepare()                      - 동기적으로 준비하여 준비 끝나면 return
void prepareAsync()             - 시간이 오래 걸릴 때 사용. 비동기적 동작. 콜백을 통해 준비 완료를 통보받아야 함.
- 준비상태가 되면 이후 바로 재생 가능. 
- 로컬 파일이나 Uri객체로부터 미디어 오픈
- return값은 없으며, 에러 발생시 예외가 return->반드시 처리
- ex)동영상의 경우 필요한 코덱을 찾는 등 원활한 재생을 위해 얼마간의 버퍼할당 필요 때문에 오픈 직후 자동으로 준비상태를 만들기 위해 호출

create method
static MediaPlayer create(Context context, int resid)
static Mediaplayer create(Context context, uri uri.[SurfaceHolder holder])
- 스트림은 열 수 있으나 파일을 직접 열수는 없음.
- 리소스의 미디어는 보통 작은 크기이므로 오픈 직후 자동으로 준비상태가 돼 바로 재생 가능.
- 에러 발생시 예외를 return하는 대신 null이 return
- 간단한 효과음을 재생할 때는 이 method를 호출하는 것이 간편,

재생관련 method
void start()                        - 재생을 시작한 후 즉시 return->사운드 재생 중에도 다른 작업 가능. 재생시작후 스트림의 끝까지 재생한 후 자동으로 멈춤.
void stop()
void pause()

반복적 재생을 위한 method
void setLooping (boolean looping)
boolean isLooping()
- setLooping(true)를 호출해 두면 한 스트림을 계속 반복 -> 게임 배경음악 재생용으로 적합.


void release()     : 객체를 완전히 파괴하여 더이상 사용할 수 없는 상태로 해제, 재생 중에도 호출 가능
void reset()        : 초기화되지 않은 처음 상태로 객체를 되돌리며 이후 재초기화 해 사용할 수 있음.


create 정적 메소드 - 대용량 미디어에는 효율이 좋지 않기 때문에 짧은 미디어에만 사용.

raw폴더에 있는 파일 재생. 리소스재생,
Button play=(Button)findViewById(R.id.play);
play.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View view){
         MediaPlayer player = MediaPlayer.create(MyPlayer.this, R.raw.pinocchio);
         player.start();
    }
});

상태변화도



- 객체를 처음 생성하거나 reset하면 Idle상태로 시작.= 재생 할 수 없는 상태
- 똑같은 Idle 상태라도 새로 생성된 객체과 reset된 객체의 동작은 조금 다름. (상태에 맞지 않는 메소드 호출시 에러처리가 다름) = 생성 직후엔 단순히 에러를 무시/ reset된 객체  Error상태로 전환 onError콜백 호출.
- Idle상태에서 초기화 하려면 setDataSource메서드를 호출하여 미디어 오픈
   = 이 메서드는 Idle일 때만 호출 가능.
   = 재생 중이거나 일시 정지된 상태에서 미디어를 교체하진 못함.
   = 미디어를 연 후 prepare 메서드 호출하여 준비상태로 전환, 재생 전엔 반드시 준비 상태
   = create 정적 메서드로 객체를 생성하면 생성과 동시에 미디어를 열고 준비상태로 시작. 준비상태일때 볼륨 조절, 반복여부등을 조절 가능
   = start메서드 호출하면 재생중 상태가 되며, 이 상태에서 언제든지 정지, 일시정지 가능. 
   = 일시정지는 pause/start메서드로 언제든지 토글 가능.
   = 그러나 stop상태에선 바로 재생 상태로 복귀할 수 없으며 다시 준비 과정을 거친다.
   = isPlaying 메서드는 현재 재생중인지를 조사하는데, 일시정지, 상태일때는 false이며 재생중에는 true가 리턴.

재생 길이나 위치 조사 및 변경하는 메소드
- ingetDuration() : 총 재생 길이
- ingetCurrentposition() : 현재 재생 위치
주로 프로그레스바 갱신에 사용.
둘다 준비 상태 이후에는 언제든지 호출 가능.
seekTo는 재생 위치를 임의로 변경 - Prepared, Started, Paused, PlaybackCompleted상태에서 호출 가능.
재생 중에도 즉시 다른 위치로 이동 가능하며 준비나 일시정지된 상태에서도 시작 위치를 마음대로 바꿀 수 있지만 정지된 상태에서는 위치를 바꿀 수 없다.

mediaplayer는 상태가 변경되거나 에러가 발생할 때 미리 등록된 콜백 메서드 호출
에러콜백은 등록하는 것이 좋음.

void setOnErrorListener (MediaPlayer.OnErrorListener listener)

void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)

void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)
- 스트림을끝까지 재생했을 때 호출. 이때 객체는 재생 완료 상태.
- 이 콜백을 받았을 때 start메서드를 호출하면 같은 미디어 처음부터 다시 재생.
- 다음 미디어 재생 위해선 reset하여 Idle상태로 돌아간 후 처음부터 다시 시작.
- setDataSource 메서드는 Idle상태에서만 호출 가능하므로 reset해야만 미디어 교체 가능.

void setOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListener listener)
-스트리밍 시에 버퍼에 새로운 데이터가 들어왔을 때 호출.
- 로컬 리소스나 파일을 읽을 때는 버퍼링을 하지 않으므로 이 콜백을 프로그래밍 할 필요는 없음.

void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)
- 재생 위치 변경이 완료될때 호출.
- seekTo 메서드가 동기적으로 동작하지 않으므로 변경 시점을 알아내려면 필요.


'안드로이드' 카테고리의 다른 글

Data Base  (0) 2011.07.25
broadcast receiver java code로 등록  (0) 2011.07.25
Activity Cycle  (0) 2011.07.12
startActivityForResult()  (0) 2011.07.12
Intents and IntentsFilters  (0) 2011.07.12

+ Recent posts