OvenPlayer SDK for Android Developer s Guide Release 20 AirenSoft 3 월 30, 2016
Contents 1 소개 11 12 13 14 15 1 1 1 2 2 2 2 설치 및 사용방법 21 다운로드 22 라이브러리 등록 23 Android Menifest 정의 3 3 3 4 3 간단한 31 플레이어 생성 32 이벤트 리스너 정의 33 Surface 할당 34 재생, 일시정지 및 중지 35 샘플 코드 다운로드 기능 장점 동작 환경 라이선스 및 유료 정책 다운로드 5 5 5 7 7 7 4 Method 목록 41 setdatasource 42 getdatasource 43 setstartposition 44 prepare 45 Play 46 pause 47 stop 48 setspeed 49 seekto 410 isplaying 411 getduration 412 getcurrentposition 413 setscreenmode 414 getstatus 415 getmediatype 416 getstreamtype 417 getscreenonwhileplaying 418 setuseragent 419 getuseragent 420 getdefaultuseragent 421 release 8 8 8 8 9 9 10 10 10 10 11 11 11 11 11 12 12 13 13 13 13 14 5 Event Listener 목록 15 i
51 setinitcompletelistener 15 52 setonpreparedlistener 15 53 setonbufferingupdatelistener 16 54 setonseekcompletelistener 16 55 setonerrorlistener 17 56 setoncompletionlistener 18 57 setontimedmetatdataupdatelistener 18 6 부록 20 61 State Diagram 20 ii
CHAPTER 1 소개 OvenPlayer SDK for Android 는 50개 이상의 서비스를 통해 3000만대 이상의 기기에서 5년간 안정적으로 동작한 검증된 플레이어 SDK 이며, 사용자에게 최고의 미디어 경험을 제공할 수 있는 가장 좋은 플레이어 솔루션 입니다 OvenPlayer SDK for Android 는 로컬 파일을 재생하는 것 뿐만 아니라 RTMP, HLS, RTSP, HTTP와 같은 다양한 스트리밍 프로토콜을 지원합니다 기능 HLS, RTMP, RTSP, HTTP 프로토콜 MP4/H264, AAC, MP3, Flac(안드로이드 40 이상) 지원 - 하드웨어 디코더 HLS의 AES 암호화 오디오 전용 재생 로컬 파일 재생 로컬 캐시 HLS ID3 Timed Meta, RTMP Metadata 배속 재생 쉬운 UI 통합 장점 광범위한 안드로이드 장치를 지원합니다 안드로이드 233부터 HLS로 라이브 방송을 재생할 수 있습니다 RTMP 프로토콜을 사용하여 라이브 중계를 3초 미만의 저지연으로 재생할 수 있습니다 신규 단말을 빠르게 지원합니다 50개 이상의 서비스를 통해 3천만개 이상의 기기에서 안정성이 검증된 플레이어 입니다 1
OvenPlayer SDK for Android Developer s Guide, Release 20 동작 환경 Android 233 (API 10) 이상 라이선스 및 유료 정책 이 프로그램에 포함된 비디오 디코더는 FFmpeg 을 사용하여 제작하였으며, FFmpeg의 라이선스는 LGPL 을 따릅니다 LGPL에 따른 변경된 소스 코드 및 오브젝트는 Github : OvenPlayer-SDK-forAndroid 에 공개되어 있습니다 본 플레이어는 비영리 목적으로 사용하는 모든 개인 개발자는 무료로 사용할 수 있습니다 비영리 목적으로 사용한 개인 개발자라도 본 SDK를 적용한 최종 결과물(App)이 기업/영리/비영리법인/공공 기관/교육기관/기타단체을 목적으로 개발되었다면 무료 대상에 포함되지 않습니다 본 플레이어가 최종 사용되는 기업/영리/비영리법인/공공기관/교육기관/기타단체는 프로그램을 배 포하기 전에 구매를 진행해야 합니다 자세한 내용은 유료 정책 표와 같습니다 AirenSoft는 OvenPlayer SDK for Android에 대한 기술 지원 프로그램을 운영하고 있으며 자세한 내용 은 기술 지원 프로그램 표와 같습니다 Table 11: 유료 정책 종류 무료 월 구독 영구 대상 비영리 목적의 개인 기업/영리/비영리법인/공공기관/교육기관 기업/영리/비영리법인/공공기관/교육기관 사용기간 무제한 가입기간 무제한 기술지원 없음 가입기간 1년 포함 가격 무료 문의 문의 Table 12: 기술 지원 프로그램 대상 마이너 업데이트 매이저 업데이트 기술 문의 기간 연장 OvenPlayer SDK for Android 구매 기관 및 단체 신규 단말 지원, 버그 패치 등 신규 기능 및 성능 개선 등 24시간 이내 응답(주말 및 공휴일 제외) 횟수 무제한 전화, 이메일, 커뮤니티 support@airensoftcom 으로 문의 다운로드 Github OvenPlayer-SDK-for-Android 13 동작 환경 2
CHAPTER 2 설치 및 사용방법 다운로드 Github OvenPlayer-SDK-for-Android 에서 최신 SDK를 받으십시오 최종 바이너리는 다음과 같이 구성되어 있습니다 Table 21: 라이브러리 구성 파일명 libovenplayercoreso libovenplayerhwcodecv1so libovenplayerhwcodecv2so libovenplayerhwcodecv3so comairensoftandroidovenjar 필수여부 O X X X O 설명 미디어 플레이어 Native 라이브러리 안드로이드 2X를 위한 하드웨어 코덱 모듈 안드로이드 3X를 위한 하드웨어 코덱 모듈 안드로이드 4X를 위한 하드웨어 코덱 모듈 Java 인터페이스 라이브러리 등록 프로젝트의 libs\armeabi 에 so 파일을 등록하십시오 so 파일을 등록한 후에는 JAR 파일을 Java Build Path에 등록해야 합니다 Menu -> Project -> Properties를 선택한 뒤 Add Jar 버튼을 클릭하여 comairensoftandroidovenjar 파일을 등록하십시오 3
OvenPlayer SDK for Android Developer s Guide, Release 20 Android Menifest 정의 스트리밍 기능을 사용하기 위해서는 INTERNET 권한을 추가하고, 로컬 미디어 파일을 재생하기 위해서는 WRITE_EXTERNAL_STORAGE 권한을 추가하십시오 <uses-permission android:name="androidpermissioninternet" /> <uses-permission android:name="androidpermissionwrite_external_storage" /> 23 Android Menifest 정의 4
CHAPTER 3 간단한 OvenMediaPlayer 객체를 생성하고 이벤트 리스너를 등록하는 간단한 입니다 플레이어 생성 OvenMediaPlayer를 멤버 변수로 선언하고 다음과 같이 초기화 하면 플레이어를 생성할 수 있습니다 import comairensoftandroidovenmediaplayer*; private OvenMediaPlayer mmediaplayer = null; public void initmediacontroller(){ mmediaplayer = new OvenMediaPlayer(this); mmediaplayersetinitcompletelistener(minitcompletelistener); mmediaplayersetonpreparedlistener(mpreparedlistener); mmediaplayersetonerrorlistener(merrorlistener); mmediaplayersetoncompletionlistener(mcompletionlistener); mmediaplayersetonbufferingupdatelistener(mbufferingupdatelistener); mmediaplayersetonseekcompletelistener(mseekcompletelistener); mmediaplayersetdisplaychangelistener(mdisplaychangelistener); mmediaplayersetonloglistener(mloglistener); mmediaplayersetsystemlogdisable(false); mmediaplayersetscreenonwhileplaying(true); mmediaplayersetallowbackgroundtask(false); mmediaplayersetontimedmetadataupdatelistener(mtimedmetadatalistener); 이벤트 리스너 정의 다음과 같이 이벤트 리스너를 정의하여 사용하면 플레이어 이벤트를 처리할 수 있습니다 // * 라이브러리 초기화 리스너 OvenInitCompleteListener minitcompletelistener = new OvenInitCompleteListener() { public void oninitcomplete(ovenmediaplayer t) { Logd(TAG, Stringformat("Initialize Complete")); // 플레이어 상태 초기화 treset(); ; // 준비 완료 이벤트 리스너 OvenPreparedListener mpreparedlistener = new OvenPreparedListener() { public void onprepared(ovenmediaplayer t, boolean result) { 5
OvenPlayer SDK for Android Developer s Guide, Release 20 ; // Preparing 이성공하면자동으로재생함 if(result==true) { Logd(TAG, Stringformat("Video Resolution: %d/%d", mmediaplayergetvideowidth(), mmediaplayergetvideoheight())); mmediaplayerstart(); // * 버퍼링업데이트이벤트리스너 OvenBufferingListener mbufferingupdatelistener = new OvenBufferingListener(){ public void onbuffering(ovenmediaplayer t, int percent) { ToastmakeText(getApplicationContext(), Stringformat("%d%%", percent), ToastLENGTH_SHORT)show(); ; // * SEEK 완료이벤트리스터 OvenSeekCompleteListener mseekcompletelistener = new OvenSeekCompleteListener() { public void onseekcomplete(ovenmediaplayer t) { ToastmakeText(getApplicationContext(), Stringformat("Seek Completed"), ToastLENGTH_SHORT)show(); ; // * 에러이벤트리스너 OvenErrorListener merrorlistener = new OvenErrorListener() { public void onerror(ovenmediaplayer t, int code) { switch (code) { case OvenErrorCodeOVEN_ERROR_OPEN_FAILED: Logd(TAG, Stringformat("Couldn't open file")); break; case OvenErrorCodeOVEN_ERROR_PREPARE_FAILED: Logd(TAG, Stringformat("Couldn't find stream information")); break; case OvenErrorCodeOVEN_ERROR_PLAYBACK_FAILED: Logd(TAG, Stringformat("Unstable network or unknown error")); break; case OvenErrorCodeOVEN_ERROR_CODEC_FAILED: Logd(TAG, Stringformat("Couldn't find support codec")); break; ; tstop(); // * 동영상재생완료이벤트리스너 OvenCompletionListener mcompletionlistener = new OvenCompletionListener() { public void oncompletion(ovenmediaplayer t) { ToastmakeText(getApplicationContext(), Stringformat("completed"), ToastLENGTH_SHORT)show(); ; mmediaplayerstop(); mmediaplayerprepare(); 32 이벤트리스너정의 6
OvenPlayer SDK for Android Developer s Guide, Release 20 Surface 할당 비디오 출력을 위한 Surface View의 Surface Holder를 플레이어에 할당해줍니다 mvideoview = (SurfaceView) findviewbyid(ridsurfaceview1); mvideoviewgetholder()addcallback(new SurfaceHolderCallback() { @Override public void surfacechanged(surfaceholder holder, int format, int width, int height) { // * Surface뷰가 변경되면 SurfaceHolder를 등록해줌 mmediaplayersetdisplay(holder); @Override public void surfacecreated(surfaceholder holder) { Loge(TAG, "surfacecreated"); @Override public void surfacedestroyed(surfaceholder holder) { Loge(TAG, "surfacedestroyed"); mmediaplayercleardisplay(); ); 재생, 일시정지 및 중지 기본적인 비디오 제어는 다음과 같은 방식으로 쉽게 연결할 수 있습니다 // 일시정지 mediaplayerpause(); // 재생 mediaplayerstart(); // 중지 mediaplayerstop() 샘플 코드 다운로드 다음 URL에서 샘플 코드를 다운로드 할 수 있습니다 https://githubcom/airensoft/ovenplayer-sdk-for-android/sample 33 Surface 할당 7
CHAPTER 4 Method 목록 OvenPlayer SDK for Android를 사용하기 위한 public OvenMediaPlayer Class 를 제공하며, 이 Class의 Method를 나열합니다 setdatasource void OvenMediaPlayer::setDataSource(String uri) 재생할 미디어 URI를 설정합니다 매개 변수uri (String) 미디어 스트림 주소 또는 로컬 경로 mmediaplayersetdatasource("http://servercom/vod/playlistm3u8"); getdatasource String OvenMediaPlayer::getDataSource() 설정한 미디어의 URI값을 문자열로 반환합니다 반환 형식String 반환설정한 미디어의 URI 값 String url = mmediaplayergetdatasource(); setstartposition void OvenMediaPlayer::setStartPosition(Int startpos) 기본적으로 OvenPlayer는 모든 미디어를 재생시 0초부터 재생하게 되어 있습니다 setstartposition은 이어보기 와 같은 기능을 제공할 경우 특정 위치부터 재생할 수 있도록 시작 위치를 지정해주는 메소드 입니다 반드시 Prepare() 메소드 이전에 설정이 되어 있어야 합니다 매개 변수startPos (Int) 재생 시작 시간, 단위 ms 8
OvenPlayer SDK for Android Developer s Guide, Release 20 // 30초부터 재생함 mmediaplayersetstartposition(30000); prepare void OvenMediaPlayer::prepare() setdatasource로 설정한 미디어 URI가 재생 가능한지 여부를 판단하고 재생을 할 수 있도록 모든 자원을 준비합니다 이 메소드를 호출 한 뒤에 onprepared 이벤트로 준비 완료 여부를 알 수 있습니다 onprepared를 통해 준비 완료 이벤트를 받으면 재생 가능한 상태가 됩니다 주석: prepare의 결과 이벤트를 setonpreparedlistener 를 통해 콜백 받을 수 있습니다 // 30초부터 재생함 mmediaplayerprepare(); // 준비 완료 이벤트 리스너 OvenPreparedListener mpreparedlistener = new OvenPreparedListener() { public void onprepared(ovenmediaplayer t, boolean result) { // Preparing이 성공하면 자동으로 재생함 if(result==true){ Logd(TAG, Stringformat("Video Resolution: %d/%d", mmediaplayergetvideowidth(), mmediaplayergetvideoheight())); mmediaplayerstart(); ; Play void OvenMediaPlayer::start() prepare 가 성공한 후 사용할 수 있으며 미디어 재생을 시작하는 메소드입니다 준비 완료 여부는 onprepared 이벤트를 통해 알 수 있습니다 이 메소드를 호출하면 onbuffering 이벤트를 통해 버퍼링 상태를 알려주며, 버퍼링이 완료되면 재생을 시작합니다 주석: start 호출 후 버퍼링 상태 이벤트를 setonbufferingupdatelistener 를 통해 콜백 받을 수 있습니 다 ; mmediaplayersetdatasource("http://servercom/vod/playlistm3u8"); mmediaplayerprepare(); mmediaplayerstart(); // 버퍼링 업데이트 이벤트 리스너 44 prepare 9
OvenPlayer SDK for Android Developer s Guide, Release 20 OvenBufferingListener mbufferingupdatelistener = new OvenBufferingListener() { public void onbuffering(ovenmediaplayer t, int percent) { ToastmakeText(getApplicationContext(), Stringformat("Buffering : %d%%", percent), ToastLENGTH_SHORT)show(); ; pause void OvenMediaPlayer::pause() 재생을 일시 중지 합니다 재생 중이 아닌 상태에서 호출하면 아무 동작도 하지 않습니다 mmediaplayerpause(); stop void OvenMediaPlayer::stop() 재생을 완전히 중지하고 스트림을 정리합니다 stop 함수를 호출한 뒤에는 start 함수를 호출하더라도 다시 재생되지 않으며, 미디어를 재생하기 위해서는 prepare 부터 다시 호출해야 합니다 mmediaplayerstop(); setspeed void OvenMediaPlayer::setSpeed(float speed) 재생 속도를 조절합니다 05배속 (2배 느리게) 부터 2배속 (2배 빠르게) 사이에서 속도를 지정할 수 있습니다 매개 변수speed (float) 속도 : 범위(05 ~ 20) seekto void OvenMediaPlayer::seekTo(int sec) 현재 재생 중인 미디어를 지정한 위치로 이동하는 기능이며, 로컬 파일 및 VoD 스트림을 재생할 때 사용할 수 있습니다 Live 스트리밍을 재생 할때는 동작하지 않습니다 매개 변수sec (int) 이동할 위치 (초) 46 pause 10
OvenPlayer SDK for Android Developer s Guide, Release 20 isplaying boolean OvenMediaPlayer::isPlaying() 현재 플레이어가 재생중인지 체크합니다 반환 형식boolean 반환 true : 재생중 false : 일시 중지 / 중지 / 버퍼링 등의 상태 getduration int OvenMediaPlayer::getDuration() 현재 재생 중인 미디어의 총 재생 시간을 구합니다 로컬 파일, VoD같은 경우에는 초단위로 값이 반환되며, Live 영상인 경우에는 0을 반환합니다 반환 형식int 반환 > 0 : 로컬 파일, VoD 스트림 영상의 재생 시간 (초) = 0 : Live 영상 getcurrentposition int OvenMediaPlayer::getCurrentPosition() 현재 미디어의 재생 위치를 구합니다 반환 형식int 반환현재 재생 위치(초) setscreenmode void OvenMediaPlayer::setScreenMode(int mode) 영상 출력 모드를 설정합니다 영상 비율 기준으로 출력하거나 화면 비율 기준으로 출력할 수 있습니다 매개 변수mode (int) OVEN_SCREEN_NORMAL(0) : 영상 비율 기준 (기본값) OVEN_SCREEN_NOASPECTRATIO_FULL(1) : 화면 비율 기준 getstatus OvenPlaybackStatus OvenMediaPlayer::getStatus() 현재 플레이어의 상태를 구합니다 반환 형식OvenPlaybackStatus 반환플레이어 상태 410 isplaying 11
OvenPlayer SDK for Android Developer s Guide, Release 20 주석: class OvenPlaybackStatus { // 멈춤 // 준비중 // 준비 완료 // 준비 실패 // 재생중 // 일시 중지 // 버퍼링 중 // 재생 완료 int OVEN_STATUS_STOP = 0; int OVEN_STATUS_PREPARING = 1; int OVEN_STATUS_PREPARED = 2; int OVEN_STATUS_PREPARED_FAILED = 3; int OVEN_STATUS_PLAY = 4; int OVEN_STATUS_PAUSE = 5; int OVEN_STATUS_BUFFERING = 6; int OVEN_STATUS_PBCOMPLETE = 7; getmediatype OvenMediaType OvenMediaPlayer::getMediaType() 현재 재생되고 있는 미디어의 종류를 구합니다 반환 형식OvenMediaType 반환미디어 종류 주석: class OvenMediaType { // 알 수 없음 // 비디오 // 오디오 // 비디오 + 오디오 int AM_MEDIA_UNKNOWN = 0; int AM_MEDIA_VIDONLY = 1; int AM_MEDIA_AUDONLY = 2; int AM_MEDIA_AVBOTH = 3; getstreamtype OvenStreamType OvenMediaPlayer::getStreamType() 재생하고 있는 스트림 종류를 구합니다 VoD 와 LIVE 를 구분할 수 있습니다 반환 형식OvenStreamType 반환스트림 종류 주석: 415 getmediatype 12
OvenPlayer SDK for Android Developer s Guide, Release 20 class OvenStreamType { // 스트림 종류를 판별할 수 없음 int OVEN_STREAM_NONE = 0; // 로컬 파일 또는 VoD 스트림 int OVEN_STREAM_VOD = 1; // 라이브 스트림 int OVEN_STREAM_LIVE = 2; getscreenonwhileplaying void OvenMediaPlayer::setScreenOnWhilePlaying(Boolean screenon) 재생 중 장시간 사용자 입력이 없을 경우 화면 절전 모드로 진입하는 기능을 온오프 합니다 매개 변수screenOn (Boolen) TRUE : 화면 켜짐 유지 FALSE : 화면 절전 모드 사용 (기본값) setuseragent void OvenMediaPlayer::setUserAgent(String useragent) HLS 또는 HTTP Progressive Download 스트림을 요청할 때 HTTP 헤더에 UserAgent 값을 임의로 지정합니다 매개 변수userAgent (String) 사용자 정의 UserAgent 값 getuseragent String OvenMediaPlayer::getUserAgent() HLS 또는 HTTP Progressive Download 스트림을 요청할 때 HTTP 헤더에 넣는 설정된 UserAgent 값을 구합니다 반환 형식String 반환정의된 UserAgent 값 getdefaultuseragent String OvenMediaPlayer::getUserAgent() 시스템에 설정된 HTTP 헤더의 UserAgent 값을 구합니다 반환 형식String 반환정의된 UserAgent 값 417 getscreenonwhileplaying 13
OvenPlayer SDK for Android Developer s Guide, Release 20 release void OvenMediaPlayer::release() 플레이어에 할당된 모든 자원을 해제합니다 플레이어를 더 이상 사용하지 않을 때 호출합니다 421 release 14
CHAPTER 5 Event Listener 목록 OvenMediaPlayer Class가 제공하는 Event Listener를 나열합니다 setinitcompletelistener void OvenMediaPlayer::setInitCompleteListener(OvenInitCompleteListener l) 플레이어 생성 후에 발생되는 초기화 완료 이벤트를 등록합니다 매개 변수l (OvenInitCompleteListener) 초기화 이벤트를 받을 리스너 인터페이스 void oninitcomplete(ovenmediaplayer i) OvenInitCompleteListener의 인터페이스입니다 매개 변수i (OvenMediaPlayer) 플레이어 인스턴스 OvenInitCompleteListener minitcompletelistener = new OvenInitCompleteListener() { public void oninitcomplete(ovenmediaplayer i){ isetdatasource("http://servercom/vod/playlistm3u8"); iprepare(); ; mmediaplayersetoninitcompletelistener(minitcompletelistener); setonpreparedlistener void OvenMediaPlayer::setOnPreparedListener(OvenPreparedListener l) prepare 함수를 호출 후에 발생되는 재생 준비 완료 이벤트를 등록합니다 매개 변수l (OvenPreparedListener) 초기화 이벤트를 받을 리스너 인터페이스 void onprepared(ovenmediaplayer i, boolean result) OvenPreparedListener 인터페이스입니다 15
OvenPlayer SDK for Android Developer s Guide, Release 20 매개 변수 i (OvenMediaPlayer) 플레이어 인스턴스 result (boolean) 준비 성공 여부 OvenPreparedListener mpreparedlistener = new OvenPreparedListener() { public void onprepared(ovenmediaplayer i, boolean result) { Logd("OvenPlayerLib", Stringformat("%s", success?"success":"failed")); ; mmediaplayersetonpreparedlistener(mpreparedlistener); setonbufferingupdatelistener void OvenMediaPlayer::setOnBufferingUpdateListener(OvenBufferingListener l) 버퍼링 진행 상태 이벤트를 등록합니다 매개 변수l (OvenBufferingListener) 초기화 이벤트를 받을 리스너 인터페이스 void onbuffering(ovenmediaplayer i, int percent) OvenBufferingListener 인터페이스입니다 매개 변수 i (OvenMediaPlayer) 플레이어 인스턴스 percent (int) 버퍼링 진행률 (0 ~ 100) OvenBufferingListener mbufferingupdatelistener = new OvenBufferingListener() { public void onbuffering(ovenmediaplayer i, int percent) { ToastmakeText(getApplicationContext(), Stringformat("Buffering : %d%%", percent), ToastLENGTH_SHORT)show(); ; mmediaplayersetonbufferingupdatelistener(mbufferingupdatelistener); setonseekcompletelistener void OvenMediaPlayer::setOnSeekCompleteListener(OvenSeekCompleteListener l) 미디어 재생 위치 이동 완료 이벤트를 등록합니다 매개 변수l (OvenSeekCompleteListener) 초기화 이벤트를 받을 리스너 인터페이스 void onseekcomplete(ovenmediaplayer i) OvenSeekCompleteListener 인터페이스입니다 53 setonbufferingupdatelistener 16
OvenPlayer SDK for Android Developer s Guide, Release 20 매개 변수i (OvenMediaPlayer) 플레이어 인스턴스 OvenSeekCompleteListener mseekcompletelistener = new OvenSeekCompleteListener() { public void onseekcomplete(ovenmediaplayer i) { ToastmakeText(getApplicationContext(), Stringformat("Seek Completed"), ToastLENGTH_SHORT)show(); ; mmediaplayersetonseekcompletelistener(mseekcompletelistener); setonerrorlistener void OvenMediaPlayer::setOnErrorListener(OvenErrorListener l) 플레이어에서 발생하는 에러를 onerror 이벤트를 통해 전달 받을 수 있습니다 미디어 재생 오류, 네트워크 문제, CPU 성능에 따른 디코딩 성능 부족 및 기타 에러가 발생하면 호출됩니다 매개 변수l (OvenErrorListener) 초기화 이벤트를 받을 리스너 인터페이스 void onerror(ovenmediaplayer i, int code) OvenErrorListener 인터페이스입니다 매개 변수 i (OvenMediaPlayer) 플레이어 인스턴스 code (int) OvenErrorCodeOVEN_ERROR_OPEN_FAILED : 파일 열기 실패 OvenErrorCodeOVEN_ERROR_PREPARE_FAILED : 연결 실패 OvenErrorCodeOVEN_ERROR_PLAYBACK_FAILED : 재생 실패 OvenErrorCodeOVEN_ERROR_CODEC_FAILED : 알수없는 코덱 OvenErrorListener merrorlistener = new OvenErrorListener() { public void onerror(ovenmediaplayer t, int code) { switch (code) { case OvenErrorCodeOVEN_ERROR_OPEN_FAILED: Logd(TAG, Stringformat("Couldn't open file")); break; case OvenErrorCodeOVEN_ERROR_PREPARE_FAILED: Logd(TAG, Stringformat("Couldn't find stream information")); break; case OvenErrorCodeOVEN_ERROR_PLAYBACK_FAILED: Logd(TAG, Stringformat("Unstable network or unknown error")); break; case OvenErrorCodeOVEN_ERROR_CODEC_FAILED: Logd(TAG, Stringformat("Couldn't find support codec")); break; ; tstop(); 55 setonerrorlistener 17
OvenPlayer SDK for Android Developer s Guide, Release 20 public OvenMediaPlayer mmediaplayer aplayersetonerrorlistener(merrorlistener); = new OvenMediaPlayer(this); mmedi- setoncompletionlistener void OvenMediaPlayer::setOnCompletionListener(OvenCompletionListener l) 미디어 재생 완료 이벤트를 등록합니다 매개 변수l (OvenCompletionListener) 초기화 이벤트를 받을 리스너 인터페이스 void oncompletion(ovenmediaplayer i) OvenCompletionListener 인터페이스입니다 매개 변수i (OvenMediaPlayer) 플레이어 인스턴스 OvenCompletionListener mcompletionlistener = new OvenCompletionListener() { public void oncompletion(ovenmediaplayer i) { ToastmakeText(getApplicationContext(), Stringformat("Streaming playback is completed"), ToastLENGTH_SHORT)show(); ; mmediaplayerstop(); mmediaplayerprepare(); mmediaplayersetoncompletionlistener(mcompletionlistener); setontimedmetatdataupdatelistener void OvenMediaPlayer::setOnTimedMetadataUpdateListener(OvenTimedMetadateUpdated l) HLS Timed Meta 출력 이벤트를 등록합니다 매개 변수l (OvenTimedMetadateUpdated) 초기화 이벤트를 받을 리스너 인터페이스 void ontimedmetadataupdate(ovenmediaplayer i, String m) OvenTimedMetadateUpdated 인터페이스입니다 매개 변수 i (OvenMediaPlayer) 플레이어 인스턴스 m (String) 메타데이터 OvenTimedMetadataUpdatedListener mtimedmetadatalistener = new OvenTimedMetadataUpdatedListener() { public void ontimedmetadataupdate(ovenmediaplayer t, String meta) { Logd(TAG, Stringformat("TimedMeta : %s", meta)); ; 56 setoncompletionlistener 18
OvenPlayer SDK for Android Developer s Guide, Release 20 mmediaplayersetontimedmetadataupdatelistener(mtimedmetadatalistener); 57 setontimedmetatdataupdatelistener 19
CHAPTER 6 부록 State Diagram 20