ffmpeg - 编译 macOS app 使用的库
一、使用 git 安装 ffmpeg, 编译 macOS 使用的库
1、Git 下载代码
$ git clone https://git.ffmpeg.org/ffmpeg.git
2、配置 ./configure
选项
这个要注意需要设置对macOS最低版本的要求,否则是默认当前本机的最新系统如,这样的话在使用库的时候,如果是APP要运行在10.11及之下的系统时候,就会报错。
$ ./configure --target-os=darwin --enable-static --enable-swscale --enable-nonfree --enable-gpl --enable-version3 --enable-nonfree --disable-programs --libdir=/ffmpegbuild/lib --incdir=/ffmpegbuild/include --enable-shared --disable-x86asm --extra-cflags=-mmacosx-version-min=10.11 --extra-ldflags=-mmacosx-version-min=10.11
报错添加 --disable-x86asm
选项就好
$ nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
3、执行编译和安装
$ make && sudo make install
在根目录下的 /ffmpegbuild
目录中,就是编译好的头文件和库文件,包括静态库和动态库。
iOS 也可以直接使用 homebrew 安装 ffmpeg,然后使用脚本来编译。
如脚本:https://github.com/kewlbear/FFmpeg-iOS-build-script
二、集成到项目
1、将 /ffmpegbuild
中的的两个文件,拖到工程下。
2、引入头文件
#import "avformat.h"
#import "avcodec.h"
#import "swscale.h"
#import "avutil.h"
#import "swresample.h"
#import "avdevice.h"
3、项目添加 Header Search Path
内容参考你的 Library Search Path, 将最后的 lib 地址改为 include 即可。比如我的是:
$(PROJECT_DIR)/ffmpeglib/include
否则编译可能报错: 'libavformat/avformat.h' file not found
4、测试代码
[self openInput:@"/Users/sysit/Desktop/voez.mp4"];
- (BOOL)openInput:(NSString *)path
{
AVFormatContext * formatCtx = NULL;
formatCtx = avformat_alloc_context();
if (!formatCtx) {
NSLog(@"打开文件失败");
return NO;
}
if (avformat_open_input(&formatCtx, [path cStringUsingEncoding:NSUTF8StringEncoding], NULL, NULL) < 0) {
if (formatCtx) {
avformat_free_context(formatCtx);
}
NSLog(@"打开文件失败");
return NO;
}
if (avformat_find_stream_info(formatCtx, NULL) < 0) {
avformat_close_input(&formatCtx);
NSLog(@"无法获取流信息");
return NO;
}
NSLog(@"获取到信息");
av_dump_format(formatCtx, 0, [path.lastPathComponent cStringUsingEncoding:NSUTF8StringEncoding], false);
// self.formatCtx = formatCtx;
return YES;
}
三、报错
1、Definition of type 'AVMediaType' conflicts with typedef of the same name
AVMediaType 和 AVFoundation.framework 里的一个定义重复,建议改为 FFAVMediaType。
2、Undefined symbols for architecture x86_64:
解决方法:引入时添加 extern "C"
:
extern "C" {
#import <libavformat/avformat.h>
#import <libavcodec/avcodec.h>
#import <libswscale/swscale.h>
#import <libavutil/avutil.h>
#import <libswresample/swresample.h>
#import <libavdevice/avdevice.h>
#import <libavfilter/avfilter.h>
}
上一篇: 情绪低落 抑郁症前兆十大症状表现
下一篇: 女人下厨易患肺癌 9种食物帮助防肺癌
推荐阅读
-
nano pi neo2 上Ubuntu-core自行编译ffmpeg c库使用Ubuntu 16.04
-
如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)
-
Ubuntu下编译android所需ffmpeg的so库
-
windows下使用Visual Studio编译可以调试的FFmpeg
-
使用android studio开发工具编译GBK转换三方库iconv的方法
-
ffmpeg - 编译 macOS app 使用的库
-
macOS下如何编译FFmpeg-for-macOS-APP
-
MACOS 编译FFMPEG库
-
使用CMake编译时出现动态链接库错误no version information available的解决方案
-
Qt项目中使用Android ndk编译 armeabi-v7可用的protobuf v3.12.3 静态库