美文网首页iOS-FFmpeg音视频开发
IOS 编译FFmpeg视频播放

IOS 编译FFmpeg视频播放

作者: weixhe | 来源:发表于2017-03-26 03:53 被阅读203次

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它是在Linux平台下开发的,可跨平台编译运行,包括Windows、Mac OS X等,前面的"FF"代表"Fast Forward",它提供了录制、转换以及流化音视频的完整解决方案。

    FFmpeg的项目组成:
    libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构
    和读取音视频帧等功能;
    libavcodec:用于各种类型声音/图像编解码;
    libavutil:包含一些公共的工具函数;
    libswscale:用于视频场景比例缩放、色彩映射转换;
    libpostproc:用于后期效果处理;
    ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
    ffsever:一个 HTTP 多媒体即时广播串流服务器;
    ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

    IOS编译FFmpeg

    一、安装homebrew

    什么是homebrew

     "homebrew"是Mac平台的一个包管理工具,提供了许多Mac下没有的Linux工具等,而且安装过程很简单。
    
    安装过程
    1. 打开终端,运行以下命令,查看是否已安装brew:
    brew 
    

    查看结果:

      ![](https://img.haomeiwen.com/i5369976/af4bd0ea8ca26f3b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

    如果出现以上结果,恭喜你,说明你的mac已经安装好了homebrew, 如果不是,那木,你只能继续操作了

    2.安装brew, 继续在终端输入命令:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

    3.卸载homebrew:

    brew cleanup
    

    二、安编译FFmpeg

    在此列举一些需要用到的工具:

    1.gas-preprocessor
    2.yasm
    3.FFmpeg-iOS-build-script(ps:这个脚本真的是太好了,帮我们省了很多事)
    4.kxmovie(ps:这个是第三方播放库)

    1.下载gas-preprocessor

    gas-preprocessor是我们需要编译的ffmpeg的所需要的脚本文件。
    

    1)下载好gas-preprocessor后解压,找到gas-preprocessor.pl文件
    2)将其拷贝到/usr/sbin/文件夹下,如果第一个文件夹不允许拷贝,可以拷贝到/usr/local/bin/文件夹下
    3)打开文件可执行权限,在终端下执行以下命令

    • 如果在/usr/sbin/下
    chmod 777 /usr/sbin/gas-preprocessor.pl
    
    • 如果在/usr/local/bin/下
    chmod 777 /usr/local/bin/gas-preprocessor.pl
    

    2.下载安装yasm

    yasm是一个完全重写的 NASM 汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进制,ELF32 , ELF64 , COFF , Mach - O的( 32和64 ),RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。
    

    直接在终端下进行

    brew install yasm
    

    查看结果:

    已经安装成功
    3.编译FFmpeg-iOS-build-script, 得到我们需要的iOS能够用的ffmpeg库
    FFmpeg-iOS-build-script这个脚本,可以直接转为iOS编译可用的ffmpeg库,我们不用下载ffmpeg,脚本会帮我们下载最新版本的ffmpeg,并且打包成一个iOS可用的ffmpeg库。
    

    1)下载并解压,我们需要的是红框中的文件:

    2)编译脚本, 在终端执行以下命令

    cd FFmpeg-iOS-build-script文件夹路径
    ./build-ffmpeg.sh
    

    官方的一些说明:


    以下是生成的一些.a文件:

    5.png

    4.最后下载kxmovie工程,创建自己的工程,FFmpeg-iOS和kxmovie拖入工程,编译一下。
    需要引入三个系统的库:

    libz.tbd
    libbz2.tbd
    libiconv.tbd
    VideoToolbox.framework
    

    并设置header_search_pathlibrary_search_path

    5.处理bug:
    A、KxMovieDecoder.h类出现以下错误, 是因为没有引入#import <UIKit/UIKit.h>

    1.Expected a type
    2.Use of undeclared identifier 'UIImage'
    

    B、KxMovieDecoder.m类出现以下错误, 直接按照提示修改即可:

    Use of undeclared identifier 'PIX_FMT_RGB24'; did you mean 'AV_PIX_FMT_RGB24'?
    

    C、出现以下错误是因为FFmpeg3.0是最新版本,直接注释掉这里的代码就行了

    Implicit declaration of function 'avpicture_deinterlace' is invalid in C99
    或
    Undefined symbols for architecture armv7:
      "_avpicture_deinterlace", referenced from:
          -[KxMovieDecoder decodeFrames:] in KxMovieDecoder.o
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    

    此处问题总结,见论坛。kxmovie论坛

    ok,到此处,编译成功!

    三、编写代码

    #import "KxMovieViewController.h"
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        NSString *path = @"http://192.168.2.13/test/1avi.avi";
        NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    
        // increase buffering for .wmv, it solves problem with delaying audio frames
        if ([path.pathExtension isEqualToString:@"wmv"])
            parameters[KxMovieParameterMinBufferedDuration] = @(5.0);
    
        // disable deinterlacing for iPhone, because it's complex operation can cause stuttering
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
            parameters[KxMovieParameterDisableDeinterlacing] = @(YES);
    
        KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:path
                                                                                   parameters:parameters];
        [self presentViewController:vc animated:YES completion:nil];
    }
    

    相关文章

      网友评论

        本文标题:IOS 编译FFmpeg视频播放

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