安装完成后,输入ffmpeg命令查看输出内容来判断是否安装成功。
主要的命令行工具如下:
ffprobe 用于检测文件或视频流的信息,并用尽量可读的方式打印出来的工具
查看的内容包括但不限于 持续时间,开始播放时间,比特率,编码格式,采样率,声道,采样标示格式等。
常用的命令可点击查看或者通过ffprobe --help查看
ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL来构建的媒体文件播放器
ffmpeg转换媒体文件格式的工具,视频文件的转码、混合、剪辑,采集,还可以用自己的filter进行处理和编辑。具体可以做什么,要建立在你对视频处理都有什么的理解基础上。
集成
这里主要说下iOS上的集成,集成之后通过API去使用,API的使用可以在《FFmpeg从入门到精通》的第八章看看。集成所需脚本和源码
安装 gas-preprocessor
sudo git clone https://github.com/bigsen/gas-preprocessor.git /usr/local/bin/gas sudo cp /usr/local/bin/gas/gas-preprocessor.pl /usr/local/bin/gas-preprocessor.pl sudo chmod 777 /usr/local/bin/gas-preprocessor.pl sudo rm -rf /usr/local/bin/gas/
通过 brew install 安装 yams 和 nasm
编译成功后,会在这个文件夹下生成一个FFmpeg-iOS文件夹,里边就是需要的库
这里需要说下配置选项,也就是脚本中的Configure_flags
标准选项参数
--help : // 打印帮助信息 ./configure --help > ffmpegcfg.txt
--prefix=PREFIX :// 安装程序到指定目录[默认:空]
--bindir=DIR : // 安装程序到指定目录[默认:/bin]
--datadir=DIR :// 安装数据文件到指定目录[默认:/share/ffmpeg]
--incdir=DIR :// 安装头文件到指定目录[默认:/include]
--mandir=DIR :// 安装man page到指定路径[默认:/share/man]
配置选项参数
编译链接选项
--disable-static :// 不构建静态库[默认:关闭]
--enable-shared :// 构建共享库
--enable-gpl : // 允许使用GPL代码。
--enable-nonfree :// 允许使用非免费代码。
--disable-doc : // 不构造文档
--disable-avfilter :// 禁止视频过滤器支持
--enable-small : // 启用优化文件尺寸大小(牺牲速度)
--cross-compile : // 使用交叉编译
--disable-hwaccels :// 禁用所有硬件加速(本机不存在硬件加速器,所有不需要)
--disable-network :// 禁用网络
可执行程序控制选项
--disable-ffmpeg --disable-ffplay
--disable-ffprobe --disable-ffserver
// 禁止ffmpeg、ffplay、ffprobe、ffserver
模块控制 - 整个库
--disable-avdevice --disable-avcodec --disable-avcore
// 禁止libavdevice、libavcodec、libavcore
模块控制 - 单个模块或者一个组
--disable-encoder=NAME : // 禁用XX编码器 | disables encoder NAME
--enable-encoder=NAME : // 用XX编码器 | enables encoder NAME
--disable-decoders : // 禁用所有解码器 | disables all decoders
--disable-decoder=NAME : // 禁用XX解码器 | disables decoder NAME
--enable-decoder=NAME : // 启用XX解码器 | enables decoder NAME
--disable-encoders : // 禁用所有编码器 | disables all encoders
--disable-muxer=NAME : // 禁用XX混音器 | disables muxer NAME
--enable-muxer=NAME : // 启用XX混音器 | enables muxer NAME
--disable-muxers : // 禁用所有混音器 | disables all muxers
--disable-demuxer=NAME : // 禁用XX解轨器 | disables demuxer NAME
--enable-demuxer=NAME : // 启用XX解轨器 | enables demuxer NAME
--disable-demuxers : // 禁用所有解轨器 | disables all demuxers
--enable-parser=NAME : // 启用XX剖析器 | enables parser NAME
--disable-parser=NAME : // 禁用XX剖析器 | disables parser NAME
--disable-parsers : // 禁用所有剖析器 | disa
编译之后将其放入工程,如果添加了264和aac的插件,那么也需要把264和aac的库也一起放入工程中。如下:
Build Phrase - Link Binary With Libraries 里需要添加必须支持的系统库
- libz.1.2.5.tbd
- libbz2.1.0.tbd
- libiconv2.4.0.tbd
- CoreMedia.framework
- CoreAudio.framework
- VideoToolbox.framework
- AudioToolbox.framework
- AVFoundation.framework
设置 Header Search Paths 路径,指向 项目中include目录 。
$(SRCROOT)/AVEncodeTest/lib/FFmpeg-iOS/include
在导入相关代码的时候一定要注意导入方式
第二种方式才能编译成功,并且调用API的时候也不会出现问题。
作用:
为了在C++代码中调用用C写成的库文件,就需要用extern"C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。
原因:
C++支持函数重载,而C是不支持函数重载的,两者语言的编译规则不一样。编译器对函数名的处理方法也不一样。
网友评论