Ubuntu编译Android使用的FFmpeg
本文介绍在Ubuntu平台编译FFmpeg库,用于Android使用。前提需要配置好NDK的环境。可以参考之前的文章Android NDK环境搭建。 下载FFmpeg在官网下载FFmpeg源码,https://ffmpeg.org/download.html 本文基于FFmpeg2.8进行编译。 将下载的文件解压,得到 修改configure文件由于FFmpeg默认生成的库文件格式为libavcodec.so.xx.xx.x。其中的xx就是主副版本号,这种格式在Ubuntu下使用是没有问题的,但是在Android下开发使用,并不把其作为有效的库文件。所以需要修改其他生成的文件名的格式。 通过修改configure文件要实现,打开configure,找到如下内容: 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)' 编译生成类库基本的编译过程是configure,make,make install。其中configure的配置文件根据需要进行配置,如果是第一次使用,可以按如下进行配置。如果你不是第一次使用,相信你对于配置的参数应该已经知道自己需要哪些功能。 在与ffmpeg相同级别建立,编译脚本文件build.sh #!/bin/bash NDK=/home/mn/bin/android-ndk-r15b SYSROOT=$NDK/platforms/android-16/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 PREFIX=../output ADDI_CFLAGS="-marm" # --disable-symver - disable symbolic versioning function build_one { ./configure --prefix=$PREFIX --enable-shared --enable-small --disable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-symver --target-os=linux --arch=arm --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --enable-cross-compile --sysroot=$SYSROOT --extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" $ADDITIONAL_CONFIGURE_FLAG make clean make -j4 make install } cd ffmpeg build_one 在脚本的开始处定义了一些变量,其他
执行如下命令进行编译: $ chmod u+x build.sh $ ./build.sh 等待编译结束。在 libavcodec-57.so libavcodec.so libavdevice-57.so libavdevice.so libavfilter-6.so libavfilter.so libavformat-57.so libavformat.so libavutil-55.so libavutil.so libswresample-2.so libswresample.so libswscale-4.so libswscale.so pkgconfig 错误处理如果在编译的过程中出现了错误,查看 By 枫竹梦 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |