为了账号安全,请及时绑定邮箱和手机立即绑定

FFmpeg集成与编译

标签:
iOS C

FFmpeg是学习直播中很主要的一环,既是一款音视频编解码工具,同时也是一组音视频编解码开发套件(给开发人员提供了很多丰富的音视频处理的调用接口),要学习直播的原理是一个大工程,先从基本的FFmpeg的集成与编译学起。

一. 安装FFMpeg

    1. 在安装FFmpeg前需要先安装Homebrew,如果安装过则不需要重新安装, 在终端上输入:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

图片描述

检查是否安装过homebrew,在终端输入:

brew

图片描述

    1. 在安装homebrew成功之后安装FFmpeg, 在终端上输入:
brew install ffmpeg

图片描述
安装成功之后,可以在终端输入以下信息,查看安装信息

brew info ffmpeg

图片描述

  • 3.安装结束后,可以尝试以下命令:验证是否安装成功
ffmpeg -i /Users/LM/Desktop/test.mp4   /Users/LM/Desktop/test.avi

如果能顺利转换,表明安装成功。

图片描述

注意:input.mp4 为你需要转换的视频文件, output.avi为转换后输出的视频文件。(文件尽量小一点,有点耗时~~~)

二、编译FFmpeg

  • 1.首先需要先下载一个能“一键编译”的脚本,地址如下
    下载编译脚本

图片描述

  • 2.打开终端进入到该文件目录, 我的操作如下:
cd +空格+ 将刚刚下载成功的FFmpeg-iOS-build-script文件拖到终端
  • 3.进入该文件目录后执行命令
./build-ffmpeg.sh

图片描述

运行到这里,是不是感觉这个脚本牛逼,因为网上很多教程,博客,文章都说要你先yasmgas-preprocessor.pl 但是这里不需要,那些都是一些浪费时间,build-ffmpeg.shbrew 还有yasm 以及gas-preprocessor.pl都有判断,如果没有就自动去安装更新,顿时感觉超爽超简单,对于shell脚本是不是有了一个更新的认识.前面安装brew原因是你帮助在终端安装ffmpeg,要知道ffmpeg是C写的,所以不再iOS平台一样玩

图片描述

脚本会自动编译FFMpeg,过程比较长,请耐心等待。

  • 4.编译成功后的文件目录如下:4个文件夹是新生成的,其中FFmpeg-iOS为我们所需要的。

图片描述

三、植入应用程序

  • 1.添加依赖的系统库

    • AudioToolbox.framework
    • CoreMedia.framework
    • VideoToolbox.framework
    • libz.tbd
    • libbz2.tbd
    • libiconv.tbd
    • AVFoundation.framework
    • CoreGraphics.framework
  • 2.把FFmpeg-iOS文件植入应用程序中

  • 3.添加 Header Search Paths 设置
    $(SRCROOT)/项目名/所在文件夹/FFmpeg-iOS/include
    图片描述

  • 4.把下面图片中的文件植入应用程序中
    图片描述
    图片描述

把这些加入程序中之后如图所示
图片描述

  • 5.然后把程序运行起来,会发现有很多缺少的.h文件,别着急,丢失的文件在ffmpeg-3.4.2里搜索,然后把.h文件加进应用程序即可,需要一点时间

三、注意 需要修改的地方

在编译的时候我们需要修改ffmpeg.c的main函数,因为一个程序不能有两个main函数,在这里我们改成ffmpeg_main,如下所示:

int ffmpeg_main(int argc, char **argv)
{
    int ret;
    int64_t ti;

    register_exit(ffmpeg_cleanup);

    setvbuf(stderr,NULL,_IONBF,0); /* win32 runtime needs this */

    av_log_set_flags(AV_LOG_SKIP_REPEATED);
    parse_loglevel(argc, argv, options);

    if(argc>1 && !strcmp(argv[1], "-d")){
        run_as_daemon=1;
        av_log_set_callback(log_callback_null);
        argc--;
        argv++;
    }

    //以下是省略内容
    ...
}

我们还需要修改cmdutils.c中的exit_program函数,删掉函数中原来的内容, 添加 return ret;并修改函数的返回类型为int。如果不修改,在FFmpeg命令执行完成后,程序会退出。

int exit_program(int ret);

int exit_program(int ret)
{
    //if (program_exit)
    //    program_exit(ret);

    //exit(ret);
    return ret;
}

到此FFmpeg编辑就结束啦,以后就可以对音频视频工作了。。。。。。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消