• Windows ffmpeg生成安卓全平台so



    前言

    做安卓开发的时候,需要实现拉流渲染视频之类的功能,使用ffmpeg比较方便。但是要生成ffmpeg的安卓库是有点麻烦的,需要使用ndk的工具链以及shell。相对来说在Linux上操作是比较容易的,其实Windows上生成也不是很难,shell是基本一致的。


    一、搭建环境

    1、下载NDK

    我们首先需要有NDK的工具链才能进行交叉编译,如果安装了AndroidSudio则找到NDK的目录即可。或者下载Windows版本的NDK:https://developer.android.google.cn/ndk/downloads/
    在这里插入图片描述

    2、安装msys2

    msys2是Windows的shell环境。下载地址:https://www.msys2.org/。下载完成后直接安装。安装完成后在C:\msys64找到msys2.exe并运行,进入控制台。

    (1)运行msys2

    在这里插入图片描述

    (2)安装必要工具

    在msys2中输入:

    pacman -S gcc make nasm yasm
    
    • 1

    在这里插入图片描述

    3、下载ffmpeg源码

    http://ffmpeg.org/download.html
    比如当前最新版本5.0.1如下图所所示:
    在这里插入图片描述


    二、生成

    1、编写shell

    新建一个build.sh的文件在ffmpeg目录中。添加如下内容:

    (1)模板

    #!/bin/bash
    #ndk工具链路径 -可配置
    TOOLCHAIN=C:/Users/xin/AppData/Local/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/windows-x86_64
    #ndk api版本 -可配置
    API=29
    SYSROOT=$TOOLCHAIN/sysroot
    function build_start() {
    make clean
    ./configure --target-os=android \
    --prefix=$PREFIX \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC \
    --cxx=$CXX \
    --cpu=$CPU \
    --strip=$TOOLCHAIN/bin/llvm-strip \
    --nm=$TOOLCHAIN/bin/llvm-nm \
    --enable-shared \
    --disable-static \
    --enable-gpl \
    --cross-prefix=$CROSS_PREFIX \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
    make -j8
    make install 
    }
    CPU=armv7-a
    ARCH=arm
    CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-
    CC=${CROSS_PREFIX}clang
    CXX=CC=${CROSS_PREFIX}clang++
    PREFIX=./android/${CPU}_${API}/
    OPTIMIZE_CFLAGS="-march=$CPU"
    build_start
    CPU=armv8-a
    ARCH=arm64	
    CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android$API-
    CC=${CROSS_PREFIX}clang
    CXX=CC=${CROSS_PREFIX}clang++
    PREFIX=./android/${CPU}_${API}/
    OPTIMIZE_CFLAGS="-march=$CPU"
    build_start
    CPU=x86
    ARCH=x86
    CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android$API-
    CC=${CROSS_PREFIX}clang
    CXX=CC=${CROSS_PREFIX}clang++
    PREFIX=./android/${CPU}_${API}/
    OPTIMIZE_CFLAGS="-march=i686"
    ADDITIONAL_CONFIGURE_FLAG=--disable-asm 
    build_start
    CPU=x86-64
    ARCH=x86_64
    CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android$API-
    CC=${CROSS_PREFIX}clang
    CXX=CC=${CROSS_PREFIX}clang++
    PREFIX=./android/${CPU}_${API}/
    OPTIMIZE_CFLAGS="-march=$CPU"
    build_start
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    (2)设置TOOLCHAIN

    参照模板的路径设置TOOLCHAIN,到windows-x86_64这一级目录。注意将反斜杠改为正斜杠。

    TOOLCHAIN=NDK TOOLCHAIN路径
    
    • 1

    (3)设置API

    根据需要设置API版本如:

    API=29
    
    • 1

    2、修改configure

    修改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)'
    
    • 1
    • 2
    • 3
    • 4

    将上述内容替换成如下内容。

    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
    SLIB_INSTALL_LINKS='$(SLIBNAME)'
    
    • 1
    • 2
    • 3
    • 4

    3、使用msys2生成

    打开msys2.exe。cd到ffmpeg源码目录

    (1)打开msys2

    在这里插入图片描述

    (2)cd源码目录

    直接cd到ffmpeg源码目录即可,需要注意加双反斜杠避免转义。比如

    cd D:\\ffmpeg-5.0.1
    
    • 1

    (3)调用shell

    ./build.sh
    
    • 1

    注:第一次生成出现如下报错是正常的,继续等待即可。
    在这里插入图片描述

    3、找到安装目录

    生成完成在ffmpeg源码目录的android文件夹下即可找到所有so
    在这里插入图片描述


    三、生成好的包

    已测试可用的生成好的包
    ffmpeg5.0.1安卓全平台so动态库


    总结

    总的来说在Windows上生成ffmpeg还是不难的,只是网上资料较少而且不齐全,导致容易生成失败甚至因为存在rm -rf导致整个磁盘被清空。最好的方式还是先在Linux生成成功后,再将方法移植到Windows。

  • 相关阅读:
    gcc编译介绍
    FastAPI 学习之路(二十)接口文档配置相关
    2022NEC全美经济挑战赛报名时间已出
    第十九章总结
    高内聚低耦合
    Django中Cookie和Session的使用
    Java版图形界面计算器
    ElasticSearch源码解析(二):ES的CharFilter、Tokenizer、TokenizerFilter
    Ubuntu系统上传文件的多种方法-断网上传-安装包上传-物联网开发维护
    C++核心编程--继承篇
  • 原文地址:https://blog.csdn.net/u013113678/article/details/125435571