Ubuntu 编译ffmpeg so动态库
2022-01-14 本文已影响0人
Sky_Blue
一、编译的环境
- Ubuntu20.04.3 + NDK-r22版本 + Cmake 3.18.1版本 + ffmpeg-4.0.6
- Ubuntu20.04.3系统,是用VirtualBox安装的。
- VirtualBox百度就可以免费下载。
- Ubuntu20.04.3系统可以到,华为OS镜像免费下载:https://mirrors.huaweicloud.com/
- 不会用VirtualBox安装Ubuntu的自己百度。
二、NDK下载
- 下载目录(自己的就行):/home/lven/tool/
- 下载地址:wget https://dl.google.com/android/repository/android-ndk-r22-linux-x86_64.zip
备用版本:wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip - 解压:unzip android-ndk-r22-linux-x86_64.zip
三、Cmake 3.18.1安装
- 下载目录(自己的就行):/home/lven/tool/
- 下载地址:wget https://github.com.cnpmjs.org/Kitware/CMake/releases/download/v3.18.1/cmake-3.18.1-Linux-x86_64.tar.gz
- 解压:tar zxvf cmake-3.18.1-Linux-x86_64.tar.gz
- 配置软连接:ln -sf /home/lven/tool/cmake-3.18.1-Linux-x86_64/bin/* /usr/bin/
四、ffmpeg下载(下载目录自己定)
- ffmpeg所有下载地址:http://ffmpeg.org/releases 自己找到想编译的版本
- ffmpeg-4.0.2下载地址:wget http://ffmpeg.org/releases/ffmpeg-4.0.6.tar.bz2
- 解压:tar zxvf ffmpeg-4.0.6.tar.bz2
- cd到ffmpeg-4.0.6目录下创建编译解本 affmpegv7a.sh和affmpegv8a.sh
- 执行解本:sudo sh affmpegv7a.sh 或者 sudo sh affmpegv8a.sh
五、affmpegv7a.sh编译脚本
#!/bin/bash
## NDK路径,换成自己的路径,就改这里就行了,其它的看自己需求
NDK=/home/lven/tool/android-ndk-r22
API=21
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
## 输出路径
PRFIX="$(pwd)/android/armeabi-v7a"
ARCH=arm
CPU=armv7-a
V7ABI=armv7a-linux-androideabi
CC=$TOOLCHAIN/bin/$V7ABI$API-clang
CXX=$TOOLCHAIN/bin/$V7ABI$API-clang++
ARMABI=arm-linux-androideabi
CROSS_PREFIX=$TOOLCHAIN/bin/$ARMABI-
# --disable-indev=v4l2 # error
./configure \
--disable-asm \
--disable-programs \
--enable-shared \
--disable-static \
--enable-cross-compile \
--target-os=android \
--disable-indev=v4l2 \
--prefix=$PRFIX \
--arch=$ARCH \
--cpu=$CPU \
--sysroot=$SYSROOT \
--cross-prefix=$CROSS_PREFIX \
--cc=$CC \
--cxx=$CXX
make clean
make -j8
make install
- --disable-indev=v4l2 解决错误:libavdevice/v4l2.c:135:9: error: assigning to 'int (*)
- CROSS_PREFIX得用arm-linux-androideabi-
六、affmpegv8a.sh编译脚本
#!/bin/bash
## NDK路径,换成自己的路径,就改这里就行了,其它的看自己需求
NDK=/home/lven/tool/android-ndk-r22
API=21
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
## 输出路径
PRFIX="$(pwd)/android/arm64-v8a"
ARCH=arm64
CPU=armv8a
V8ABI=aarch64-linux-android
CC=$TOOLCHAIN/bin/$V8ABI$API-clang
CXX=$TOOLCHAIN/bin/$V8ABI$API-clang++
CROSS_PREFIX=$TOOLCHAIN/bin/$V8ABI-
# --disable-indev=v4l2 # error
./configure \
--disable-asm \
--disable-programs \
--enable-shared \
--disable-static \
--enable-cross-compile \
--target-os=android \
--disable-indev=v4l2 \
--prefix=$PRFIX \
--arch=$ARCH \
--cpu=$CPU \
--sysroot=$SYSROOT \
--cross-prefix=$CROSS_PREFIX \
--cc=$CC \
--cxx=$CXX
make clean
make -j8
make install
- 仔细看$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/bin下的编译工具类。
七、总结
- 本人就编译v7a和v8a版本,目前用v7a就够了。
- 编译时遇到很坑,上面解本是本人编译成功的解本,如果你编译不成功也正常。