热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NDK开发Ubuntu下利用NDK编译ffmpeg+x264+fdkaac

由于FFmpeg、x264、Fdk-aac的版本问题,所以编译的时候有很多坑编译顺序:首先利用脚本分别编译x264和fdk-aac库,生成

由于FFmpeg、x264、Fdk-aac的版本问题,所以编译的时候有很多坑
编译顺序:
首先利用脚本分别编译x264和fdk-aac库,生成头文件(.h)与静态库文件(.a/.la)。
将FFmpeg的外部链接设置为两个库的include与llib,也可将两个库的头文件和库文件分别放在一起
首先

FFmpeg编译脚本

这是在一个课程的脚本基础上改的

#!/bin/bash
echo "进入编译ffmpeg脚本"
NDK=/home/wzh/NDK/android-ndk-r14b
#5.0
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armv7-a#输出路径
PREFIX=/home/wzh/NDK/ffmpeg-3.4.2/android
#x264、fdk-aac的头文件以及.a(静态库)文件路径
EXTRA_CFLAGS="-I/home/wzh/NDK/android/include/"
EXTRA_LDFLAGS="-L/home/wzh/NDK/android/lib"
function buildFF
{echo "开始编译ffmpeg"./configure \--prefix=$PREFIX \--target-os=android \#交叉编译--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--arch=arm \--cpu=$CPU \--sysroot=$PLATFORM \#编译器--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \--extra-libs=-ldl \--enable-shared \#使能fdk-aac库--enable-libfdk-aac \--enable-encoder=libfdk_aac \--enable-decoder=libfdk_aac \#使能X264库--enable-libx264 \--enable-encoder=libx264 \--enable-runtime-cpudetect \--enable-nonfree \--enable-neon \--enable-gpl \--enable-small \--enable-cross-compile \--enable-jni \--enable-mediacodec \--disable-debug \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-postproc \--disable-avdevice \--disable-symver \--disable-stripping \--extra-cflags=$EXTRA_CFLAGS \--extra-ldflags=$EXTRA_LDFLAGS make -j8make install echo "编译结束!"
}
#CFLAG="-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp "
buildFF

x264(20140916-2245-stable)编译脚本、网上找的微改

#!/bin/bash
NDK=/home/wzh/NDK/android-ndk-r14b
#5.0
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armv7-a
#输出路径
PREFIX=/home/wzh/NDK/android
function build_one
{./configure \--prefix=$PREFIX \--enable-static \--enable-shared \--enable-pic \--disable-cli \--host=arm-linux \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--sysroot=$PLATFORM
}
build_one

Fdk-aac(0.1.4)编译脚本、网找微改

NDK_HOME=/home/wzh/NDK/android-ndk-r14bSYSROOT=$NDK_HOME/platforms/android-21/arch-armANDROID_BIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-ARM_INC=$SYSROOT/usr/includeARM_LIB=$SYSROOT/usr/lib
#用前确认路径
LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -L$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib -L$ARM_LIB -lc -lgcc -lm -ldl " FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared"export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"export LDFLAGS="$LDFLAGS"export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"./configure $FLAGS \
--prefix='/home/wzh/NDK/android'

问题:
直接编译x264库的话会出现两个动态库 libx264.so 与 libx264.so.148
android会报错:找不到x264.so.148
原因是android识别不了文件格式,所以要先修改configure文件,由于在linux下编译,所以将最下面的SONAME值改成如图,删掉原有的.$API
在这里插入图片描述

ffmpeg编译时问题:找不到libx264或找不到fdk-aac
一般是由于路径设置的问题,如果路径设置正确,选项设置正确,那就可能是NDK/FFmpeg/Fdk-aac/x264之间版本不兼容造成的错误,更换版本可能发生奇迹!

最后生成的文件将输出到设置的输出文件路径,将include和lib的内容(.h文件与.so文件)拷贝到android工程的include与lib目录,配置好Cmake的相关库路径就可以使用了


推荐阅读
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 本文对常见的字符串哈希函数进行了全面分析,涵盖了BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash等多种算法。这些哈希函数在不同的应用场景中表现出各异的性能特点,通过对比其算法原理、计算效率和碰撞概率,为实际应用提供了有价值的参考。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 在 CentOS 6.6 系统中搭建 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的运行环境配置指南
    本文提供了在 CentOS 6.6 系统上配置 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的详细步骤。首先,确保本机环境为 CentOS 6.6,并使用阿里云的 YUM 源来安装必要的软件包,包括 gcc、gcc-c++、bison、pkgconfig 和 glib2-devel。这些软件包是构建和运行 MONO 环境的基础,确保系统能够顺利支持 ASP.NET 和 MVC 应用的部署和运行。 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
author-avatar
梨依籽_852
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有