banner
jzman

jzman

Coding、思考、自觉。
github

如何在Ubuntu下编译ijkplayer

PS:无论做什么事,实践最重要,亲身实践积累的经验,不是随便阅读一篇技术文章所能比拟的。

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

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

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

准备#

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

image

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

image

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

image

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

image

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

image

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

image

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

image

此外还需下载好 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 工程,如下图所示:

image

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

image

运行 ijkplayer#

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

image

ijkPlayer 的编译到此结束,有疑问可评论。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。