今天小編給大家分享一下怎么在Android中使用IJKPlayer視頻播放器的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、封裝播放內(nèi)核
我們都知道需要播放一個視頻需要三個過程 1.create MediaPlayer 2.MediaPlayer prepare 3.MediaPlayer 與 Surface 綁定
xinvideoplayer中使用了VideoManager來控制ijkmediaplayer 所有的操作
三個過程 我們使用 HandlerThread + Hander 來實(shí)現(xiàn) 第一個過程創(chuàng)建大致可能需要100ms左右,嚴(yán)重影響UI線程!!!
第一個過程: create MediaPlayer
new IjkMediaPlayer() 設(shè)置一些播放器回調(diào)方法
//IJK 的 Mediaplayer api 類似 Android 系統(tǒng)播放器api
//IMediaPlayer.class
public interface IMediaPlayer{
void setOnPreparedListener(IMediaPlayer.OnPreparedListener var1); //prepareAsync 之后回調(diào)方法
void setOnCompletionListener(IMediaPlayer.OnCompletionListener var1); //播放完成回調(diào)方法
void setOnBufferingUpdateListener(IMediaPlayer.OnBufferingUpdateListener var1);//當(dāng)播放網(wǎng)絡(luò)的數(shù)據(jù)流的buffer發(fā)生變化的時候
void setOnSeekCompleteListener(IMediaPlayer.OnSeekCompleteListener var1);//當(dāng)seek定位操作完成后
void setOnVideoSizeChangedListener(IMediaPlayer.OnVideoSizeChangedListener var1);//當(dāng)視頻的大小第一次被知道或者發(fā)生改變時
void setOnErrorListener(IMediaPlayer.OnErrorListener var1);//當(dāng)有發(fā)生錯誤
void setOnInfoListener(IMediaPlayer.OnInfoListener var1);//當(dāng)有信息或者警告
void setOnTimedTextListener(IMediaPlayer.OnTimedTextListener var1); //當(dāng)媒體的時間數(shù)據(jù)需要被顯示
}第二個階段 prepare
mediaPlayer.prepareAsync(); 等待回調(diào) IMediaPlayer.OnPreparedListener#onPrepare()
第三個階段 給IJKMediaPlayer 綁定 Surface 呈現(xiàn)畫面
mediaPlayer.setSurface();
2、播放器View
實(shí)現(xiàn) 播放器基本方法(IViewPlayer)和 播放內(nèi)核回調(diào)方法(IMediaPlayerListener)
IMediaPlayerListener 是包裝 IMediaPlayer 所有接口并通過 Handle 發(fā)送到主線程中實(shí)現(xiàn)
//IVideoPlayer.java
interface IVideoPlayer{
void start();//開始播放
void pause();//暫停播放
void seekTo(long time); //seekto time
void release();//關(guān)閉播放
void setVideoPath();//設(shè)置視頻路徑
void onStartFullScreen();//全屏播放
void onBackFullScreen(); //退出全屏
void onResumeVideo();//播放器后臺喚起
void onPauseVideo();//切換后臺
int getCurrentState();//視頻的當(dāng)前狀態(tài)
int getCurrentScreenState(); //當(dāng)前屏幕的狀態(tài) 例如小屏,大屏,豎屏
long getTcpSpeed();//獲取網(wǎng)速
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();//開始播放
//如果需要后臺暫停喚起繼續(xù)播放
videoplayer.onVideoResume();
videoplayer.onVideoPause();
//如果需要后臺暫停喚起繼續(xù)播放
全屏?xí)r控制返回鍵問題:
if (!VideoPlayerUtils.onBackPressed()) {
//返回的正常邏輯
}
...播放器的內(nèi)部實(shí)現(xiàn)

預(yù)加載需求 & 復(fù)用播放器

智能后臺&喚起處理

以上就是“怎么在Android中使用IJKPlayer視頻播放器”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
名稱欄目:怎么在Android中使用IJKPlayer視頻播放器-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://www.chinadenli.net/article6/deeeig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、全網(wǎng)營銷推廣、自適應(yīng)網(wǎng)站、做網(wǎng)站、網(wǎng)站制作、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)