美文网首页iOS音视频及流媒体
FFmpeg在iOS开发中编译并使用

FFmpeg在iOS开发中编译并使用

作者: 因缺思婷 | 来源:发表于2017-08-31 14:44 被阅读2070次

    FFmpeg简介

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。读作:爱服爱服爱母派格。全称:Fast Forward Mpeg。直译:快速转换图像。FFmpeg有多强,借用雷神的总结

    使用FFMPEG作为内核视频播放器:Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音...
    使用FFMPEG作为内核的Directshow Filter:ffdshow,lav filters...
    使用FFMPEG作为内核的转码工具: ffmpeg,格式工厂...
    事实上,FFMPEG的视音频编解码功能确实太强大了,几乎囊括了现存所有的视音频编码标准,因此只要做视音频开发,几乎离不开它。

    下面是记录FFmpeg在iOS环境中编译、使用

    1. 下载编译FFmpeg的脚本文件:https://github.com/libav/gas-preprocessor

    下载、解压、打开文件夹,会看到一个gas-preprocessor.pl文件,把gas-preprocessor.pl文件拷贝一份到/usr/local/bin/ 目录下(之前看网上有人说是拷贝到/usr/sbin/ 目录下,反正我的电脑不行)。然后为文件gas-preprocessor.pl开启可执行权限,打开终端,输入命令:
    chmod 777 /usr/local/bin/gas-preprocessor.pl

    1. 安装yasm
      终端输入命令行brew install yasm
      如果已经安装过,提示如下。

    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> Updated Formulae
    chipmunk libjson-rpc-cpp team-explorer-everywhere
    grpc redex tee-clc
    heroku rt-audio terraform
    infer rtags
    jsoncpp sysdig
    Error: yasm 1.3.0 is already installed
    To upgrade to 1.3.0_1, run `brew upgrade yasm`

    1. 下载编译FFmpeg-iOS的脚本文件:https://github.com/kewlbear/FFmpeg-iOS-build-script

    下载、解压、打开文件夹,里面./build-ffmpeg.sh就是一会儿我们要用的(这个文件夹千万不能删除,放好位置,以免找不到,我们一会儿需要的ffmpeg就会被编译到这个文件夹里)。cd到./build-ffmpeg.sh所在根目录,例如我的:
    cd /Users/jusun/Desktop/GitHub/FFmpeg-iOS-build-script

    终端继续输入:
    ./build-ffmpeg.sh

    当然也可以按照自己需要

    • To build everything:

      ./build-ffmpeg.sh

    • To build arm64 libraries:

      ./build-ffmpeg.sh arm64

    • To build fat libraries for armv7 and x86_64 (64-bit simulator):

      ./build-ffmpeg.sh armv7 x86_64

    • To build fat libraries from separately built thin libraries:

      ./build-ffmpeg.sh lipo

    终端提示如下,开始编译,电脑开始呼呼的响……

    FFmpeg source not found. Trying to download...
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    46 9697k 46 4543k 0 0 46222 0 0:03:34 0:01:40 0:01:54 51565
    ……

    大概30分钟,有可能更长,请耐心等待,直到终端

    Done

    出现,编译完成。打开刚才下载好的FFmpeg-iOS-build-script文件夹(上面提示过不要删除,放好位置),是不是发现多了什么东西,FFmpeg-iOS文件夹就是我们需要的。

    4.ffmpeg导入项目

    4.1 新建一个项目myVideoPlayer,导入上面得到的FFmpeg-iOS文件夹。
    屏幕快照 2017-08-31 下午1.28.16.png
    4.2 当然还要添加必须的三个依赖库

    libz.tbd
    libbz2.tbd
    libiconv.tbd

    4.3 设置search paths

    如下图,复制Library Search Saths 后面的相对路径(如果没有路径,先command+shift+k,然后command+b),加到上面一行Header Search Paths 下,并删除最后的lib,加上include。

    20170831-143856.gif

    command+b没有报错,成功。

    小试一下牛刀

    在ViewController.h里导入以下

    #import <libavformat/avformat.h>
    #import <libavcodec/avcodec.h>
    #import <libswscale/swscale.h>
    #import <libavutil/avutil.h>
    #import <libswresample/swresample.h>
    #import <libavdevice/avdevice.h>
    #import <libavfilter/avfilter.h>
    

    viewDidLoad方法里写

        av_register_all();
        avcodec_register_all();
        avformat_network_init();
        AVFormatContext *avFormatContext = avformat_alloc_context();
        
        NSString *url = @"rtmp://live.hkstv.hk.lxdns.com/live/hks";
        if (avformat_open_input(&avFormatContext, [url UTF8String], NULL, NULL) != 0) {
            av_log(NULL, AV_LOG_ERROR, "Couldn't open file");
        }
       
        if (avformat_find_stream_info(avFormatContext, NULL) < 0) {
            av_log(NULL, AV_LOG_ERROR, "Couldn't find stream information");
        } else {
            av_dump_format(avFormatContext, 0, [url cStringUsingEncoding:NSUTF8StringEncoding], NO);
        }
    
    

    编译,竟然报错,查看报错信息,有videotoolbox,audiotooxbox等字眼,猜想可能是FFmpeg-iOS更新了对videotoolbox,audiotooxbox的支持,废话不多说,缺什么补什么,添加这两个苹果自家库:


    C1987300-1C14-4182-9D80-863F4CA01EE9.png

    ViewController.h也不要忘了补上

    #import <VideoToolbox/VideoToolbox.h>
    

    编译,成功!!!!
    运行,打印台输入视频流信息如下:

    Input #0, flv, from 'rtmp://live.hkstv.hk.lxdns.com/live/hks':
      Metadata:
        encoder         : Lavf57.36.100
      Duration: 00:00:00.00, start: 0.011000, bitrate: N/A
        Stream #0:0: Video: h264 (High), yuv420p(progressive), 480x288 [SAR 16:15 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc
        Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp
    

    大功告成!ffmpeg的使用,继续学习中!

    相关文章

      网友评论

        本文标题:FFmpeg在iOS开发中编译并使用

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