千家信息网

怎么在Android中使用IJKPlayer视频播放器

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天小编给大家分享一下怎么在Android中使用IJKPlayer视频播放器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章
千家信息网最后更新 2026年11月02日怎么在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.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视频播放器"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0