国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android基于IJKPlayer視頻播放器簡單封裝設計

2019-10-21 21:49:59
字體:
來源:轉載
供稿:網友

播放器的簡單設計

播放器基于IJKPlayer來設計的, 播放器大致分三層

1.播放內核(基于ijkMediaplayer)

2.播放器View

3.播放器的MediaController

1、封裝播放內核

我們都知道需要播放一個視頻需要三個過程 1.create MediaPlayer 2.MediaPlayer prepare 3.MediaPlayer 與 Surface 綁定

xinvideoplayer中使用了VideoManager來控制ijkmediaplayer 所有的操作

三個過程 我們使用 HandlerThread + Hander 來實現 第一個過程創建大致可能需要100ms左右,嚴重影響UI線程!!!

第一個過程: create MediaPlayer

new IjkMediaPlayer() 設置一些播放器回調方法

//IJK 的 Mediaplayer api 類似 Android 系統播放器api//IMediaPlayer.classpublic 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); //當媒體的時間數據需要被顯示}

第二個階段 prepare

mediaPlayer.prepareAsync(); 等待回調 IMediaPlayer.OnPreparedListener#onPrepare()

第三個階段 給IJKMediaPlayer 綁定 Surface 呈現畫面

mediaPlayer.setSurface();

2、播放器View

實現 播放器基本方法(IViewPlayer)和 播放內核回調方法(IMediaPlayerListener)

IMediaPlayerListener 是包裝 IMediaPlayer 所有接口并通過 Handle 發送到主線程中實現

//IVideoPlayer.javainterface 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()) { //返回的正常邏輯}...

播放器的內部實現

Android,IJKPlayer,視頻播放器,封裝設計

預加載需求 & 復用播放器

Android,IJKPlayer,視頻播放器,封裝設計

智能后臺&喚起處理

Android,IJKPlayer,視頻播放器,封裝設計

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁津县| 宁波市| 苏州市| 安化县| 徐水县| 吴江市| 封开县| 中卫市| 景东| 册亨县| 阿拉善右旗| 山东| 临沭县| 诸城市| 拉萨市| 正镶白旗| 南川市| 长葛市| 台州市| 永嘉县| 宽甸| 西林县| 霍州市| 锦州市| 林芝县| 揭阳市| 吴江市| 淅川县| 扎赉特旗| 仁布县| 永和县| 剑川县| 盐山县| 汤原县| 三门县| 汉阴县| 馆陶县| 饶平县| 伊吾县| 泌阳县| 安仁县|