配置编译环境
1.配置NDK,SDK,JDK环境
①NDK使用android-ndk-r12b-linux-x86_64.zip版本(安卓官方可找到各个旧版本的NDK文件)
下载地址:https://developer.android.com/ndk/downloads/older_releases#ndk-12b-downloads
②SDK使用android-sdk_r24.4.1-linux.tgz版本
下载地址:http://tools.android-studio.org/index.php/sdk/
③JDK使用openjdk-16.0.1_linux-x64_bin.tar.gz版本
wget https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
unzip android-ndk-r13b-linux-x86_64.zipwget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -xvf android-sdk_r24.4.1-linux.tgzwget https://download.java.net/java/GA/jdk16.0.1/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-16.0.1_linux-x64_bin.tar.gz
tar -xvf openjdk-16.0.1_linux-x64_bin.tar.gz jdk-16.0.1
把以上文件下载到本地后全部进行解压,输入命令 sudo vim /etc/profile 配置环境变量
JAVA_HOME=(解压根目录)/jdk-16.0.1
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export JRE_HOME
export PATH
export CLASSPATH
#android sdk
export ANDROID_HOME=(解压根目录)/android-sdk-linux
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH
#ndk
export ANDROID_NDK=(解压根目录)/android-ndk-r12b
export PATH=$ANDROID_NDK:$PATH
输入上面的代码,配置全局环境变量(请根据文件解压目录进行调整代码),输入:wq保存并退出,输入 source /etc/profile 使配置的环境生效
2.安装其他所需软件
使用apt-get install安装yasm,make,gcc,git, python(git推荐使用源码编译安装)
sudo apt-get install yasm make gcc git python
3.使用git拉取ijkplayer源码
使用命令直接拉取源码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
耐心等待代码下载完毕
github墙了的话,可以试试gitee
git clone https://gitee.com/greenleaf07/ijkplayer.git ijkplayer-android
我把脚本里的github全部替换成了gitee
4.开始编译
①cd进去上一步下载的源码文件夹内
②执行以下命令
cd ijkplayer-android
git checkout -B latest k0.8.8
cd config
rm module.sh
ln -s module-default.sh module.sh //编译的是完整版
echo export COMMON_FF_CFG_FLAGS=\"\$COMMON_FF_CFG_FLAGS --enable-openssl\" >> module.sh
在末尾加入export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"
cd ..
./init-android.sh
./init-android-openssl.sh //如需支持https连接播放视频,请执行此步
*在执行./init-android.sh与./init-android-openssl.sh时请注意,确保脚本在执行过程中已经把全部文件下载下来,否则会影响后续所有编译步骤
③继续执行以下命令
cd android/contrib
./compile-openssl.sh clean
//请耐心等待编译完成
./compile-openssl.sh all //编译OpenSSL
./compile-ffmpeg.sh clean
//请耐心等待编译完成
./compile-ffmpeg.sh all //编译ffmpeg,如果报错:fatal error: linux/perf_event.h: No such file or directory,打开第6步中的module.sh,在末尾加入 export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
cd ..
./compile-ijk.sh all //编译生成各CPU架构的so,如果不加 all 默认只生成 armv7a 架构的 so,编译指定架构的so:compile-ijk.sh armv7a,具体参考 .sh 文件中的 Usage
④编译完成后,各平台的动态库在以下目录
(解压根目录)\android\ijkplayer\ijkplayer-(armv5/armv7a/arm64/x86/x86_64)\src\main\libs
请直接复制该目录下的整个文件夹进行使用
完整脚本
git clone https://gitee.com/greenleaf07/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8
cd config
rm module.sh
ln -s module-default.sh module.sh
echo export COMMON_FF_CFG_FLAGS=\"\$COMMON_FF_CFG_FLAGS --enable-openssl\" >> module.shcd ..
./init-android.sh
./init-android-openssl.sh //如需支持https连接播放视频,请执行此步cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
cd ..
./compile-ijk.sh all
//编译生成各CPU架构的so,如果不加 all 默认只生成 armv7a 架构的 so,编译指定架构的so:compile-ijk.sh armv7a,
//具体参考 .sh 文件中的 Usage
3. ffmpeg-armv5/toolchain/touch': No such file or directory
Toolchain installed to /home/zinyan/ijkplayer/android/contrib/build/ffmpeg-armv5/toolchain.
touch: cannot touch '/home/zinyan/ijkplayer/android/contrib/build/ffmpeg-armv5/toolchain/touch': No such file or directory
找不到armv5 的toolchain/touch 文件和目录。需要我们安装sudo apt-get install python 。然后再尝试。
sudo apt-get install python
因为在这一步的时候,是通过python 将ffmpeg的库采用ndk 串联成一个工具链。
其实缺少的就是toolchain(工具链)。 并不是说的每个指令集下面缺乏toolchain文件夹让我们主动创建的问题。
4. check ffmpeg env 错误 bad variable name
错误如下:你也许不是出现在NVIDIA 也许出现在在Common等等。
或出现在do-compile-openssl.sh脚本中
解决方法很简单:sudo dpkg-reconfigure dash 然后在弹出的说明中,选择NO 就可以了。
sudo dpkg-reconfigure dash