1、安装虚拟机VMware-workstation-full-12.0.0-2985596.exe ,版本太旧需要先升级才能安装系统。
2、安装ubuntu-20.04.2.0-desktop-amd64.iso系统。4G运行+36G内存,太小的话系统可能起不来。
3、配置ndk环境,在home目录创建workdir,拷贝android-ndk-r10e-linux-x86_64.zip到该目录下,在当前目录点击右键->open in Terminal
unzip android-ndk-r10e-linux-x86_64.zip 解压
xxx@ubuntu:/$ cd home/xxx/workdir/android-ndk-r10e/
xxx@ubuntu:~/workdir/android-ndk-r10e$ pwd
/home/xxx/workdir/android-ndk-r10e
使用 sudo gedit /etc/profile 命令打开 /etc/profile 文件,添加如下配置:
export ANDROID_NDK="/home/xxx/workdir/android-ndk-r10e" export PATH="$ANDROID_NDK:$PATH"
然后source /etc/profile ndk-build -v 如果有看到版本号说明配置成功
4、安装git
sudo apt install git
5、下载ijk源码
git clone https://github.com/bilibili/ijkplayer.git ijkplayer-android
6、编译
git checkout -B latest k0.8.8 //在0.8.8版本上创建新分支
如果是依赖服务器库的方式需要在gradle 中 implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' ,版本要与自己编译的版本对应。
如果以lib库方式依赖只需要 implementation project(path:'ijkplayer-java')。
./init-android.sh //拉取ijk编译相关代码
出现问题Cloning into 'android/contrib/ffmpeg-armv5'... fatal: unable to access 'https://github.com/Bilibili/FFmpeg.git/': GnuTLS recv error (-54): Error in the pull function.
解决:vi init-android.sh
将所有 https://github.com/Bilibili/FFmpeg.git/改为git://github.com/Bilibili/FFmpeg.git/ 其他地方以此类推
编译ffmpeg
cd android/contrib/
./compile-ffmpeg.sh clean //清除历史ffmpeg下载文档
./compile-ffmpeg.sh all //下载所有cpu类型的支持库
出现问题make: not found
解决:sudo apt-get install make
出现问题nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
解决:sudo apt-get install yasm
分析:yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。 如果不需要yasm也可以 ./configure --disable-x86asm 下载ffmpeg git clone https://git.ffmpeg.org/ffmpeg.git
编译so
cd ..
./compile-ijk.sh all
编译结束
7、生成文件目录
如果./compile-ijk.sh不带all,只会编译arm-v7a的。 在android/ijkplayer/目录,各种芯片目录下会生成对应的三个.so,(分别在ijkplayer-arm64、ijkplayer-armv5、ijkplayer-armv7a、ijkplayer-x86、ijkplayer-x86_64这些项目的src/main/libs/对应的名称 目录下分别生成libijkffmpeg.so、libijkplayer.so、libijksdl.so这三个so文件)。
8、修改
修改ffmpeg版本, 在init-android.sh 中IJK_FFMPEG_COMMIT=ff3.4--xx--xx
./init-android.sh
修改流程化脚本编译
要在ijkplayer源码根目录config文件夹下module-lite-hevc.sh文件中加上要支持的编码格式,比如添加支持mp2格式的音频编码格式
然后执行:
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
初始化openSSL和FFMPEG,这里会同步下载对应的代码,可能会比较耗时
./init-android-openssl.sh
./init-android.sh
编译 cd到android/contrib下,执行清除命令,然后编译需要的so,这里的all是生成所有版本的,如果只需要对应版本的,可以把all替换成armv7a等你需要的版本。编译需要一段时间
./compile-openssl.sh clean//清除
./compile-ffmpeg.sh clean//清除
./compile-openssl.sh all//编译
./compile-ffmpeg.sh all//编译
生成对应so 切换到android目录下,执行脚本就可以生成so啦
./compile-ijk.sh all
在自己项目中使用编译好的so
1.将编译好的so文件拷贝到自己项目中的jniLibs文件夹下
2.然后把ijkplayer-java拷贝过来当library库引用,配置build.gradle :apply plugin: 'com.android.library',并把多余文件删除
3.修改自己APP的build.gradle
ok~