导入 IjkPlayer

想做个视频 APP,一开始挑的是 Vitamio,结果使用的过程各种发现不少问题,而且 github 上的 issue 越来越多,却很少被解决的,因此我又相中了 Bilibili 的 IjkPlayer,按照 README 说明,还真不是很懂,搞不清楚是要下载要是编译,也是折腾的够呛,这做下记录。

首先说下背景:
1. ijkplayer 框架提供的只是一个 IjkMediaPlayer给我们使用,用法和原生 MediaPlayer 类似,至于那为什么不直接用原生的呢,因为原生的支持的视频格式非常少。
2. 显然 IjkMediaPlayer并不能满足我的需要,毕竟VideoViewMediaContriller才是使用的最多也最方便的。虽然 ijkpalyer 并没有提供 VideoView,但是它给出的 ijkpalyer-example 里却有实现类,偷偷抄过来就可以用了咳咳(那个啥别人也是这么做的)。


现在我的项目需要使用 ijkplayer 中的VideoViewMediaContriller,我要怎么做?
官方 REDME 说明中给出两个方法:

第一种方法: 使用 gradle 直接导入需要的 ABIs 依赖和 java 依赖
dependencies {
    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.1'

    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.1'

    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.1'
}

没有错这倒是很方便,这么一来,就可以使用 IjkMediaPlayer了,但是 VideoViewMediaContriller 还不行,需要从 github 提供的 ijkplayer-example 中抽取出来,稍后介绍。

第二种方法:我也不知怎么回事,很多人不嫌麻烦(包括我)还是选择自己在 linux 编译一遍源码,获取到一个工程如下:

图片来自 blog.youkuaiyun.com/u010987039/article/details/52301077

其中,ijkplayer-example 是可运行的 app,其他 7 个作为 ijkplayer-example 的依赖。
把这 7 个依赖添加到我自己的工程里,就可正常使用IjkMediaPlayer了,
这其实跟上面使用 gradle 添加依赖没啥两样,区别就在于多了一个 ijkplayer-example ,我们可以从里面抽出我们需要的代码,也就是 VideoViewMediaContriller
那那那要是我使用的是第一种方法,那我上哪里去找 ijkplayer-example 的代码啊?
直接上 github 下载 zip 文件解压里面有源代码。


现在来从 ijkplayer 中抽出出我们需要的代码,
说出来不怕大哥大姐笑话,就这个偷代码的环节我折腾了半天

从 ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/
1. 复制 widget/media 包到自己的工程下:
此处输入图片的描述
2. 复制 application 包早自己工程下,只要 Setting 类,其它删除
此处输入图片的描述
3. 复制 services 包到自己工程下
此处输入照片的描述
4. 复制以下 xml 文件到自己工程下
此处输入照片的描述
5. 复制 string.xml 和 string_pref.xml 到自己工程下(注意如果自己有相应文件了则合并)
此处输入照片的描述

进入每一个报错的文件,删除掉原本导入的 R 文件,再重新导入自己的 R 文件。
好了终于不报错拉,其实跟着报错的原因一步一步解决也是很简单的事,我就是按着网上一些不完整的教程来的,却发现报错,开始怀疑自己,陷入沉思。。。


至于编译的过程,按照 github 上的说明一步一步来,虽然不理解但是也没什么阻力。

值得提及的是以下几个问题:

1. 究竟什么是 so 文件?

so 文件是 NDK 编译出来的动态链接库,一些重要的加密算法或者核心协议一般都用c写然后给java调用。这样可以避免反编译后查看到应用的源码。

2. libs下armeabi等的作用是什么

存放.so库,主要针对不同的设备兼容,也可以说是专门针对不同Android手机下CPU架构的兼容。
Android 设备的CPU类型(通常称为”ABIs”)
早期的 Android 系统几乎只支持 ARMv5 的 CPU 架构,而目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。
应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。在Android 系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。

参考自:http://www.jianshu.com/p/a4eea7ea4664, https://github.com/Bilibili/ijkplayer, http://blog.youkuaiyun.com/u010987039/article/details/52301077, http://www.voidcn.com/blog/u012400885/article/p-6276265.html

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值