ubuntu下编译ffmpeg的过程

后续一段时间准备音视频相关知识的学习,所以先编译ffmpeg做练习用.

以最新版本的android api 29, ndk21, ffmpeg4.2,编译ffmpeg库文件.

1,环境配置,

1)安装yasm,如果没有安装会报nasm not found的错误.

下载 http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

解压后,进入目录:cd yasm-1.3.0

执行配置 ./configure

编译 :make

安装 make install (这一步使用root权限)

2,ndk的配置,

1)下载 https://developer.android.google.cn/ndk/downloads/ 选择 linux版本的ndk

2)解压后,配置ndk环境

vim ~/.bashrc
# 在文件末尾添加
export NDKROOT=/home/**/ndk/android-ndk-r21
exprot PATH=$NDKROOT:$PATH
# 保存退出,更新一下环境变量
source ~/.bashrc

或者配置 ~/.profile文件,功能是类似的.

.bashrc和.profile这两种配置环境参数的区别,大概时profile是以login方式进入bash环境运行的,意思是要用户登录才行;

bashrc是交互式non-login方式进入bash运行,用户可以不登录,只要以用户身份运行就会读取这个文件.

配好环境,执行./ndk-build 不提示命令找不到就OK了.

3, 下载ffmpeg源码包,因为ubuntu从github clone太慢,还是从官网下载较好

http://www.ffmpeg.org/download.html

下载后解压就OK了

4,编译共享库

创建.sh脚本文件:build_bash.sh

#!/bin/bash
#这里NDK路径路径改成自己的,
#交叉编译的工具链指向NDK目录下的位置,改成自己的
NDK=/home/linjw/Android/Sdk/ndk/21.0.6113669
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
API=29

function build_android
{
echo "Compiling FFmpeg for $CPU"
#configure的目录根据ffmpeg解压路径选择.
./ffmpeg-4.2.2/configure \
--prefix=$PREFIX \
--disable-neon \
--disable-hwaccels \
--disable-gpl \
--disable-postproc \
--enable-static \
--disable-shared \
--enable-jni \
--disable-mediacodec \
--disable-decoder=h264_mediacodec \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC
--cxx=$CXX--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \

$ADDITIONAL_CONFIGURE_FLAG
sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h

make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

#x86_64
ARCH=x86_64
CPU=x86-64
CC=$TOOLCHAIN/bin/x86_64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/x86_64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android
#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android

环境配置好,脚本写好,整个编译过程还是很顺利的,这里只针对cpu架构armv7-a,armv8-a,x86-64编译共享库.

编译完成后,会在你执行bash脚本的目录下生成android文件下,里面就是完成编译的共享库,及头文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值