如何在Android中使用IJKPlayer视频播放器

如何在Android中使用IJKPlayer视频播放器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

公司主营业务:成都做网站、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出阜南免费做网站回馈大家。

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.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); //当媒体的时间数据需要被显示
}

第二个阶段 prepare

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

第三个阶段 给IJKMediaPlayer 绑定 Surface 呈现画面

mediaPlayer.setSurface();

2、播放器View

实现 播放器基本方法(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()) {
 //返回的正常逻辑
}
...

播放器的内部实现

如何在Android中使用IJKPlayer视频播放器

预加载需求 & 复用播放器

如何在Android中使用IJKPlayer视频播放器

智能后台&唤起处理

如何在Android中使用IJKPlayer视频播放器

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


分享文章:如何在Android中使用IJKPlayer视频播放器
网站地址:http://scyanting.com/article/ggjech.html