안 드 로 이 드 는 IJK Player 비디오 재생 기 를 기반 으로 간단 한 패 키 징 디자인 을 만 들 었 습 니 다.

플레이어 의 간단 한 디자인
재생 기 는 IJK Player 를 기반 으로 설계 되 었 으 며,재생 기 는 크게 3 층 으로 나 뉜 다.
1.커 널 재생(ijkMediaplayer 기반)
2.플레이어 보기
3.플레이어 의 MediaController
1.패 키 징 재생 커 널
동 영상 을 재생 하려 면 세 가지 과정 이 필요 하 다 는 것 을 잘 알 고 있 습 니 다.1.create MediaPlayer 2.MediaPlayer prepare 3.MediaPlayer 와 Surface 연결
xinvideoplayer 에서 VideoManager 를 사용 하여 ijkmediaplayer 의 모든 조작 을 제어 합 니 다.
세 가지 과정 에서 저 희 는 HandlerThread+Hander 를 사용 하여 첫 번 째 과정 을 만 드 는 데 100 ms 정도 가 필요 할 수 있 습 니 다.UI 스 레 드 에 심각 한 영향 을 줄 수 있 습 니 다!!!
첫 번 째 과정:create MediaPlayer
new IjkMediaPlayer()재생 기 리 셋 방법 설정

//IJK   Mediaplayer api    Android      api
//IMediaPlayer.class
public interface IMediaPlayer{
 void setOnPreparedListener(IMediaPlayer.OnPreparedListener var1); //prepareAsync       
 void setOnCompletionListener(IMediaPlayer.OnCompletionListener var1); //        
 void setOnBufferingUpdateListener(IMediaPlayer.OnBufferingUpdateListener var1);//          buffer       
 void setOnSeekCompleteListener(IMediaPlayer.OnSeekCompleteListener var1);// seek       
 void setOnVideoSizeChangedListener(IMediaPlayer.OnVideoSizeChangedListener var1);//                   
 void setOnErrorListener(IMediaPlayer.OnErrorListener var1);//      
 void setOnInfoListener(IMediaPlayer.OnInfoListener var1);//        
 void setOnTimedTextListener(IMediaPlayer.OnTimedTextListener var1); //             
}
두 번 째 단계 preparemediaPlayer.prepareAsync(); IMediaPlayer.OnPreparedListener#onPrepare()세 번 째 단 계 는 IJK 미디어 플레이어 에 게 Surface 를 연결 하여 화면 을 보 여 줍 니 다.mediaPlayer.setSurface();2,플레이어 보기
재생 기 기본 방법(IViewPlayer)과 재생 커 널 리 셋 방법(IMediaPlayerListener)실현
IMediaPlayerListener 는 포장IMediaPlayer모든 인터페이스 와 Handle 을 통 해 메 인 스 레 드 에 전송 합 니 다.

//IVideoPlayer.java
interface IVideoPlayer{
 void start();//    
 void pause();//    
 void seekTo(long time); //seekto time
 void release();//    
 void setVideoPath();//      
 void onStartFullScreen();//    
 void onBackFullScreen(); //    
 void onResumeVideo();//       
 void onPauseVideo();//    
 int getCurrentState();//       
 int getCurrentScreenState(); //            ,  ,  
 long getTcpSpeed();//    
 void switchVideoSource(String url,long delay);//            
}
public interface MediaPlayerListenerextends IVideoPlayer{

 void onPrepared();
 void onAutoCompletion();
 void onCompletion();
 void onBufferingUpdate(int percent);
 void onSeekComplete(long currentPosition);
 void onError(int what, int extra);
 void onInfo(int what, int extra);
 void onVideoSizeChanged();
}

이상 의 인 터 페 이 스 는 모든 플레이어 의 기능 요 구 를 대체적으로 만족 시 켰 습 니 다!!
3.MediaController

public interface IVideoController{
 //    
 ViewbindPlayer(IVideoPlayer player);
 void onChangeVideoStatus(IVideoPlayer player,int old_status, int new_status);
 void onChangeScreenStatus(IVideoPlayer player,int old_status, int new_status);
 boolean onChangedNetWork(int currentNetState);
 void onVideoProgress(int percent, long curr_position, long duration);
 void unbindPlayer(IVideoPlayer player);
 boolean isLock();
 void onVideoDefinitionSwitched();
 void show();
 void hide();
 boolean isShowing();
BaseVideoPlayer#setVideoController()
플레이어 의 간단 한 접속 사용

videoplayer.setVideoPath(url);
videoplayer.start();//    
//              
videoplayer.onVideoResume();
videoplayer.onVideoPause();
//              
          :
if (!VideoPlayerUtils.onBackPressed()) {
 //       
}
...
플레이어 내부 구현

사전 로드 수요&재 활용 플레이어

지능 백 스테이지&환기 처리

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기