前言:用于记录学习过程,最近学习ffmepge,本文主要记录在Mac环境下编译ffmpeg,获取FFmpeg-iOS
准备工作:
下载需要编译的ffmpeg脚本: FFmpeg-iOS-build-script
在描述文档中可以看到需要准备条件:
1.下载gas-preprocessor
2.yasm 1.2.0
1.gas-preprocessor
1)将文件夹中的gas-preprocessor.pl复制到->/usr/local/bin
2)给该文件相对应读写的权限
chmod 777 gas-preprocessor.pl
2.yasm
这里推荐brew安装,这里记录如何安装 Homebrewhttps://brew.sh/
brew install yasm
3.执行脚本
安装完成yasm之后,进入刚刚下载的FFmpeg-iOS-build-script文件夹中,执行脚本,这个过程会执行很久。。。
./build-ffmpeg.sh
4.使用
1)执行完成之后会当前文件夹中,会生成想要的FFmpeg-iOS文件
2.)将FFmpeg-iOS中的lib拖入到项目中
3)在Targets -> General ->Build Setting -> Header Search Paths 中添加
$(PROJECT_DIR)/include
4)在项目中引用
#include <libavformat/avformat.h>
#include <libavutil/time.h>
#include <libavutil/mathematics.h>
#include <libavfilter/avfilter.h>
遇到的问题
1.执行的时候报错,会显示找不到这个执行文件
错误:./build-ffmpeg.sh: line 135: /Users/***/Desktop/直播/文档/FFmpeg-iOS-build-script-master: No such file or directory
原因:下载了两个FFmpeg-iOS-build-script,解压的时候文件夹的实际名称为FFmpeg-iOS-build-script-master 2,所以一直报错该文件夹内没有./build-ffmpeg.sh文件
解决:将文件夹名称中的2去掉,就可以执行成功
2.将需要的库拖入到项目中之后,bulid报错:
Undefined symbols for architecture arm64:
"_BZ2_bzDecompressInit", referenced from:
_matroska_decode_buffer in libavformat.a(matroskadec.o)
"_iconv", referenced from:
_avcodec_decode_subtitle2 in libavcodec.a(decode.o)
"_BZ2_bzDecompress", referenced from:
_matroska_decode_buffer in libavformat.a(matroskadec.o)
"_BZ2_bzDecompressEnd", referenced from:
_matroska_decode_buffer in libavformat.a(matroskadec.o)
"_iconv_open", referenced from:
_avcodec_open2 in libavcodec.a(utils.o)
_avcodec_decode_subtitle2 in libavcodec.a(decode.o)
"_iconv_close", referenced from:
_avcodec_open2 in libavcodec.a(utils.o)
_avcodec_decode_subtitle2 in libavcodec.a(decode.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决:在Targets -> General -->Linked Frameworks and Libraries 中,添加
libbz2.tbd 、libiconv.tbd