FFmpeg编译ios平台

来源:互联网 发布:淘宝网出售二手床 编辑:程序博客网 时间:2024/05/21 15:40

做了一个解码直播视屏的项目(监控类的RTSP流),项目结束了,记录一下之前编译FFmpeg的梗,网络上很多说怎么编译FFmpeg的但是看着都像是一个人写的,都是一样,都在复制,但是解决问题的速度确实很慢,我在这总结一下,以供后来人少走弯路;

1.下载下面5个文件
gas-preprocessor 地址 https://github.com/applexiaohao/gas-preprocessor

yasm https://github.com/yasm/yasm

FFmpeg-iOS-build-script https://github.com/applexiaohao/FFmpeg-iOS-build-script

ffmpeg http://www.ffmpeg.org/releases/?C=M;O=D

kxmovie https://github.com/applexiaohao/kxmovie

1.下载完成后打开终端 进入gas-preprocessor文件夹

cd 将文件拖进来回车

2.将文件夹内的gas-preprocessor.pl文件拷贝到/usr/sbin/目录下

sudo cp /Users/chenqiang/Downloads/gas-preprocessor-master/gas-preprocessor.pl /usr/local/bin

注意上面的sudo cp(这个地方是gas-preprocessor文件下gas-preprocessor.pl的地址,只需要将gas-preprocessor.pl文件拖进来就行了) /usr/local/bin 回车

3.修改/usr/sbin/gas-preprocessor.pl的文件权限为可执行权限
如果1.命令如果不行就使用2.命令

1. chmod 777 /usr/sbin/gas-preprocessor.pl
 2. chmod +x gas-preprocessor.pl

4.此时为了编译时有问题我们现在进入下载后的yasm文件夹,通过编译安装命令yasm

cd 将文件拖进来回车
 ./configure && make -j 4 && sudo make install

如果上一步不行使用Homebrew包管理器,进行安装
首先检查Homebrew包管理器是否安装

终端命令输入 brew

如果没有安装 Homebrew包管理器

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

执行完之后输入下面的命令安装yasm

  brew install yasm

接下来
执行FFmpeg-iOS-build-script-master文件夹内的build-ffmpeg.sh

cd 将文件FFmpeg-iOS-build-script-master拖进来回车

编译所有的版本arm64、armv7、x86_64的静态库

./build-ffmpeg.sh

如果编译支持arm64架构的静态库

./build-ffmpeg.sh arm64

如果编译适用于armv7和x86_64(64-bit simulator)的静态库

./build-ffmpeg.sh armv7 x86_64

或者编译合并的版本

./build-ffmpeg.sh lipo

接下来就是等终端自己编译不用再管,大概要十几分钟

编译完成后导入到工程中将kxMovie这个文件也导入到工程中
添加下面的依赖库

加入依赖库libz.lib加入依赖库libbz2.lib加入依赖库libiconv.lib

这时运行可能会报错 #include “libavformat/avformat.h”这个头文件找不到
下面是解决办法
进入工程target settings 这里写图片描述

搜索 library search paths 这里写图片描述
改为后缀是.lib的
然后复制这个lib的的这一条
在setting 的搜索框中搜索header search paths
这里写图片描述
添加刚才复制的改为.include的后缀
运行发现工程不会报错了这样FFmpeg就算导入成功了
接下

在工程中引入#import "KxMovieViewController.h"
在创建解码的地方

 NSString *path = @"http://www.qeebu.com/newe/Public/Attachment/99/52958fdb45565.mp4";    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];    if ([path.pathExtension isEqualToString:@"wmv"])        parameters[KxMovieParameterMinBufferedDuration] = @(5.0);    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)        parameters[KxMovieParameterDisableDeinterlacing] = @(YES);    KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:path parameters:parameters];    [self presentViewController:vc animated:YES completion:nil];

这样就可以看到播放的画面了

注意不要在程序进入到根视图就去解码,我发现这样不可以,要viewdidload以后才可以,希望可以帮助到你

1 0
原创粉丝点击