一、背景
移动端学习音视频开发,FFmpeg是必学的框架之一。FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
需求经常是多变的,单纯使用别人已编译好的静态库,正常是不能满足需求的,需要对FFmpeg源码做一些修改,才能满足项目需要。因此要学会FFmpeg的编译和使用
二、编译
相关资源下载链接:
https://pan.baidu.com/s/1IIuCfyAxNwpJC_MNBzgaZA 密码:sn3u
1、下载 gas-preprocessor
此文件是编译FFmpeg必备的脚本文件,使用如下命令将其拷贝进bin下
cp -f /xxx/gas-preprocessor.pl /usr/local/bin/
2、安装yasm
yasm是一个完全重写的NASM汇编并支持x86和AMD64指令
brew install yasm
3、安装nasm
brew install nasm
4、下载[x264-iOS编译脚本]
(https://github.com/kewlbear/x264-ios)及源码
-
下载x264编译脚本解压后如下
image.png -
下载最新版源码解压后如下
image.png -
将源码文件夹改为
image.pngx264
并放至编译脚本文件夹x264-ios-master
下
-
编译
1、编译所有架构 ./build-x264.sh
2、编译指定架构 ./build-x264.sh [arm64/x86_64/armv7/armv7s]
3、x264-iOS文件夹包含所有架构的包
编译错误解决方案
1、
image.png
安装nasm
brew install nasm
2、编译i386的时候提示No working C compiler found
错误,这是由于脚本里支持的ios版本过低导致,修改最低支持版本即可
image.png
5、 下载FFmpeg-iOS编译脚本及源码
注意:在这里可以仅下载FFmpeg-iOS编译脚本,不用下载源码,执行脚本会自动下载源码,如果不想每次自动下载,可以手动下载源码,稍微修改下FFmpeg编译脚本即可。
-
修改脚本(
image.pngbuild-ffmpeg.sh
文件)的内容
-
将x264编译好的文件夹(x264-iOS)重命名为fat-x264,并放在FFmpeg-iOS-build-script-master这个文件夹中
image.png -
如果项目是不支持bitcode选项的话,需要修改
image.pngbuild-ffmepg.sh
-
如果要使用avutil.h相关功能,需要更改脚本
注意: FFmpeg框架中的一个结构体命名为"AVMediaType"与苹果自带框架产生冲突,所以,我们必须修改编译脚本,使用"FFmpegAVMediaType"带替换"AVMediaType".这里需要在脚本文件中添加如下命令行,即将AVMediaType替换为FFmpegAVMediaType. 注意:
$SOURCE
为ffmpeg的根目录.
grep -rl -w AVMediaType ./$SOURCE | xargs sed -i .bak s@AVMediaType@FFmpegAVMediaType@g
三、使用
1、新建iOS工程
因为FFmpeg中涉及C,C++混编,需要将用到ffmpeg库的文件后缀名改为.mm,本文是将ViewController.m
重命名为ViewController.mm
2、添加FFmpeg库
-
将FFmpeg-iOS和fat-x264拖入项目中
image.png -
添加系统依赖库
image.png -
bitcode设置为NO
image.png -
在Build Setting中设置头文件与库的位置
image.png
网友评论