ijkplayer系列1:ijkplayer介绍
ijkplayer简介
基于FFmpeg的轻量级Android/iOS视频播放器
https://github.com/Bilibili/ijkplayer
导入方式
gradle导入
allprojects {repositories {jcenter()}
}dependencies {# required, enough for most devices.compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'# Other ABIs: optionalcompile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'# ExoPlayer as IMediaPlayer: optional, experimentalcompile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}
从github下载ijkplayer源码,进行编译
待实践
来个栗子
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
VideoPlayer(ijk没有给具体的view,需要我们自己封装)
public class VideoPlayer extends FrameLayout {private Context mContext;private IMediaPlayer mMediaPlayer;private SurfaceView surfaceView;public VideoPlayer(Context context) {super(context);}public VideoPlayer(Context context, AttributeSet attrs) {super(context, attrs);init(context);}private void init(Context context) {mContext = context;createSurfaceView();}private void createSurfaceView() {surfaceView = new SurfaceView(mContext);surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {if (mMediaPlayer != null) {mMediaPlayer.setDisplay(holder);}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}});LayoutParams layoutParams =new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,Gravity.CENTER);addView(surfaceView, 0, layoutParams);}//创建一个新的playerprivate IMediaPlayer createPlayer() {//todo 各个参数的含义IjkMediaPlayer ijkMediaPlayer = new IjkMediaPlayer();ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 1);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "http-detect-range-support", 1);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "min-frames", 100);ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);ijkMediaPlayer.setVolume(1.0f, 1.0f);return ijkMediaPlayer;}//开始加载视频public void load(String mPath) throws IOException {if (mMediaPlayer != null) {mMediaPlayer.stop();mMediaPlayer.release();}mMediaPlayer = createPlayer();setListener(mMediaPlayer);mMediaPlayer.setDisplay(surfaceView.getHolder());mMediaPlayer.setDataSource(mContext, Uri.parse(mPath));mMediaPlayer.prepareAsync();}private void setListener(IMediaPlayer player) {player.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(IMediaPlayer iMediaPlayer) {if (mMediaPlayer != null) {mMediaPlayer.start();}}});player.setOnVideoSizeChangedListener(new IMediaPlayer.OnVideoSizeChangedListener() {@Overridepublic void onVideoSizeChanged(IMediaPlayer iMediaPlayer, int i, int i1, int i2, int i3) {}});}public void release() {if (mMediaPlayer != null) {mMediaPlayer.reset();mMediaPlayer.release();mMediaPlayer = null;}}public void pause() {if (mMediaPlayer != null) {mMediaPlayer.pause();}}public void stop() {if (mMediaPlayer != null) {mMediaPlayer.stop();}}public void reset() {if (mMediaPlayer != null) {mMediaPlayer.reset();}}}
MainActivity
VideoPlayer videoPlayer = findViewById(R.id.video);try {videoPlayer.load("http://vjs.zencdn.net/v/oceans.mp4");} catch (IOException e) {Toast.makeText(this,"播放失败",Toast.LENGTH_SHORT);e.printStackTrace();}
效果:
参考资料
ijkplayer接入使用
https://www.jianshu.com/p/a57bbdd78798
ijkplayer踩坑记录
https://www.jianshu.com/p/0ae5924cc7d6*
ijkplayer系列1:ijkplayer介绍相关推荐
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- ijkplayer系列14:从入门到进阶问题树梳理
ijkplayer系列14:从入门到进阶问题树梳理 基础准备 语法基础: C语言以及JNI开发是必备的能力 C语言语法简单复习 https://anacz.blog.csdn.net/article/ ...
- 一步步实现windows版ijkplayer系列文章之一Windows10平台编译ffmpeg 4.0.2,生成ffplay
一步步实现windows版ijkplayer系列文章之一Windows10平台编译ffmpeg 4.0.2,生成ffplay 最近想研究下ffplay的代码,学习代码是枯燥无味的,也是抽象的,学习一个 ...
- 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...
- automake java_一步步实现windows版ijkplayer系列文章之五——使用automake生成makefile
#一步步实现windows版ijkplayer系列文章之五--使用automake一步步生成makefile 上一篇文章我们把ffmpeg库成功在windows平台下编译成dll了,ffmpeg的编译 ...
- SpringBoot 2.0 系列001 -- 入门介绍以及相关概念
为什么80%的码农都做不了架构师?>>> SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...
- 提炼游戏引擎系列:开篇介绍
前言 大家好!本系列记录了从炸弹人游戏中提炼2D游戏引擎YEngine2D雏形的实战过程,您可以通过本系列了解到引擎提炼的思想.引擎的设计以及引擎是如何从游戏中提炼的,学习引擎开发的知识.希望对您能有 ...
- WPF入门教程系列三——Application介绍(续)
接上文WPF入门教程系列二--Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...
- WPF入门教程系列四——Dispatcher介绍
WPF入门教程系列四--Dispatcher介绍 一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还 ...
- asp.net core 系列 19 EFCore介绍
asp.net core 系列 19 EFCore介绍 原文:asp.net core 系列 19 EFCore介绍 一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2 ...
最新文章
- [转载]去除文件中的^M
- 疯狂python讲义视频 百度云-每周一书《疯狂Python讲义》分享!
- 企业USB权限控制心得
- codeigniter在nginx安装配置及URL重写
- dos命令操作mysql数据库的常用语句
- “穿透”与“征兆”:长篇小说《环形女人》(一)
- nssl1209-奇怪的队列【贪心,权值线段树】
- ActionItemBadge:在actionbar上显示badge数字提示
- 36000+开发者,一周投稿超 23000 篇,谁能笑傲群雄?| 第4周周榜揭晓
- Android中Service的一个Demo例子
- 控制台——EventLog实现事件日志操作
- R语言中写入Excel的不同sheet表格
- 【TVM帮助文档学习】Relay的代数数据类型
- Android Provision源码分析
- 13万人12306信息泄露 小伙挨个发邮件通知
- 计算机开机最快设置,那些电脑开机速度击败全国99%的人,他们是怎么做到的?...
- 鼠标点击事件对象的clientX、pageX、offsetX、screenX、x
- button按钮的tittle 折行且居中显示
- matlab纵坐标两边标注,matlab纵坐标标注
- 技术人员帮助电商运营选择最合适的物流快递运输公司的5个切入点