FFmpeg在iOS开发中编译并使用

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 'http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8':
  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的使用,继续学习中!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容