当前位置: 首页 > article >正文

编译Android平台使用的FFmpeg库

目录

前言

一、编译环境

二、搭建环境

1.安装MSYS2

2.更新系统包

2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe)

2.2 更新所有软件包到最新版本

2.3 安装必要的工具和库。

3. 克隆FFmpeg源码

4. 配置编译选项

5. 执行编译

总结

前言

记录学习编译android平台的ffmpeg库过程。本次介绍只是编译arm64-v8a 

一、编译环境

环境:Win10 + MSYS2

NDK版本: 25.1.8937393

FFmpeg版本:ffmpeg-7.1

二、搭建环境

1.安装MSYS2

请前往MSYS2官方网站下载并按照说明进行安装。

安装一直下一步就可以了。默认安装路径:C:\msys64

2.更新系统包

        2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe

在MINGW64 终端下windows的C盘和D盘的盘符显示的/c/ 和/d/, 可以用df -h命令查看(使用命令查看的时候,需要等待一会):

        2.2 更新所有软件包到最新版本

pacman -Syu

如果提示需要重启shell,请按指示操作,并再次运行上述命令直到不再提示更新。

        2.3 安装必要的工具和库

pacman -S base-devel mingw-w64-x86_64-toolchain git

3. 克隆FFmpeg源码

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg

在电脑上的路径:C:\msys64\home\Administrator\ffmpeg

4. 配置编译选项

在ffmpeg下面创建build_android.sh文件。文件内容如下:

/d/Android/SDK/ndk/25.1.8937393  为ndk为我电脑上的位置。其他人使用的时候可以把这个提取出来做一个变量修改一下。我懒的改😀😀

#!/bin/bash


#build arm64-v8a 
export CC="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang"
export CXX="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang++"
export AR="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-ar"
export AS="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-as"
export NM="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-nm"
export STRIP="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-strip"
export RANLIB="/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-ranlib"

echo "CC is set to: $CC"
echo "CXX is set to: $CXX"
echo "AR is set to: $AR"
echo "AS is set to: $AS"
echo "NM is set to: $NM"
echo "STRIP is set to: $STRIP"
echo "RANLIB is set to: $RANLIB"
$CC --version

./configure \
    --prefix=android/arm64-v8a \
    --target-os=android \
    --arch=aarch64 \
    --cpu=armv8-a \
    --sysroot=/d/Android/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/sysroot \
    --enable-cross-compile \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-symver \
    --disable-programs \
    --disable-everything \
    --enable-decoder=libx264,h264,hevc,aac \
    --enable-parser=h264,hevc,aac \
    --enable-demuxer=mov \
	--enable-muxer=rtsp \
	--enable-protocol=file,rtsp,rtmp \
    --extra-cflags="-Os -fPIC" \
    --extra-ldflags="" \
    --cc="$CC" \
    --cxx="$CXX" \
	--strip="$STRIP"

make clean
make -j$(nproc)
make install

里面有好多的echo输出,加这个是刚开始编译的时候一直失败,后来测试发现export的环境变量失败了。

configure 下面的参数还是很多的。不一一介绍了,需要的同学可以自己搜索一下。可能主要是编码和解码格式的支持,参数是--enable-decoder , --enable-parser

5. 执行编译

给脚本赋予可执行权限并运行

chmod +x build_android.sh
./build_android.sh

编译成功后,直接显示这样:

在ffmpeg目录下会生成一个android文件夹,里面有arm64-v8a

如果有需要的同学也可以直接下载哈

下载地址


总结

以上就是本次要讲的内容。


http://www.kler.cn/a/517066.html

相关文章:

  • ubuntu调用图形化网络测试工具
  • pdf与ofd的区别详细对比
  • 【Flutter】platform_view之AppKitView在哪个flutter版本添加的
  • 高效沟通驱动LabVIEW项目成功
  • 【算法】经典博弈论问题——巴什博弈 python
  • .Net Core微服务入门全纪录(四)——Ocelot-API网关(上)
  • 【玩转全栈】----YOLO8训练自己的模型并应用
  • 6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)
  • (详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源
  • Redis线上阻塞要如何排查
  • Java面向对象专题
  • 【leetcode100】二叉搜索树中第k小的元素
  • python远程获取数据库中的相关数据并存储至json文件
  • MySQL中的关联查询:方式、区别及示例
  • Python 爬虫——爬取Web页面图片
  • 03垃圾回收篇(D3_垃圾收集器的选择及相关参数)
  • 2K高刷电竞显示器怎么选?
  • 记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
  • Django 静态文件配置实战指南
  • <keep-alive> <component ></component> </keep-alive>缓存的组件实现组件,实现组件切换时每次都执行指定方法
  • 详解Redis的Zset类型及相关命令
  • AviatorScript用法
  • 解决docker: ‘buildx‘ is not a docker command.
  • Golang初识
  • vue3中为什么引入setup,引入setup是为了解决什么问题,setup的执行时机是什么?返回值是什么
  • linux数据压缩