iOS-FFmpeg学习笔记(一)
2017-10-11 本文已影响316人
风与鸾
在学习FFmpeg之前,查阅了很多资料包括官方的、国外的、国内的,相信还是雷霄骅资料最适合初学者,在这里哀悼下大神,愿逝者安息。
准备工作
如果你准备在FFmpeg的基础上写一个适用于iOS平台上的视频推流或者播放器的是SDK,你要先编译FFmpeg
-
笔者所使用的环境:Xcode9.0、ffmpeg-3.3版本。类库。
-
推荐一个非常好用的编译FFmpeg脚本
-
在终端cd到刚才下载的脚本,执行
./build-ffmpeg.sh
,如果你没安装Yasm
不用担心,脚本会提示你,你只需要按照提示,脚本会自动帮你下载(这一步网上很多说要自己先安装,反正我是没有,按照脚本提示一步到位),可谓是一键式编译。 -
等待一段时间后编译完成,在脚本文件里面会多出
FFmpeg-iOS
、ffmpeg-3.3
、thin
、scratch
这几个文件。
到这里恭喜你编译完成,同时你也可以看看FFmpeg-iOS里面的lib文件内.a文件所支持哪些Architectures
- 在终端cd到
FFmpeg-iOS里面的lib文件
,利用命令lipo -info libavfilter.a
可以看到终端输出Architectures in the fat file: libavfilter.a are: armv7 i386 x86_64 arm64
顺便介绍下armv7 arm64 i386 x86_64
这些是什么,其实这些是处理器的指令集。
-
armv7、arm64
是ARM处理器的指令集,真机所支持的架构。 -
i386 、x86_64
是Mac系统处理器指令集,模拟器32位、64所支持的架构。
配置验证
- 用Xcode新建一个工程,把上面编译好的
FFmpeg-iOS
添加到工程里面。 - 如果你未使用
FFmpeg类库
,你也是可以跑成功的,如果你使用到相关的类库,启动会报错,因为你还未配置相关环境。 - 设置
Header Search Paths
->$(SRCROOT)/FFmpeg-iOS/include
、Library Search Paths
->$(PROJECT_DIR)/FFmpeg-iOS/lib
- 选择工程
General
->Linked Frameworks and Libraries
添加libz.tbd、libbz2.tbd、libiconv.tbd
和FFmpeg-iOS下lib文件内所有的.a文件也一并添加
- 此时你可以启动模拟器跑跑,我这一开始提示缺少某些系统带
tool
之类的库启动报错,我这添加如下几个库后就可以启动了。
- 如果提示
other link error之类的错误
,可以试试在Build Settings->Other Linker flags输入-all_load
- 如果启动成功写一段代码试试。
#import "ViewController.h"
#include <libavcodec/avcodec.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
printf("%s",avcodec_configuration());
UILabel *lab = [UILabel new];
lab.text = [NSString stringWithUTF8String:avcodec_configuration()];
lab.numberOfLines = 0;
lab.frame = self.view.bounds;
[self.view addSubview:lab];
}
效果如下:
656C102B-912E-473E-951C-C553406CCAB0.png至此前期准备工作完成了,接下来需要自己好好阅读分析FFmpeg源码
,自己动手实现一个iOS音频播放SDK,这个工作应该会很长,以后会慢慢更新。