FFmpeg编译和使用问题总结
来源:互联网 发布:阳光网络伴我成长 编辑:程序博客网 时间:2024/04/25 17:53
最近使用ffmpeg的软解码,第一步当然就是编译了,编译过程中遇到各种各样的问题,如下是正确编译步骤:
export NDK_HOME=/home/wugn/ffmpeg-3.3.1/android-ndk-r10e
export PATH=$NDK_HOME:$PATH
NDK=/home/wugn/ffmpeg-3.3.1/android-ndk-r10e
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
PREFIX=/home/wugn/ffmpeg-3.3.1/androidNDK
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static --disable-doc --disable-ffmpeg --disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
build_one
1、裁剪
我们知道FFmpeg库是一个非常庞大的库,包括编码,解码以及流媒体的支持等,如果不做裁剪全部编译进来的话,最后生成的静态库会很大。实际使用中我们可能只想用到解码(例如播放器),因此我们可以使用相关选项指定编译时禁用编码部分。当然我们还可以做进一步的裁剪,例如只打开部分常用格式的解码,禁用掉其他的解码,这样编译出来的静态库将会更小。
要想裁剪,我们的先知道有哪些部分,使用下面的命令可以查看FFMpeg库支持的组件列表。
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocol
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
我们可以根据实际需要把不用的部分都禁用掉,这样编译快,包也会比较小,常用的裁剪选项如下:
--disable-doc
do
not build documentation
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffserver disable ffserver build
--disable-network disable network support [no]
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel
举个例子,如果我们需要做一款本地视频播放器,那么我们可以使用如下配置:
当然你还可以根据帮助列表进行更细粒度的裁剪,例如只支持哪几种格式的解码等等。
2、指定编译环境
FFMpeg作为一个跨平台的库,不同的平台,不同的人的计算机上编译器的路径都可能不尽相同,所以我们需要为编译脚本指定编译器的路径。同事我们还可以指定其他编译选项,如是否交叉编译,目标平台系统,CPU架构,需要依赖的其他库的路径已经指定是否禁用汇编优化等。
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS []
--cc=CC use C compiler CC [gcc]
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS []
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
--arch=ARCH select architecture []
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
--disable-asm disable all assembler optimizations
sysroot即iOS SDK的路径,注意编译真机版本的库时需要使用iPhoneOS.platform中SDK的路径,编译模拟器版本的库使用iPhoneSimulator.platform中SDK的路径。target-os填写darwin(苹果系统的内核),arch可以根据具体的情况添加i386(模拟器),armv6,armv7等。cpu根据具体类型可填写cortex-a8,cortox-a9,i386等。
3、指定静态库的安装路径
指定执行make install命令时编译好的静态库和相关头文件拷贝到的位置,即FFmpeg库编译后输出的路径。通常我们只需要设置“--prefix=PREFIX”选项即可。例如我们需要将最后生成静态库的路径指向“build/armv7”下,则设置--prefix="build/armv7";
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- iOS: FFMpeg编译和使用问题总结
- iOS: FFmpeg编译和使用问题总结
- FFmpeg编译和使用问题总结
- ffmpeg编译问题总结
- FFmpeg 编译安装使用总结
- LoadRunner12使用教程(五)——关联的使用
- HDU_1015_Safecracker(dfs)
- lua底层创建继承类,类,多级继承,
- 有关字符串的一些方法
- Linux学习笔记 --链路聚合
- FFmpeg编译和使用问题总结
- svn如何使用import目录作为工作拷贝+我的svn学习笔记
- Android进阶之路
- 魔法阵——数论
- CCA Spark and Hadoop Developer (CCA175) 公开课
- node的安装和配置
- jQuery库冲突解决办法
- [leetcode: Python]441. Arranging Coins
- 我与python约个会:15编程进阶~函数的返回值