iOS 音视频 -- 编译FFmpeg

2,015 阅读1分钟

参考文章 :www.jianshu.com/p/cd33f4ac1…

所需文件

gas-preprocessor

yasm

FFmpeg-iOS-build-script

kxmovie

gas-preprocessor

通过上述超链接去 GitHub 下载,执行以下命令。

  1. cd 下载目录 如:cd /Users/你的用户名/Downloads/gas-preprocessor-master
  2. sudo cp gas-preprocessor.pl /usr/local/bin
  3. chmod 777 /usr/local/bin/gas-preprocessor.pl

如果第三步失败,可以试试chmod +x gas-preprocessor.pl

yasm

无需下载,直接执行以下命令

  1. brew install yasm
  2. yasm --version

FFmpeg-iOS-build-script

执行一下命令

  1. cd 下载目录 如:cd /Users/你的用户名/Downloads/FFmpeg-iOS-build-script-master
  2. ./build-ffmpeg.sh 执行脚本
  3. 等待编译结束 编译结束后,会下载一个最新的FFmpeg如下图

新建工程

  1. 新建工程
  2. 将下载的kxmovie 以及 FFmpeg-iOS 拖入工程

3. 添加如下依赖库:
- libz.tbd
- libbz2.tbd
- libiconv.tbd
- VideoToolBox.framework

  1. 添加运行代码
#import "ViewController.h"
#import "KxMovieViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}
-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    
    NSString *urlStr = @"https://vd3.bdstatic.com/mda-ja0k1pw5mvhn0rzh/mda-ja0k1pw5mvhn0rzh.mp4";
    NSMutableDictionary *param = [NSMutableDictionary dictionary];
    if ([urlStr.pathExtension isEqualToString:@""]) {
        param[KxMovieParameterMinBufferedDuration] = @(5.0);
    }
    
    
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        param[KxMovieParameterDisableDeinterlacing] = @(YES);
    }
    KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:urlStr parameters:param];
    vc.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:vc animated:YES completion:nil];
}


@end

编译报错解决方案

1.KxMovieDecoder 找不到UIImage

需要我们自己#import <UIKit/UIKit.h>

2.出现大量报错信息,原因是没有引入VideoToolBox

3.报错找不到 libavformat/avformat.h 解决方法

  1. Target -> 工程 -> Build Settings -> Library Search Path 复制出如下内容
    $(PROJECT_DIR)/HBFFmpeg/FFmpeg-iOS/lib

  1. 将后缀的lib改为include $(PROJECT_DIR)/HBFFmpeg/FFmpeg-iOS/include
  2. 然后添加到Header Search Path 中