美文网首页iOS程序员的业余沙龙iOS-多媒体开发iOS 直播视频
iOS 利用FFmpeg 开发音视频流(二)——Mac 系统上编

iOS 利用FFmpeg 开发音视频流(二)——Mac 系统上编

作者: Abson在简书 | 来源:发表于2016-03-25 11:40 被阅读6978次

博主里利用上一篇iOS 利用FFmpeg 开发音视频流(一)的文章带了小伙伴们进入了 FFmpeg 的大坑,有观看过上一篇文章的小伙伴都会产生一些疑问,我们现在可以在 Mac 上使用强大的 FFmpeg 了,但是在 IOS 上怎么使用呢?使用起来是不是像Mac 那么简单?几句命令行可以搞掂?大家先别急,凡事都循序渐进嘛,不能一口吃掉一个胖子。
今天,博主就说一下, 如何在iOS上集成 FFmpeg,来,博主带大家往坑里走了。

我们此次入坑需要的工具:

1、gas-preprocessor
2、yasm 1.2.0
3、FFmpeg-iOS-build-script(ps:这个脚本真是业界良心呀,帮我们省下了不少心。)

好了,刀已经有了,但是怎么优雅的使用出招式呢?慢慢来,博主力求详细的为大家分解每个步骤。

1、下载gas-preprocessor
那么 gas-preprocessor 是什么呢?

gas-preprocessor 其实就是我们要编译 FFmpeg 的所需脚本文件。

1)我们将其解压后,发现内部只有简单的 4 个文件,如下图:


gas-preprocessor 解压后的文件

不难发现其中的 gas-preprocessor.pl,没错,这就是我们要找的刀了,恭喜,你获取了小木剑一把,继续往坑里走少年。

2)继续将 gas-preprocessor.pl 文件复制到 /usr/sbin/ 目录下(ps:应该会有很多小伙伴发现这个目录是根本没法修改的,那么这种情况下,小伙伴们可以将文件复制到 /usr/local/bin/ 目录下),然后为文件开启可执行权限,打开终端并输入以下命令行:

chmod 777 /usr/sbin/gas-preprocessor.pl

chmod 777 /usr/local/bin/gas-preprocessor.pl

2、安装 yasm
yasm 又是什么呢?

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

1)下载 yasm
上一篇文章博文带大家下载了一个好东西 homebrew,既然是优雅的编译,我们就用最像程序员的东西,命令行了,打开终端,输入如下:

brew install yasm

2)检测是否已安装 yasm

brew install yasm

如果你成功安装了 yasm,输出如下图:


brew info yasm

好了,你获得了隔壁老王内裤一条。额。。让我们继续前进。


3、编译 FFmpeg-iOS-build-script,得到我们需要的 iOS 能用的 ffmpeg 库

这个脚本有神马用呢?

不难看出,这个脚本是转为 iOS 编译出可用的 ffmpeg 的库,这个业界良心,我们称之为`神的内裤`。。。
好吧,不搞笑,有了这个脚本,我们根本就不用下载 ffmpeg 了,脚本会帮我们下载好最新版本的 ffmpeg,
并打包成一个 iOS 可用的 ffmpeg 库提供给我们了,当然,前提是你必须要跟着博主一步一步入坑才行喔。

1)进入我们的 gitHub 网站,把 FFmpeg-iOS-build-script 下载好压缩包。

2)编译脚本,打包出我们需要的 iOS 的 ffmpeg 库
解压 FFmpeg-iOS-build-script 得到的文件如下:

解压后得到的 FFmpeg-iOS-build-script

我们目标不是开发 tvos 吧。。那么我们的目标脚本就只剩下 build-ffmpeg.sh 了。打开终端,进入解压后的 FFmpeg-iOS-build-script 文件夹,命令行如下:

  cd 小伙伴们的FFmpeg-iOS-build-script文件夹路径

执行 build-ffmpeg.sh 脚本:

./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 所得到的文件

小伙伴们不难看到,FFmpeg-iOS 就是我们所需要的文件夹了,看到内部的各种 .a 文件,也就是我们熟悉的静态库了。


4、集成FFmpeg 库开发工程当中

1)把 FFmpeg-iOS 直接复制到你的工程目录下

2)把 FFmpeg-iOS 从你的工程目录下拖到工程当中,最后得到的结果如下图:

集成 FFmpeg 的工程图

3)编译一下,你会发下有错误,哈哈,原因是你没有链接编译文件
好,我们进入 Build Setting ,修改 header search Path 链接到工程的 include 文件当中 操作如下:

链接库文件

OK,我们可以在工程当中引入 #import "avformat.h" 文件了,编译 Success


@end

好了,至此,我们已经成功编译并集成了 ffmpeg 了,但是怎么使用呢?怎么压缩视频,视频压缩视频?
怎么实现 h264 编码?怎么将视频/音频推送到流媒体服务器呢?这些都是我们将要说的。
本博主会继续带大家入坑的,谢谢。

心如止水,奋力前行

相关文章

网友评论

  • 云画的跃光:xcrun -sdk iphoneos clang is unable to create an executable file.
    C compiler test failed.

    报这个错
  • 雾中探雪:继续关注 大神
  • 动感超人丶:持续关注中
  • e0473ada5a81:执行 build-ffmpeg.sh 脚本的时候报错:
    xcrun -sdk iphoneos clang is unable to create an executable file.
    C compiler test failed.
    请问一下大神这是什么问题?
    6ac8dc2cec33:xcode环境安装过多,使用xcode-select选择默认的工具路径/Applications/Xcode-beta.app

    sudo xcode-select -s /Applications/Xcode-beta.app(-s 后是你的xcode路径)
  • 牛巴粉带走:楼主,像文章这样集成,好像达不到通过ffmpeg_main的方法,调用终端命令操作的把,楼主快出新文章啊
  • 747071ac3c1d:./build-ffmpeg.sh 我在终端上执行过后,出现下面这种情况,楼主遇到过没有,怎样来解决?
    FFmpeg source not found. Trying to download...
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
    building arm64...
    ./build-ffmpeg.sh: line 121: /Users/apple/Desktop/ffmpeg/ffmpeg-3.2/configure: No such file or directory
    l富文本l:@叶落似晚秋 我在https://github.com/kewlbear/FFmpeg-iOS-build-script中download给的网址直接下载编译好的,然后加下需要的库,header search Path中链接一下,编译成功了。
    l富文本l: 我也是,你解决了吗
    叶落似晚秋:我的也是这样 请问有没有解决呢
  • 劉戦軍:受教了,谢谢楼主
  • Link913:博主,我照你说的,但是libavutil/samplefmt.h文件提示找不到,我还加了些别的依赖库,.mm文件都不行,有什么好的办法吗,还是说电脑的问题?
    Abson在简书:@SkyHarute 你要做滤镜效果吗?
    Link913:@SkyHarute 博主这个我搞定了,做过SDL添加到项目吗
  • ScorpioLiu:请问,将FFmpeg-iOS拖入工程不会报错,并且找不到#import "avformat.h",是什么情况?
    ScorpioLiu:@SkyHarute 解决了我是按照文件夹路径一层一层找到的头文件。
    Link913:@ScorpioLiu 请问解决了吗
    Abson在简书:@ScorpioLiu 没有设置好 header search Path
  • 4104f0f0a0c4:为什么我编译出来的缺少libpostproc库呢
    牛蛋:我也是的 你解决了吗
  • 换个名字再说:#import "avformat.h" 找不到呀,buildsetting也设置了
    Link913:@颜值担当的程序汪 请问解决了吗
  • 子达如何:要是能弄一个Xcode的编译工程出来就爽了,调试修改效率高不少
    Abson在简书:@子达如何 哈哈,ffmpeg是跨平台的产物,不编译,怎么适应平台代码呢。
    子达如何:@止于浮水 我的意思是直接把ffmpeg的原代码拉到Xcode里建立工程文件,而不是现在这样用脚本编译成库文件使用.
    Abson在简书:@子达如何 跟着我前面文章说的做,就可以了
  • 960d2a7a31bd:我的找不到/usr/sbin/目录啊
  • 猪猪的思维有点长:全功能的ffmpeg太大了,有80多MB呢,据说有方法配置参数,然后只编译出指定某些功能的ffmpeg-iOS,博主你会不会呀?
    另外,博主快点更新哎,都这快半年了 :blush:
    Abson在简书:@猪猪的思维有点长 编译出来80多 M,但是打包成 ipa 就没多大了,已更新,谢谢支持
  • 朝去晚来:编译OK后,调用 av_register_all 函数后,报没有标志的错误,如下:
    Undefined symbols for architecture x86_64:
    "_CMBlockBufferCreateWithMemoryBlock", referenced from:
    _videotoolbox_common_end_frame in libavcodec.a(videotoolbox.o)
    添加了VideoToolbox的静态库后还是报错。楼主有遇到过这种错误嘛?
    黄二瓜:@吴小棋 我也遇到这个问题了,你解决了么?
  • 瞳若点星:楼主下一部分呢,怎么使用这个对录制的视频进行编码哇
  • 8bad0e5aeda6:加个QQ可以吗? 博主
  • dd55a94cc562:很期待,博主加油,已点喜欢。
    Abson在简书:@陈江川 已更新
  • 5abc4109882b:楼主求更新,最近被这个搞得头疼
    Abson在简书:@AppleYu 已更新
  • 90年代的小伙子:求更新啊 :grin:
    Abson在简书:@娶个名字真难 已更新
  • 相遇相识相恋相濡以末:为什么我按照您的操作流程走下来文件夹里没有FFmpeg-iOS 这个文件夹,但是出现了ffmpeg-3.0 文件夹呢,求大神告知
    瞳若点星:@相遇相识相恋相濡以末 是要更改权限的吧。我开始也是 你用chmod 777给ffmpeg解压后的那个文件权限
  • 7a0e711839b9:楼主,求第三部啊 :sob:
  • 心中的信念:博主。继续更新哈,
  • koreadragon:等你写第三部呢,咋没反应啦?已关注
  • CodingSha:博主快更,最近正写这方面东西,急缺您这样的资料
  • 孤独感爆棚:最近正好在学这个,期待更新
  • puppySweet:快点啊……更新中
  • 阳光的大男孩儿:好期待呀 博主 快点更新呀,隔壁老王等不及了~~~
  • 火郎君:期待啊👻
  • 90年代的小伙子:期待下一章节
  • puppySweet:快更新啊…ffmpeg纯c看不懂 求出如何处理视频的文章 比如何压缩视频 设置视频的分辨率 帧率 等avfountion公开的api太有限了 我会一直关注哦 大神
    puppySweet:@止于浮水 嗯嗯加油
    Abson在简书:@puppySweet 不能急呀,不是专职写文章的呀,宁缺毋滥,保证质量。
  • e1d94c4636d7:很赞。。 :blush: 希望能持续更新
    Abson在简书:@三次元长腿拯救世界 点个喜欢哈。
  • 慧丫丫:正做短视频应用,好好研究一下
    慧丫丫:@puppySweet 可以啊
    puppySweet:@慧丫丫 求交流
  • 姜流儿96:大赞,正在弄ffmpeg,但是对于视频压缩一只无解,期待ing
    puppySweet:@姜流儿96 我也是
  • 三十一_iOS:持续关注。
    Abson在简书:@yunis 点个喜欢呀~

本文标题:iOS 利用FFmpeg 开发音视频流(二)——Mac 系统上编

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