您的位置:首页 > 移动开发 > Android开发

FFmpeg编译和使用问题总结

2017-05-16 18:03 453 查看
最近使用ffmpeg的软解码,第一步当然就是编译了,编译过程中遇到各种各样的问题,如下是正确编译步骤:

从官网下载源码:http://ffmpeg.org/download.html

目前下载的是ffmpeg-3.3.1.tar.bz2。

ndk使用的是android-ndk-r10e-linux-x86_64.zip版本。

1.在/etc/profile下加入ndk路径:

export NDK_HOME=/home/wugn/ffmpeg-3.3.1/android-ndk-r10e

export PATH=$NDK_HOME:$PATH

2.编译方法:执行如下build_android.sh,然后make,最后make install,生成的库和头文件放在所设PREFIX目录下。

#!/bin/bash 

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

3.make -j8

4.sudo make install

使用中注意一下:

 1、裁剪

  我们知道FFmpeg库是一个非常庞大的库,包括编码,解码以及流媒体的支持等,如果不做裁剪全部编译进来的话,最后生成的静态库会很大。实际使用中我们可能只想用到解码(例如播放器),因此我们可以使用相关选项指定编译时禁用编码部分。当然我们还可以做进一步的裁剪,例如只打开部分常用格式的解码,禁用掉其他的解码,这样编译出来的静态库将会更小。

  要想裁剪,我们的先知道有哪些部分,使用下面的命令可以查看FFMpeg库支持的组件列表。

  我们可以根据实际需要把不用的部分都禁用掉,这样编译快,包也会比较小,常用的裁剪选项如下:

  举个例子,如果我们需要做一款本地视频播放器,那么我们可以使用如下配置:

  


  当然你还可以根据帮助列表进行更细粒度的裁剪,例如只支持哪几种格式的解码等等。

 

  2、指定编译环境

  FFMpeg作为一个跨平台的库,不同的平台,不同的人的计算机上编译器的路径都可能不尽相同,所以我们需要为编译脚本指定编译器的路径。同事我们还可以指定其他编译选项,如是否交叉编译,目标平台系统,CPU架构,需要依赖的其他库的路径已经指定是否禁用汇编优化等。

  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";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息