参考文章

1. 编译环境

NDK:android-ndk-r15c

FFMPEG: ffmpeg-3.4.4

Android P: 21(该环境限制最少21)

Ubuntu:18.0.1

部分安装库

sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \ libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \ libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev

2. 下载ffmpeg到本地,配置编译脚本

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

cd ffmpeg

修改configure文件,方便自动导出熟悉的文件名称

#修改前,方便.so库自动生成我们熟知的命名

#SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'

#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'

#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'

#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'

#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

#修改后,

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'

LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'

SLIB_INSTALL_LINKS='$(SLIBNAME)'

arm编译脚本如下,替换下面编译平台NDK目录成你自己的

#!/bin/bash

make clean

export NDK=/home/felix/wd500g/android-sdk/android-ndk-r14b

export SYSROOT=$NDK/platforms/android-21/arch-arm/

export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

export CPU=arm

export ARCH=arm

export PREFIX=$(pwd)/android/$CPU

export ADDI_CFLAGS="-marm"

./configure --target-os=linux \

--prefix=$PREFIX \

--enable-shared \

--disable-static \

--disable-x86asm \

--arch=arm \

--disable-doc \

--disable-symver \

--enable-gpl \

--disable-ffplay \

--disable-ffprobe \

--disable-ffserver \

--disable-symver \

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

--enable-cross-compile \

--sysroot=$SYSROOT \

--extra-cflags="-Os -fpic $ADDI_CFLAGS" \

--extra-ldflags="$ADDI_CFLAGS" \

$ADDITIONAL_CONFIGURE_FLAG

make clean

make

make install

3. 问题修复(限于该环境配置):

将libavcodec/opus_pvq.c文件的变量B0改成b0

将libavcodec/hevc_mvs.c文件的变量B0改成b0,xB0改成xb0,yB0改成yb0

将libavcodec/aaccoder.c文件B0变量替换成b0

4. 如何裁切

通过 --help,可以查看当前配置可以添加或者删除的功能

/configure --help

如下:

Configuration options:

--disable-static do not build static libraries [no]

--enable-shared build shared libraries [no]

--enable-small optimize for size instead of speed

--disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)

--enable-gray enable full grayscale support (slower color)

--disable-swscale-alpha disable alpha channel support in swscale

--disable-all disable building components, libraries and programs

--disable-autodetect disable automatically detected external libraries [no]

Program options:

--disable-programs do not build command line programs

--disable-ffmpeg disable ffmpeg build

--disable-ffplay disable ffplay build

--disable-ffprobe disable ffprobe build

Documentation options:

--disable-doc do not build documentation

--disable-htmlpages do not build HTML documentation pages

--disable-manpages do not build man documentation pages

--disable-podpages do not build POD documentation pages

--disable-txtpages do not build text documentation pages

Component options:

--disable-avdevice disable libavdevice build

--disable-avcodec disable libavcodec build

--disable-avformat disable libavformat build

--disable-swresample disable libswresample build

--disable-swscale disable libswscale build

--disable-postproc disable libpostproc build

--disable-avfilter disable libavfilter build

--enable-avresample enable libavresample build (deprecated) [no]

--disable-pthreads disable pthreads [autodetect]

--disable-w32threads disable Win32 threads [autodetect]

--disable-os2threads disable OS/2 threads [autodetect]

--disable-network disable network support [no]

--disable-dct disable DCT code

--disable-dwt disable DWT code

--disable-error-resilience disable error resilience code

--disable-lsp disable LSP code

--disable-lzo disable LZO decoder code

--disable-mdct disable MDCT code

--disable-rdft disable RDFT code

--disable-fft disable FFT code

--disable-faan disable floating point AAN (I)DCT code

--disable-pixelutils disable pixel utils in libavutil

5. ffmpeg配置不同扩展功能

因为功能分离的缘故,在使用ffmpeg编译集成不同功能时需要下载关联扩展库,如libmp3lame

以libmp3lame为例:(不安装报错:ERROR: libmp3lame >= 3.98.3 not found)

前往MP3lame官网下载:http://lame.sourceforge.net/

安装:

tar zxf lame-3.100.tar.gz

cd lame-3.100

./configure

make

sudo make install

An assembler used by some libraries.

cd ~/ffmpeg_sources && \

wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2 && \

tar xjvf nasm-2.13.03.tar.bz2 && \

cd nasm-2.13.03 && \

./autogen.sh && \

PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \

make && \

make install

Yasm

An assembler used by some libraries.

If your repository provides yasm version ≥ 1.2.0 then you can install that instead of compiling:

sudo apt-get install yasm

Otherwise you can compile:

cd ~/ffmpeg_sources && \

wget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \

tar xzvf yasm-1.3.0.tar.gz && \

cd yasm-1.3.0 && \

./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \

make && \

make install

libx264

H.264 video encoder. See the H.264 Encoding Guide for more information and usage examples.

Requires ffmpeg to be configured with --enable-gpl --enable-libx264.

If your repository provides libx264-dev version ≥ 118 then you can install that instead of compiling:

sudo apt-get install libx264-dev

Otherwise you can compile:

cd ~/ffmpeg_sources && \

git -C x264 pull 2> /dev/null || git clone --depth 1 https://git.videolan.org/git/x264 && \

cd x264 && \

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \

PATH="$HOME/bin:$PATH" make && \

make install

libx265

H.265/HEVC video encoder. See the H.265 Encoding Guide for more information and usage examples.

If your repository provides libx265-dev version ≥ 68 then you can install that instead of compiling:

sudo apt-get install libx265-dev libnuma-dev

Otherwise you can compile:

sudo apt-get install mercurial libnuma-dev && \

cd ~/ffmpeg_sources && \

if cd x265 2> /dev/null; then hg pull && hg update; else hg clone https://bitbucket.org/multicoreware/x265; fi && \

cd x265/build/linux && \

PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \

PATH="$HOME/bin:$PATH" make && \

make install

libvpx

VP8/VP9 video encoder/decoder. See the VP9 Video Encoding Guide for more information and usage examples.

Requires ffmpeg to be configured with --enable-libvpx.

If your repository provides libvpx-dev version ≥ 1.4.0 then you can install that instead of compiling:

sudo apt-get install libvpx-dev

Otherwise you can compile:

cd ~/ffmpeg_sources && \

git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \

cd libvpx && \

PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \

PATH="$HOME/bin:$PATH" make && \

make install

libfdk-aac

AAC audio encoder. See the AAC Audio Encoding Guide for more information and usage examples.

Requires ffmpeg to be configured with --enable-libfdk-aac (and --enable-nonfree if you also included --enable-gpl).

If your repository provides libfdk-aac-dev then you can install that instead of compiling:

sudo apt-get install libfdk-aac-dev

Otherwise you can compile:

cd ~/ffmpeg_sources && \

git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \

cd fdk-aac && \

autoreconf -fiv && \

./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \

make && \

make install

libmp3lame

MP3 audio encoder.

Requires ffmpeg to be configured with --enable-libmp3lame.

If your repository provides libmp3lame-dev version ≥ 3.98.3 then you can install that instead of compiling:

sudo apt-get install libmp3lame-dev

Otherwise you can compile:

cd ~/ffmpeg_sources && \

wget -O lame-3.100.tar.gz https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz && \

tar xzvf lame-3.100.tar.gz && \

cd lame-3.100 && \

PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && \

PATH="$HOME/bin:$PATH" make && \

make install

libopus

Opus audio decoder and encoder.

Requires ffmpeg to be configured with --enable-libopus.

If your repository provides libopus-dev version ≥ 1.1 then you can install that instead of compiling:

sudo apt-get install libopus-dev

Otherwise you can compile:

cd ~/ffmpeg_sources && \

git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \

cd opus && \

./autogen.sh && \

./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \

make && \

make install

libaom

AV1 video encoder/decoder:

cd ~/ffmpeg_sources && \

git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \

mkdir aom_build && \

cd aom_build && \

PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \

PATH="$HOME/bin:$PATH" make && \

make install

FFmpeg

cd ~/ffmpeg_sources && \

wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \

tar xjvf ffmpeg-snapshot.tar.bz2 && \

cd ffmpeg && \

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \

--prefix="$HOME/ffmpeg_build" \

--pkg-config-flags="--static" \

--extra-cflags="-I$HOME/ffmpeg_build/include" \

--extra-ldflags="-L$HOME/ffmpeg_build/lib" \

--extra-libs="-lpthread -lm" \

--bindir="$HOME/bin" \

--enable-gpl \

--enable-libaom \

--enable-libass \

--enable-libfdk-aac \

--enable-libfreetype \

--enable-libmp3lame \

--enable-libopus \

--enable-libvorbis \

--enable-libvpx \

--enable-libx264 \

--enable-libx265 \

--enable-nonfree && \

PATH="$HOME/bin:$PATH" make && \

make install && \

hash -r

Now re-login or run the following command for your current shell session to recognize the new ffmpeg location:

source ~/.profile

Compilation and installation are now complete and ffmpeg (also ffplay, ffprobe, lame, x264, & x265) should now be ready to use. The rest of this guide shows how to update or remove FFmpeg.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐