C++ 1.FFmpeg-3.3.6 编译 Android 动态库 (ubuntu 18.04 , r14b)

C++ 1.FFmpeg-3.3.6 编译 Android 动态库 (ubuntu 18.04 , r14b)

qq群

编译环境

Linux 系统:

ubuntu18.04

NDK

ndk/android-ndk-r14b

FFmpeg

ffmpeg-3.3.6

ffmpeg 下载后的文件名

ffmpeg_3.3.6.orig.tar.xz

解压方式

tar xvJf ffmpeg_3.3.6.orig.tar.xz

在 root 权限下操作

编译
  • 进入ffmpeg目录,先修改 configure 文件
修改前
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
修改后
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

修改后执行 ./configure (如果编译失败,大多情况是复制粘贴格式问题)

  • 编写 Android 编译脚本

新建文件 build_android_all.sh

#!/bin/bash
export NDK_HOME=/home/build/workspace/hqq/vision/vision-app/ndk/android-ndk-r14b
export PLATFORM_VERSION=android-21
function build
{
        echo "start build ffmpeg for $ARCH"
        ./configure --target-os=linux \
        --prefix=$PREFIX --arch=$ARCH \
        --disable-doc \
        --enable-shared \
        --disable-static \
        --disable-yasm \
        --disable-asm \
        --disable-symver \
        --enable-gpl \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --cross-prefix=$CROSS_COMPILE \
        --enable-cross-compile \
        --sysroot=$SYSROOT \
        --enable-small \
        --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
        --extra-ldflags="$ADDI_LDFLAGS" \
        $ADDITIONAL_CONFIGURE_FLAG
        make clean
        make -j16
        make install
        echo "build ffmpeg for $ARCH finished"
}

#arm
ARCH=arm
ARCH_PREFIX=arm
CPU=armv7-a
PREFIX=$(pwd)/android_all/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/$ARCH_PREFIX-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/$ARCH_PREFIX-linux-androideabi-
ADDI_CFLAGS="-marm -march=$CPU"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build

#arm64
ARCH=arm64
ARCH_PREFIX=aarch64
CPU=armv8-a
PREFIX=$(pwd)/android_all/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/$ARCH_PREFIX-linux-android-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/$ARCH_PREFIX-linux-android-
ADDI_CFLAGS="-march=$CPU"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build

#x86
ARCH=x86
ARCH_PREFIX=x86-4.9
CPU=i686
PREFIX=$(pwd)/android_all/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/$ARCH_PREFIX/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/$CPU-linux-android-
ADDI_CFLAGS="-march=$CPU -mtune=intel -mssse3 -mfpmath=sse -m32"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build

#x86_64
ARCH=x86_64
ARCH_PREFIX=x86_64-4.9
CPU=x86-64
PREFIX=$(pwd)/android_all/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/$ARCH_PREFIX/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/x86_64-linux-android-
ADDI_CFLAGS="-march=$CPU -mtune=intel -msse4.2 -mpopcnt -m64"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build

#mips
ARCH=mips
ARCH_PREFIX=mipsel
#CPU=
PREFIX=$(pwd)/android_all/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/$ARCH_PREFIX-linux-android-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/$ARCH_PREFIX-linux-android-
ADDI_CFLAGS=""
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
#build

#mips64
ARCH=mips64
ARCH_PREFIX=mips64el
#CPU=
PREFIX=$(pwd)/android_all/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/$ARCH_PREFIX-linux-android-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/$ARCH_PREFIX-linux-android-
ADDI_CFLAGS=""
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
#build

执行 build_android_all.sh

可编译出 “armeabi-v7a”, “arm64-v8a”, “x86”, “x86_64”

如果编译失败,在打开文件粘贴时

:set ff #查看文件的格式会看到fileformat=dos 或者 fileformat=unix

:set ff=unix #设置为unix格式

:wq #保存退出

编译后文件

在目录下 android_all 文件夹下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

取带数字的 .so 库放到 Android 项目中

在这里插入图片描述

github lib 库

android_ffmpeg_lib
https://github.com/taxiao213/android_ffmpeg_lib

微信公众号 -->> 他晓 (欢迎加入)
公众号
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值