内容简介:手动编译打开x264功能的FFmpeg并放入新建的项目中,可以编译成功.以便后续使用.移动端学习音视频开发,FFmpeg可以说是必学的框架,FFmpeg在linux平台下开发,但它同样也可以在其他操作系统环境中编译运行,包括Windows、Mac OS X等。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,它包括了目前领先的音/视频编码库libavcodec。FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将
手动编译打开x264功能的FFmpeg并放入新建的项目中,可以编译成功.以便后续使用.
背景
移动端学习音视频开发,FFmpeg可以说是必学的框架,FFmpeg在 linux 平台下开发,但它同样也可以在其他操作系统环境中编译运行,包括Windows、Mac OS X等。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,它包括了目前领先的音/视频编码库libavcodec。
FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
安装方式
可以通过如下两种方式安装ffmpeg
- 1.下载iOS版本 ffmpeg静态库 : 即不用手动编译,我们只需要下载得到头文件及.a库文件.
- 2.手动编译: 下载源码, 可以在更改一些flag或源码后再编译脚本,较为灵活.
如何选择
- 如果仅仅是想简单直接使用ffmeg可以下载一个稳定版本的静态库, 建议用第一种方式.
- 如果需要在iOS项目中自定义使用ffmpeg, 以及修改一些ffmpeg中的源码以适应项目,使用第二种方式.
阅读前提:
- 音视频基础
- 基本终端命令行
- FFmpeg基础
注意: 文本仅仅编译真机使用的arm64环境,所以模拟器下无法运行项目,如需添加其他架构自行更改两个脚本文件.
本文需要的所有安装包均在以下链接中,因为下文中官网地址是外网,没有VPN的同学可能下载会很慢.故本人整理好最新所有版本放在下面的百度云盘中.
链接: https://pan.baidu.com/s/1nYBQUi8drEpkjmwlIpbetQ 提取码: ercw
1.下载 gas-preprocessor
此文件是编译FFmpeg必备的脚本文件,使用如下命令将其拷贝进bin下
cp -f /Users/tomxiang/h264/gas-preprocessor-master/gas-preprocessor.pl /usr/local/bin/
2.安装 yasm
Yasm
是一个完全重写的 NASM
汇编并且支持x86和AMD64指令集.
brew install yasm
3. 下载 x264-iOS编译脚本 及 源码
-
下载x264编译脚本解压后如下
-
然后下载最新版源码解压后如下
-
将源码文件夹改名为
x264
并放至编译脚本文件夹(x264-ios-master
)下
因为编译脚本中指定文件目录为 x264
,所以需要改名,也可以改编译脚本
最好手动强制设置下GCC位置,否则可能会报错,然后执行命令:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/ ./build-x264.sh
- 注意
No working C compiler found
: 新版mac直接编译会报错,原因是gcc一些必要 工具 找不到.可能是xcode位置换了的原因,因为我们主要使用真机调试,所以我们在编译脚本中只保留arm64即可,如下修改后,可以直接编译通过. 不过像模拟器这样的设置是无法使用x264的,因为我们相当于仅编译了真机所需的库.
ARCHS="arm64 x86_64 i386 armv7 armv7s" 改为如下 ARCHS="arm64"
执行完成之后可以看到生成了x264-iOS文件夹
4. 下载 FFmpeg-iOS编译脚本 及 源码
注意: 在这里可以仅下载FFmpeg-iOS编译脚本,不用下载源码,执行脚本会自动下载源码,如果不想每次自动下载,可以手动下载源码,稍微修改下FFmpeg编译脚本即可.这里不做过多说明.
修改脚本( build-ffmpeg.sh
文件)内容
x264编译好的文件夹必须在当前目录并且命名为fat-x264,所以我们第3步编译后生成的x264-iOS文件夹改名成fat-264,放在FFmpeg-iOS-build-script这个文件夹中。目录结构如下:
并修改如下内容
CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode" 修改为 CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
因为我们在上一步中仅仅编译arm64的x264,所以这里我们也仅仅编译arm64的FFmpeg.稍微修改脚本文件即可.
ARCHS="arm64 armv7 x86_64 i386" 修改为 ARCHS="arm64"
编译脚本文件
./build-ffmpeg.sh
5. Xcode编译
- Xcode新建iOS项目
新建一个iOS工程,然后将 ViewController.m
重命名为 ViewController.mm
,因为FFmpeg中涉及C,C++混编,所以需要做此操作.
- 将FFmpeg编译好的头文件与库拉进项目中,并在主控制器测试代码,此时会有一大堆错误抛出,下面逐个解决
- 添加依赖库
注意: FFmpeg源码中调用了一些iOS系统的库,所以,我们必须将依赖的库导入项目中.
- 在Build Setting中禁止Bitcode
- 在Build Setting中设置头文件与库的位置
这里特别要注意,因为在大多数项目中以及FFmpeg自身源代码中,都是以以下格式来导入的头文件
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Linux 搭建 Android 编译构建环境
- AndroidStudio 3.0 NDK开发1——环境搭建与编译
- 全文搜索引擎ElasticSearch源码编译和Debug环境搭建
- 终极解决:window环境下vscode搭建go语言编译环境
- 开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境
- 使用gulp+browser-sync搭建Sass自动化编译以及自动刷新所需要的插件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
实现领域驱动设计
Vaughn Vernon / 滕云 / 电子工业出版社 / 2014-3 / 99.00元
领域驱动设计(DDD)是教我们如何做好软件的,同时也是教我们如何更好地使用面向对象技术的。它为我们提供了设计软件的全新视角,同时也给开发者留下了一大难题:如何将领域驱动设计付诸实践?Vaughn Vernon 的这本《实现领域驱动设计》为我们给出了全面的解答。 《实现领域驱动设计》分别从战略和战术层面详尽地讨论了如何实现DDD,其中包含了大量的最佳实践、设计准则和对一些问题的折中性讨论。《实......一起来看看 《实现领域驱动设计》 这本书的介绍吧!