안 드 로 이 드 는 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()) {
//
}
...
플레이어 내부 구현사전 로드 수요&재 활용 플레이어
지능 백 스테이지&환기 처리
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.