如何正确编译ijkplayer

4,275 阅读3分钟

原文首发于微信公众号:躬行之,欢迎关注交流!

最近项目中可能需要视频播放,而且后期还可能要支持播放 rtsp 协议的视频,权衡了一下还是通过编译 B 站开源的 ijkplayer 吧,ijkplayer 是一个基于 ffmpeg 的轻量级的可在 Android 和 Ios 上使用的跨平台播放器,可以通过编译来实现更多格式的支持,可以说只要是 ffmpeg 支持的格式 ijkplayer 就支持。

刚开始使用 Cygwin 进行编译,但总是在生成 so 文件的时候出错,当然中间还有很多要踩的坑,于是决定使用 Ubuntu 环境编译 ijkplayer,在 Ubuntu 环境下编译时基本没有什么问题,编译过程如下:

  1. 准备
  2. 配置环境变量
  3. 安装必须组件
  4. 正式编译
  5. 运行ijkplayer

准备

安装 VMware 虚拟机并安装 Ubuntu 系统,安装完 VMware 之后创建虚拟机,选择典型安装模式,如下图所示:

然后点击下一步,选择已经下载的系统镜像,如下图所示:

正确选择后会显示出镜像信息,如我选用的是 Ubuntu 64 位 18.04 ,然后继续下一步,如下图所示:

填写用户名、密码等信息,点击下一步,如下图所示:

填写虚拟机名称以及虚拟机要安装的位置,点击下一步:

设置虚拟机磁盘大小,为了不降低磁盘性能选择将磁盘存储为单个文件,然后点击下一步,如下图所示:

Ubuntu 虚拟机到此创建完毕,点击完成,等待 Ubuntu 安装完成,输入设置的密码即可进入 Ubuntu 系统,如下图所示:

此外还需下载好 Linux 版本的的 Android SDK 和 NDK,这里选择的分别是 android-sdk_r24.4.1-linux.tgz 和 android-ndk-r10e-linux-x86_64.zip,下载后可以使用如下命令解压文件:

unzip xxx.zip
tar -xvf xxx.tgz

切记不要将 NDK 目录放在虚拟机的共享目录下,为保证编译顺利进行应将 NDK 目录放在 Ubuntu 的系统目录,也就是 /home/用户名 下面的目录。

配置环境变量

在 Ubuntu 下的 /home/用户名/ ,按 Ctrl+h 查看 .bashrc 文件并配置 SDK 和 NDK 环境变量,参考如下:

NDK=/home/jzman/android/android-ndk-r10e
export NDK
ADB=/home/jzman/android/android-sdk-linux/platform-tools
export ADB
# ANDROID_NDK和ANDROID_SDK路径
ANDROID_NDK=/home/jzman/android/android-ndk-r10e
export ANDROID_NDK
ANDROID_SDK=/home/jzman/android/android-sdk-linux
export ANDROID_SDK 
# 加入到PATH路径
PATH=${PATH}:${NDK}:${ADB}:${ANDROID_NDK}:${ANDROID_SDK}

配置完成后保存并关闭 .bashrc,打开 Terminal 输入 ndk-build -v 查看 ndk 是否配置成功,运行日志如下则配置成功:

jzman@ubuntu:~$ ndk-build -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu

安装必须组件

依次输入如下命令更新和安装 git、yasm 和 make ,

sudo apt-get update
sudo apt install git
sudo apt install yasm
sudo apt install make

使用 git --version 和 make -v 查看 git 和 make 工具是否安装成功,成功则显示对应版本号,参考如下:

jzman@ubuntu:~$ git --version
git version 2.17.1
jzman@ubuntu:~$ make -v
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
jzman@ubuntu:~$

正式编译

//clone ijkplayer源码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer
cd ijkplayer
git checkout -B latest k0.8.8
//使用更轻量的module-lite.sh
cd ijkplayer/config
rm module.sh
ln -s module-lite module.sh
//下载ffmpeg源码
cd ijkplayer
./init-android
//编译ffmpeg
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
//编译ijkplayer,生成so文件
cd ijkplayer/android
./compile-ijk.sh all

如果要支持 https,在编译时执行如下命令:

cd ijkplayer
./init-android-openssl.sh(支持https)
cd ijkplayer/android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all

编译成功之后会在 ijkplayer/android 下面生成对应的 Android 工程,如下图所示:

查看各个 abi 库中,如 ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/libs 下面是否生成对应的 so 文件,以 arm64 为例,如下图所示:

运行ijkplayer

使用 Android Studio 打开编译生成的 Android 工程,运行截图如下:

个人微信公众号:躬行之 ,可以关注一起交流学习.

在这里插入图片描述