ffmpeg开发之编译forAndroid

ffmpeg是一个开源的,功能强大的音视频处理库,可以实现视频编解码,音频采集解码,现在很多的手机上的直播软件用的就是这个开源库。今天写一篇博客来记录自己编译的过程,以免忘记。

编译环境:

系统:Ubuntu 18.04.3 LTS(虚拟机 64位)

FFmpeg (4.1.3)

NDK(android-ndk-r15c)

make

集成步骤:

下载ffmpeg源码:ffmpeg下载地址

下载NDK工具:NDK下载地址

解压ffmpeg源码包,并改名为ffmpeg,同时解压NDK压缩包

修改配置文件

默认编译后的.so文件格式为:文件明+.so+三段版本号的格式比如libavformat.so.57.0.101。这样的文件格式不太符合我们的使用要求,而且即便是将这样的文件名称简单粗暴的删除.so后面的版本号,在实际使用时也无法编译。在ffmpeg目录下修改配置文件Configure 这个文件:

ffmpeg开发之编译forAndroid_第1张图片

修改之前

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_VERSION='$(SLINAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
配置修改完后开始编写编译脚本。

编写脚本:

在ffmpeg源码目录下创建一个.sh的编译脚本,脚本名称可以随意取,这里直接给出脚本内容:

make clean
NDK=../android-ndk-r17c
SYSROOT=$NDK/platforms/android-14/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
CPU=armv7-a
x264=./x264/
EXTRA_CFLAGS="-I./x264/include"
EXTRA_LDFLAGS="-L./x264/lib"
PREFIX=./libs
./configure \
        --target-os=android \
        --prefix=$PREFIX \
        --arch=arm \
        --cpu=armv7-a \
        --disable-doc \
        --disable-static \
        --disable-asm \
        --enable-cross-compile \
        --cross-prefix=$CROSS_PREFIX \
        --sysroot=$SYSROOT \
        --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
        --enable-version3 \
        --enable-pthreads \
        --disable-encoders \
        --disable-decoders \
        --disable-avdevice \
        --disable-network \
        --disable-symver \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-debug \
        --enable-neon \
        --enable-shared \
        --enable-small \
        --enable-libx264 \
        --enable-gpl \
        --enable-pic \
        --enable-jni \
        --enable-mediacodec \
        --enable-encoder=aac \
        --enable-encoder=gif \
        --enable-encoder=libopenjpeg \
        --enable-encoder=libmp3lame \
        --enable-encoder=libwavpack \
        --enable-encoder=mpeg4 \
        --enable-encoder=pcm_s16le \
        --enable-encoder=png \
        --enable-encoder=mjpeg \
        --enable-encoder=srt \
        --enable-encoder=subrip \
        --enable-encoder=yuv4 \
        --enable-encoder=text \
        --enable-decoder=aac \
        --enable-decoder=acc_latm \
        --enable-decoder=libopenjpeg \
        --enable-decoder=mp3 \
        --enable-decoder=mpeg4_mediacodec \
        --enable-decoder=pcm_s16le \
        --enable-decoder=flac \
        --enable-decoder=flv \
        --enable-decoder=gif \
        --enable-decoder=png \
        --enable-decoder=srt \
        --enable-decoder=xsub \
        --enable-decoder=yuv4 \
        --enable-decoder=vp8_mediacodec \
        --enable-decoder=h264_mediacodec \
        --enable-decoder=hevc_mediacodec \
        --enable-bsf=h264_mp4toannexb \
        --enable-bsf=hevc_mp4toannexb \
        --enable-protocols \
        --extra-cflags="$ADDI_CFLAGS -I$NDK/sysroot/usr/include/arm-linux-androideabi -isysroot $NDK/sysroot -fPIC -marm -march=armv7-a $EXTRA_CFLAGS" \
        --extra-ldflags="$ADDI_LDFLAGS $EXTRA_LDFLAGS" \
        $ADDITIONAL_CONFIGURE_FLAG


echo "end!"
                                                       

这里面包含了x264的合并到ffmpeg的操作,如果没有必要可以去掉。保存好文件,开始编译文件:

1、给文件授权:chmod 7777 xxxxx.sh(这个xxxx 是自己定义的编译文件名)

2、执行编译文件:./xxxxx.sh

3、执行 make 指令  (如果权限不足的情况下需要 执行 sudo make)

4、执行make install 指令 (如果权限不足的情况下需要 执行 sudo make install)

这四步就可以完成 ffmpeg 编译 成 so 动态库 生成的文件的路径就是编译文件中 PREFIX 这个值指定的位置

ffmpeg开发之编译forAndroid_第2张图片

编译成功的文件就在lib这个目录下。到此ffmpeg编译成so就完成了。

你可能感兴趣的:(ffmpeg之路)