添加Other link flagsgit
-ObjC: 这个flag告诉连接器把库中定义的Objective-C类和Category都加载进来。这样编译以后的app会变大(由于加载了其余的objc代码进来)。可是若是静态库中有类和category的话只有加入这个flag才行。github
-all_load: 这个flag是专门处理-ObjC的一个bug的。用了-ObjC之后,若是类库中只有category没有类的时候这些category仍是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制连接器把目标文件都加载进来,即便没有objc代码。-force_load在xcode3.2后可用。可是-force_load后面必须跟一个只想静态库的路径。xcode
注意:在本例中,-all_load是指将ffmpeg静态库注入动态库,不然若SDK中没有调用相关函数,编译出来的动态库则没法调用。bash
Enable Bitcode bitcode介绍app
若是项目中有支持 Bitcode,要么让第三方库支持 Bitcode;要么关闭 Bitcode 功能, ffmpeg中须要咱们关闭bitcode.ide
bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和连接。bitcode容许苹果在后期从新优化咱们程序的二进制文件,而不须要咱们从新提交一个新的版本到App store上。函数
由于咱们在项目中都是使用相似下面的代码导入FFmpegpost
#import "libavformat/avformat.h"
#import "libswscale/swscale.h"
#import "libavcodec/avcodec.h"
#import "libavutil/avutil.h"
#import "libswresample/swresample.h"
#import "libavresample/avresample.h"
#import "libavfilter/avfilter.h"
#import "libavdevice/avdevice.h"
复制代码
将ffmpeg相关的头文件夹拖入SDK header的Public文件中,建立引用便可测试
而后建立一个虚拟目录存放FFmpeg头文件,调整文件目录目录结构优化
最终,项目中目录结构以下图
ffmpeg中自己会依赖一些系统库,这一方面取决于你在编译FFmpeg源码时所打开的flag,如何开启的越多可能依赖的越多,而本例中仅仅该版本ffmpeg所依赖的系统库,因此,你编译出来仍然报错,须要本身灵活添加系统库或其余依赖的第三方库
PS:有的版本或flag标志开启后可能须要苹果的VideoToolbox....
此时可以使用下面指令可进入Framework中查看当前Framework是否为动态库 $ file 二进制文件名
在Header Search Paths中添加FFmpeg文件夹集合的目录,以致于咱们可使用通用的方式去调用FFmpeg,兼容项目中的代码
经测试程序可正常运行
#import "ViewController.h"
#import "libavformat/avformat.h"
#import "libswscale/swscale.h"
#import "libavcodec/avcodec.h"
#import "libavutil/avutil.h"
#import "libswresample/swresample.h"
#import "libavresample/avresample.h"
#import "libavfilter/avfilter.h"
#import "libavdevice/avdevice.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
avdevice_register_all();
}
@end
复制代码