안드로이드는 MediaPlayer를 통해 별도의 인코딩 없이 동영상을 감상할 수 있다.

MediaPlayer클래스는 오디오와 비디오를 모두 지원하며 다양한 소스 미디어를 재생 할 수 있다.


재생 가능한 미디어 소스

1. 실행 파일에 내장된 리소스

2. SD카드에 파일 형태로 저장된 미디어

3. 네트워크로 전송되는 스트림. 대용량의 음악이나 동영상을 즉시 감상

MediaPlayer 클래스 : http://developer.android.com/reference/android/media/MediaPlayer.html


재생할 미디어를 전달하는 방법은 두가지가 있다. 

1. setDataSource() : [ http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource(java.lang.String) ] 참고

setDataSource 메소드를 이용하여 로컬 파일이나 Uri객체로부터 원격자의 미디어를 연다. 

스트림을 열었다고 해서 바로 재생할 수 없다. 필요한 코덱을 찾고 원할한 재생을 위해 얼마간의 버퍼를 할당해야 한다. 

대용량 스트림의 경우 상당한 시간이 걸릴 수 있으므로 스트림 오픈 직후 준비상태를 만들어주는 prepare() , preapreAsync() 메소드를 호출해야한다. 

prepare() : 동기적으로 준비, 준비가 끝나면 리턴

prepareAsync() : 준비시간이 매우 오래걸린다면 비동기적으로 동작하는 메소드를 호출 -> 콜백을 통해 준비 완료를 통보받음


2.  create() : [ http://developer.android.com/reference/android/media/MediaPlayer.html#create(android.content.Context, android.net.Uri, android.view.SurfaceHolder) ] 참고

다음 정적 메서드를 호출하면 객체 생성, 스트림 열기, 준비과정이 내부에서 수행된다. 

단 create 메소드는 리소스나 스트림을 통해 열수 있지만, 파일은 열지 못한다. 

미디어의 재생, 정지, 일시정지

void start()

void stio()

void pause() 를 이용한다


MediaPlayer의 해제

MediaPlayer를 다 사용후에는 release(), reset()으로 정리한다.

release() : 객체를 완전히 파괴하여 더이상 사용할 수 없는 상태로 해제

reset() : 초기화되지 않은 처음 상태로 되돌림. 재 초기화하여 다시 사용가능


상태변화


미디어의 길이, 위치

int getDuration() : 총 재생 길이

int getCurrentPosition() : 현재 재생위치

void seekTo(int msec) : 재생위치를 임의로 변경


콜백메서드

MediaPlayer는 상태가 변경되거나 에러가 발생할 때 미리 등록된 콜백 메서드를 호출한다.

http://developer.android.com/reference/android/media/MediaPlayer.html#setOnBufferingUpdateListener(android.media.MediaPlayer.OnBufferingUpdateListener)








Posted by No names
,