美文网首页
ffmpeg的集成

ffmpeg的集成

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-15 00:33 被阅读0次
    Mac上的集成主要是通过 brew install ffmpeg来安装,安装后可以通过命令行来使用。

    安装完成后,输入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是不支持函数重载的,两者语言的编译规则不一样。编译器对函数名的处理方法也不一样。

    关键字:extern "C" 表示编译生成的内部符号名使用C约定。

    相关文章

      网友评论

          本文标题:ffmpeg的集成

          本文链接:https://www.haomeiwen.com/subject/jwrnnhtx.html