ffmpeg编译 | 在苹果设备上玩转多媒体的第一步
2017-07-24 00:04
197 查看
ffmpeg,开源代码,运行起来后能完成格式获取、编解码、重采样、裁剪、缩放、录制等一系列的功能。
在能运行前,先编译。
build_ios.sh为编译脚本。
ffmpeg项目已经写好makefile文件,只需要在make前作configure(影响到makefile文件)即可。
具体还是可以参考这个开源的编译项目(ffmpeg编译,提供了android/ios的编译脚本):
https://github.com/yixia/FFmpeg-Vitamio.git
对应选项为–sysroot,xx/xx.sdk/,不要带usr/include。
在能运行前,先编译。
本文讲解,如何编译出在iOS设备上运行的ffmpeg静态库。
我使用的是mac机,以下都以macos环境为前提。(一)下载ffmpeg源码
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 或 curl -0 http://ffmpeg.org/releases/ffmpeg-${VERSION}.tar.bz2 tar jxvf ffmpeg-${VERSION}.tar.bz2 VERSION设置为最新的ffmpeg版本号。
(二)安装xcode并安装command Line Tools(保证有gcc或clang编译器,保证有sdk)。
(三)安装支持asm的环境(假设你要使用asm优化)
gas-preprocessor.pl: git clone git://github.com/mansr/gas-preprocessor.git sudo cp -f gas-preprocessor/gas-preprocessor.pl /usr/local/bin/ chmod +x /usr/local/bin/gas-preprocessor.pl yasm: brew install yasm 或: wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz tar zxvf yasm-1.2.0.tar.gz cd yasm-1.2.0/ cat INSTALL ./configure --prefix=/usr/local/yasm make sudo make install export PATH="$PATH:/usr/local/yasm/bin" --在.bash_profile增加
(四)写编译脚本,但推荐直接使用以下项目:
https://github.com/yixia/FFmpeg-Vitamio.gitbuild_ios.sh为编译脚本。
(五)运行编译脚本,编译出libffmpeg.a。把这个库与头文件拷贝到目标项目,尽情使用ffmegp的强大功能。
知识点
(1)ffmpeg的configure配置
configure: 指定指令集: --extra-cflags='-arch armv7s' --extra-ldflags='-arch armv7s' 指定cpu类型: --arch=arm --cpu=cortex-a9 #应该根据不同的指令集使用不同的cpu优化; #--arch=arm64,指定具体指令架构也可以 指定系统: --target-os=darwin 指定sdk: --sysroot=/Applications/Xcode.app/.../xxx.sdk 指定编译器: --cc=xxx/clang (以上几个是必不可少的) 指定库生成目录: --prefix=build 指定使用的muxer/demuxer/encoder/decoder等: --enable-muxer=mp4
(2)编译指令
make clean make make install (非必需) ar
(3)ffmpeg怎么做到不同平台都可以运行?
基于c语言编写,提供编译配置–可根据不同的平台进行编译(交叉编译),并生成平台相关的二进制库(如ELF或Mach-O文件等),这个库可以在不同的平台运行。ffmpeg项目已经写好makefile文件,只需要在make前作configure(影响到makefile文件)即可。
(4)ffmpeg性能优化的选择,怎么启用?
根据不同的指令集启用不同的选项,比如下面的选项:--disable-debug --optflags=-O3 --mfpu=neon --mfpu=vfpv4
具体还是可以参考这个开源的编译项目(ffmpeg编译,提供了android/ios的编译脚本):
https://github.com/yixia/FFmpeg-Vitamio.git
(5)编译出ffmpeg库后,怎么使用?
使用库(如.a文件/.so文件等)跟头文件。(6)ffmpeg编译时,为什么要指定平台的sdk(比如ios平台的sdk)?
ffmpeg使用到的c库函数、宏定义等等,都需要有基础sdk的支持,所以需要指定平台上的sdk。对应选项为–sysroot,xx/xx.sdk/,不要带usr/include。
(7)注意事项
配置选项extra-cflags跟extra-ldflags要指定-arch。 在xcode8.3.2(sdk为10.3)上,armv7/armv7s/arm64不能使用"-mfloat-abi=hard"选项,并且arm64要指定-mcpu=cortex-a53。 pkg-config用来管理依赖的库,它要查找/usr/local/lib/pkgconfig目录,使用里面的xx.pc文件。 比如rtmp在编译时,除了make,也要make install,才能把xxx.pc拷贝到这个目录。
相关文章推荐
- 基于移动平台的多媒体框架——NDK编译ffmpeg超简单方法
- 如何编译ffmpeg以支持dshow设备
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
- 如何编译ffmpeg以支持dshow设备
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- 如何编译ffmpeg以支持dshow设备
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
- 如何编译ffmpeg以支持dshow设备
- 如何编译ffmpeg以支持dshow设备
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- 编译最新ffmpeg2.0.1到iOS设备
- FFmpeg第一步--编译
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
- 解决编译ffmpeg时的错误
- 苹果建议开发者停用iOS设备唯一识别码
- FFmpeg之一编译ForAndroid
- 苹果研发可弯曲电池技术 未来iOS设备会更薄更美观