码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Windows ffmpeg生成安卓全平台so


    文章目录

    • 前言
    • 一、搭建环境
      • 1、下载NDK
      • 2、安装msys2
        • (1)运行msys2
        • (2)安装必要工具
      • 3、下载ffmpeg源码
    • 二、生成
      • 1、编写shell
        • (1)模板
        • (2)设置TOOLCHAIN
        • (3)设置API
      • 2、修改configure
      • 3、使用msys2生成
        • (1)打开msys2
        • (2)cd源码目录
        • (3)调用shell
      • 3、找到安装目录
    • 三、生成好的包
    • 总结


    前言

    做安卓开发的时候,需要实现拉流渲染视频之类的功能,使用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。

  • 相关阅读:
    Google Earth Engine ——瑞士(SWISSIMAGE 10 cm RGB imagery)超高分辨率航空影像数据集(0.1m分辨率)
    PAT 1027 Colors in Mars
    大学生网页制作期末作业——html+css+javascript+jquery旅游官网6页 html大学生网站开发实践作业 web网页设计实例作业
    WebStorm的Vue工程如何用Bito插件进行单元测试
    尚硅谷Git笔记
    Go语言 并发与通道
    【线性代数基础进阶】特征值和特征向量-补充+练习
    Vue3+Elementplus引入面包屑功能
    leetcode二叉树相关模板
    Vue08/Vue 生命周期钩子函数( Vue生命周期11个阶段 )应用场景
  • 原文地址:https://blog.csdn.net/u013113678/article/details/125435571
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号