FFmpeg初体验 - 01

因为昨天接到了“xx”公司的面试邀请,面试要求当中有提到硬性条件是:熟练使用FFMPEG进行视频编解码,所以为了能够更好的应对面试,今天在网上查了一下关于ffmpeg的资料,首推ffpeg官方文档:https://ffmpeg.org/ffmpeg.html

FFmpeg简介

FFmpeg是一个非常快速的视频和音频转换器,也可以从现场音频/视频源获取。它还可以在任意采样率之间进行转换,并使用高质量的多相滤波器即时调整视频大小。

要使用FFMPEG,首先需要理解FFMPEG的代码结构。ffmpeg的代码是包括两部分的,一部分是library,一部分是tool。api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了。另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程。实际上tool只不过把命令行转换为api的操作而已。

FFMPEG的安装过程

0、安装环境

MacOS Sierra 10.12.5
Xcode 8.3.2

1、打开控制台,输入下面命令行进行安装:

brew install ffmpeg 

2、测试是否安装成功,随便在电脑上找一个视频文件,比如xxx.mp4,把它转换为yyy.avi格式,对其进行转换格式操作,命令行如下::

ffmpeg -i xxx.mp4 yyy.avi

如果能够顺利转换,可在根目录下查到yyy.avi格式的视频文件,表明安装ffmpeg成功。

 3、编译library,编译好之后可以调用FFmpeg的api。网上有一些方法,但都要自己手动编译,稍显复杂而且比较陈旧。按照app store的需求,编译出来的包还必须支持arm64。万能的github中有一个能够一键编译的脚本,地址如下:

https://github.com/kewlbear/FFmpeg-iOS-build-script

写这个脚本的是一个歪果仁,更新很及时,已经更新到了最新的3.3版本。下载下来,会有3个文件,其中一个是build-ffmpeg.sh脚本文件。在终端中转至脚本的目录,此处注意,一定要先进入文件所在的文件夹,在文件夹目录下执行以下命令: 

./build-ffmpeg.sh

在FFmpeg3.3版本中,执行该句命令会报如下错误:

 该错误提示FFmpeg数据源没有找到,并且尝试去下载!我马上去查看了build-ffmpeg.sh这个脚本当中的source

 根据命令行报错提示,定位到一定是这里除了问题,对于17年1月苹果秉承一向强硬的态度,要求所有上架的APP必须使用HTTPS协议,所以断定,一定是链接协议没有及时更新为HTTPS,稍作更改如下:

 再次在终端跑一下build-ffmpeg.sh脚本

 脚本则会自动从github中把ffmpeg源码下到本地并开始编译。可以看出,已经下载完成。

目录结构如下:

 

其中,ffmpeg-3.3是源码,FFmpeg-iOS是编译出来的库,里面有我们需要的.a静态库,一共有7个。

 查看.a包支持的架构,执行命令如下:

lipo -info libavcodec.a

可查看到可支持armv7 armv7s i386 x86_64 arm64这几个架构

 

4.在xcode中引入FFMPEG library库

新建工程,把上面编译好的FFmpeg-iOS拖到xcode工程中,添加一个头文件引用

#include "avformat.h"

添加一个测试语句:

av_register_all();

 点击编译,会报如下错误:

 很奇怪的错误,居然说XX文件找不到,此时应该在build setting当中的Header Search Paths配置文件路径,如下图所示:

 添加path为你自己当前FFmpeg-iOS当中include的全路径,示例如下:

 添加成功后,再次进行编译,会出现80多个错误,而且都是链接错误,错误的原因是FFmpeg依赖一部分库,此时只需要导入如下库:

 

编译,运行工程,如果没有报错,则表明运行成功。



posted @ 2017-06-16 19:13  晒太阳的仙人掌  阅读(489)  评论(0编辑  收藏  举报