编译iOS系统可用的FFmpeg

在进行编译之前,需要做一些准备工作安装必备文件:

1  安装 gas-preprocessor

FFmpeg-iOS-build-script 自动编译脚本需要使用到 gas-preprocessor .

执行

sudo git clone https://github.com/bigsen/gas-preprocessor.git  /usr/local/bin/gas
sudo cp /usr/local/bin/gas/gas-preprocessor.pl /usr/local/bin/gas-preprocessor.pl
sudo chmod 777 /usr/local/bin/gas-preprocessor.pl
sudo rm -rf /usr/local/bin/gas/

2   安装 yams

brew install yams

3   下载编译脚本

git clone https://github.com/kewlbear/FFmpeg-iOS-build-script.git

4 执行脚本

cd 到 FFmpeg-iOS-build-script目录

cd FFmpeg-iOS-build-script

./build-ffmpeg.sh

耐心等待,此脚本会自动下载脚本中对应的FFmpeg 版本,然后编译,最后将生成的库放到FFmpeg-IOS目录中。

脚本如下:

#!/bin/sh# ffmpeg版本
FF_VERSION="4.3.6"
#FF_VERSION="snapshot-git"
if [[ $FFMPEG_VERSION != "" ]]; thenFF_VERSION=$FFMPEG_VERSION
fi
SOURCE="ffmpeg-$FF_VERSION"
FAT="FFmpeg-iOS"SCRATCH="scratch"
# must be an absolute path
THIN=`pwd`/"thin"# absolute path to x264 library
#X264=`pwd`/fat-x264#FDK_AAC=`pwd`/../fdk-aac-build-script-for-iOS/fdk-aac-iosCONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \--disable-doc --enable-pic"if [ "$X264" ]
thenCONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264"
fiif [ "$FDK_AAC" ]
thenCONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-libfdk-aac --enable-nonfree"
fi# avresample
#CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-avresample"ARCHS="arm64 armv7 x86_64 i386"COMPILE="y"
LIPO="y"DEPLOYMENT_TARGET="10.0"if [ "$*" ]
thenif [ "$*" = "lipo" ]then# skip compileCOMPILE=elseARCHS="$*"if [ $# -eq 1 ]then# skip lipoLIPO=fifi
fiif [ "$COMPILE" ]
thenif [ ! `which yasm` ]thenecho 'Yasm not found'if [ ! `which brew` ]thenecho 'Homebrew not found. Trying to install...'ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \|| exit 1fiecho 'Trying to install Yasm...'brew install yasm || exit 1fiif [ ! `which gas-preprocessor.pl` ]thenecho 'gas-preprocessor.pl not found. Trying to install...'(curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \-o /usr/local/bin/gas-preprocessor.pl \&& chmod +x /usr/local/bin/gas-preprocessor.pl) \|| exit 1fiif [ ! -r $SOURCE ]thenecho 'FFmpeg source not found. Trying to download...'curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj \|| exit 1fiCWD=`pwd`for ARCH in $ARCHSdoecho "building $ARCH..."mkdir -p "$SCRATCH/$ARCH"cd "$SCRATCH/$ARCH"CFLAGS="-arch $ARCH"if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]thenPLATFORM="iPhoneSimulator"CFLAGS="$CFLAGS -mios-simulator-version-min=$DEPLOYMENT_TARGET"elsePLATFORM="iPhoneOS"CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode"if [ "$ARCH" = "arm64" ]thenEXPORT="GASPP_FIX_XCODE5=1"fifiXCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`CC="xcrun -sdk $XCRUN_SDK clang"# force "configure" to use "gas-preprocessor.pl" (FFmpeg 3.3)if [ "$ARCH" = "arm64" ]thenAS="gas-preprocessor.pl -arch aarch64 -- $CC"elseAS="gas-preprocessor.pl -- $CC"fiCXXFLAGS="$CFLAGS"LDFLAGS="$CFLAGS"if [ "$X264" ]thenCFLAGS="$CFLAGS -I$X264/include"LDFLAGS="$LDFLAGS -L$X264/lib"fiif [ "$FDK_AAC" ]thenCFLAGS="$CFLAGS -I$FDK_AAC/include"LDFLAGS="$LDFLAGS -L$FDK_AAC/lib"fiTMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \--target-os=darwin \--arch=$ARCH \--cc="$CC" \--as="$AS" \$CONFIGURE_FLAGS \--extra-cflags="$CFLAGS" \--extra-ldflags="$LDFLAGS" \--prefix="$THIN/$ARCH" \|| exit 1make -j4 install $EXPORT || exit 1cd $CWDdone
fiif [ "$LIPO" ]
thenecho "building fat binaries..."mkdir -p $FAT/libset - $ARCHSCWD=`pwd`cd $THIN/$1/libfor LIB in *.adocd $CWDecho lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB 1>&2lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB || exit 1donecd $CWDcp -rf $THIN/$1/include $FAT
fiecho Done

这里使用的是4.3.6版本,目前最新版本已经更新到6.0+

在ffmpeg源码目录下,终端执行 ./configure --help可用查看全部参数。根据自己需要可以修改脚本中对应的编译参数。

最新版编译报错问题

 FFmpeg-5.0以上编译,报audiotoolbox错误

src/libavdevice/audiotoolbox.m:78:5: error: unknown type name 'AudioDeviceID'; did you mean 'AudioFileID'?
    AudioDeviceID *devices;
    ^~~~~~~~~~~~~
    AudioFileID
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.2.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/AudioFile.h:197:35: note: 'AudioFileID' declared here
typedef struct OpaqueAudioFileID        *AudioFileID;
                                         ^
src/libavdevice/audiotoolbox.m:84:5: error: use of undeclared identifier 'AudioObjectPropertyAddress'
    AudioObjectPropertyAddress prop;

audiotoolbox 是对音频的硬编解码库。可以在 build-ffmpeg.sh 中的在CONFIGURE_FLAGS 后面字符串中加入: --disable-audiotoolbox 字符串就可以解决


CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \--disable-doc --enable-pic --disable-audiotoolbox"

另外注意:FFmpeg5.0以上的编译最低支持的系统版本是iOS 13.0。而且iOS 13.0以后不再支持i386架构,所以编译时要去掉 i386架构。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT会取代搜索引擎吗?BingChat、GoogleBard与ChatGPT区别

目前暂时不会,ChatGPT为代表的聊天机器人很可能会直接集成到搜索中,而不是取代它。微软已经通过Bing Chat和Bing做到了这一点,它将“聊天”选项卡直接放入Bing搜索的菜单中。Google、百度也分别开始尝试通过其AI生成技术将Google Bard、文心一…

创建好的VMware虚拟机如何连接上外网?MobaX和XShell如何连接虚拟机

配置虚拟机网卡 首先点击VMware菜单栏,编辑-虚拟网络编辑器-更改设置 选择VMnet8-NAT设置,并记住子网IP之后有用 记住网关IP 修改实际创建的虚拟机网卡 修改设置,vi /etc/sysconfig/network-scripts/ifcfg-ens32 修改前: 修…

FineBI 人力资源 专题

此处使用FineBI处理人力资源数据,数据来源于HR_database数据文件,将此文件拷贝到安装目录下 然后配置数据库连接 在【公共数据】中新建一个文件夹,并将之前数据库中需要用到的表放入此处,更新数据。显示如下。 这时候首先要建立…

PCI 简易通讯控制器有黄色感叹号

一、问题描述 设备管理器中,其他设备中显示 “PCI 简易通讯控制器”驱动未安装,显示黄色感叹号: 二、原因分析 右键该驱动,查看属性ID,显示为: PCI \ VEN_8086&DEV_1C3A&SUBSYS…

react-virtualized可视化区域渲染的使用

介绍 github地址:https://github.com/bvaughn/react-virtualized 实例网址:react-virtualized如果体积太大,可以参考用react-window。 使用 安装: yarn add react-virtualized。在项目入口文件index.js中导入样式文件&#xff…

集合工具类 Collections:提升集合操作效率

文章目录 多元素添加:addAll 方法随机置换:shuffle 方法自定义对象排序:sort 方法总结 在Java的集合框架中,Collections 是一个包含了许多操作集合的静态方法的工具类。通过使用 Collections 类提供的方法,我们能够更加…

FineReport 使用汇总(不定期更新)

1,下载地址 免费下载FineReport - FineReport报表官网 这里注意 2,后台统计 sql 还是需要自己写 就会有数据 而直接查询表, 没有数据 不过,可能是我不会用。还需要再研究。

事务,不只ACID | 京东物流技术团队

1. 什么是事务? 应用在运行时可能会发生数据库、硬件的故障,应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题,为了提高应用的可靠性和数据的一致性,事务应运而生。 从概念上讲,事务…

用C语言高效地打印杨辉三角

假设杨辉三角的通项公式为a(n),则打印形式如下: 然而我们知道,它应该是这样的: 三角形两边的值都为1,且每个元素的值都为该元素正上方和其正上方前面的元素的值之和。 为了实现这个代码,我们需要知道每行首…

最新SQLMap进阶技术

点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 五折购买链接:u.jd.com/3ibjeF6 SQLMap进阶:参数讲解 (1)--level 5:探测等级。 参数“--level 5”指需…

数据库签名的那些事儿

写在前面,关于签名的应用场景 除了我们后端经常使用的接口签名来校验数据这些常见的场景,对于数据安全性要求比较严格的业务来说,大部分落库的核心数据 也都需要签名,为啥? 因为怕数据库的数据被篡改数据或者被攻击了&#xff0c…

vue2.7如何使用vue-i18n

版本: vue:2.7.0 vue-i18n:8.28.2 一、下载 npm i vue-i18n8.28.2二、新建 新建一个文件,例如:lang,项目结构如下: index.js: import Vue from vue import VueI18n from vue-i18n…

Go Windows下开发环境配置(图文)

Go Windows下开发环境配置 下载 安装 点击下载的安装包进行安装。安装路径可以选择到自己的目录。 环境变量配置 GOROOT:(指定到安装目录下) GOPATH:(是工作空间) path:在安装时已经添加了…

go-admin 使用开发

在项目中使用redis 作为数据缓存:首先引入该包 “github.com/go-redis/redis/v8” client : redis.NewClient(&redis.Options{Addr: config.QueueConfig.Redis.Addr, // Redis 服务器地址Password: config.QueueConfig.Redis.Password, // Redis 密码&…

UNIX 系统概要

UNIX 家族UNIX 家谱家族后起之秀 LinuxUNIX vs LinuxUNIX/Linux 应用领域 UNIX 操作系统诞生与发展UNIX 操作系统概要内核常驻模块shell虚拟计算机特性 其他操作系统 LinuxRichard StallmanGNU 项目FSF 组织GPL 协议Linus Torvalds UNIX 家族 有人说,这个世界上只有…

网络安全设备及部署

什么是等保定级? 之前了解了下等保定级,接下里做更加深入的探讨 文章目录 一、网路安全大事件1.1 震网病毒1.2 海康威视弱口令1.3 物联网Mirai病毒1.4 专网 黑天安 事件1.5 乌克兰停电1.6 委内瑞拉电网1.7 棱镜门事件1.8 熊猫烧香 二、法律法规解读三、安…

OpenCV 中的光流 (C++/Python)

什么是光流? 光流是一项视频中两个连续帧之间每像素运动估计的任务。基本上,光流任务意味着计算像素的位移矢量作为两个相邻图像之间的对象位移差。光流的主要思想是估计物体由其运动或相机运动引起的位移矢量。 理论基础 假设我们有一个灰度图像——具有像素强度的矩阵。我…

【知网检索稳定】第五届经济管理与文化产业国际学术会议(ICEMCI 2023)

抓住数字经济的发展机遇,推动当前文化旅游产业与经济的深度融合才能不断推进经济大格局。第五届经济管理与文化产业国际学术会议(ICEMCI 2023)将继续围绕“经济管理”与“文化产业”两大研究领域展开讨论,旨在为相关研究方向的专家…

Talk | 清华大学交叉信息研究院助理教授许华哲:具身控制中的泛化能力

本期为TechBeat人工智能社区第520期线上Talk! 北京时间8月9日(周三)20:00,清华大学交叉信息研究院助理教授—许华哲的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “具身控制中的泛化能力”,从具身控制中视觉外…

手机app测试

一、安装、卸载、更新、运行 1.安装、卸载 应用是否可以正常安装(命令行安装;apk/ipa安装包安装)(有网,无网是否都正常)卸载过程中出现死机,断电,重启等意外的情况&…