FFmpeg4.14 NDK编译教程一篇足矣

编程入门 行业动态 更新时间:2024-10-10 19:23:40

FFmpeg4.14 NDK编译教程一篇<a href=https://www.elefans.com/category/jswz/34/1762879.html style=足矣"/>

FFmpeg4.14 NDK编译教程一篇足矣

不想自己编译的 点这里下载即可

编译环境

ubuntu-16.04.6

ffmpeg-4.1.4

ndk-r14b

1.下载解压好文件后配置ndk环境

在配置ndk环境前执行以下命令

apt-get update

apt-get install yasm

apt-get install pkg-config

apt-get install make

apt-get install make

sudo apt-get install gcc

配置NDK环境

set NDK env

export NDK_HOME=/home/用户/ndk路径

export PATH= N D K H O M E : NDK_HOME: NDKH​OME:PATH

source /etc/profile

2.打开FFmpeg的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)'

3.在FFmpeg文件中创建一个 build.sh 文件 编写文件的脚本

NDK 路径修改为自己的

#!/bin/bash

清空上次的编译

make clean
#填自己的NDK路径.
export NDK=/home/ffmpeg/ndk
function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \--prefix=$PREFIX \--enable-neon \--enable-hwaccels \--enable-gpl \--enable-postproc \--enable-shared \--enable-jni \--enable-mediacodec \--enable-decoder=h264_mediacodec \--disable-static \--disable-doc \--enable-ffmpeg \--disable-ffplay \--disable-ffprobe \--enable-avdevice \--disable-doc \--disable-symver \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv8-a
ARCH=arm64
CPU=armv8-a
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android#armv7-a
ARCH=arm
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android#x86
ARCH=x86
CPU=x86
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android#x86_64
ARCH=x86_64
CPU=x86-64
TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

4.命令行切换到FFmpge目录下赋予脚本执行权限
chmod 777 build.sh
执行脚本进行编译
./build.sh

编译过程中遇到的错误

make install 时提示没有权限可以用sudo make install 即可

遇到的错误

error: request for member 's_addr' in something not a structure or unionmreqs.imr_multiaddr.s_addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;^
libavformat/udp.c:292:32: error: incompatible types when assigning to type '__be32' from type 'struct in_addr'mreqs.imr_interface= ((struct sockaddr_in *)local_addr)->sin_addr;^
libavformat/udp.c:294:32: error: request for member 's_addr' in something not a structure or unionmreqs.imr_interface.s_addr= INADDR_ANY;^
libavformat/udp.c:295:29: error: request for member 's_addr' in something not a structure or unionmreqs.imr_sourceaddr.s_addr = ((struct sockaddr_in *)&sources[i])->sin_addr.s_addr;
                         ^

打开libavformat/udp.c 文件 注释掉 290行到295行这段代码

接下来耐心等待即可 啦啦啦

更多推荐

FFmpeg4.14 NDK编译教程一篇足矣

本文发布于:2024-02-14 08:24:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762931.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:足矣   教程   NDK

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!