`
wiseideal
  • 浏览: 449802 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

FFmpeg Android部分的编译

 
阅读更多

编译的是最新版2.2.3。再说编译环境

操作系统 ubuntu14.04 32位(实在不建议使用64位 惨痛的教训)

adt:Build: v22.6.2-1085508

NDK:R9d

因为之前就看到有人提到0.8版会出现一些问题,这也难怪,所以开始目标就瞄准了最新的代码进行编译

 

首先下载FFmpeg源码,从http://ffmpeg.org/download.html 可以获取最新版的源码,不管是git或者直接下载解压都可以 下载完成后放入NDK目录下source文件夹 文件名大概位ffmpeg-2.2.3,

1.首先修改configuration文件,会直接影响到生成的so文件命名

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

 2.生成build_android.sh文件

#!/bin/bash
NDK=$HOME/Desktop/adt/android-ndk-r9d
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86
function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"
build_one

 首先需要注意的是NDK的目录,如果一再找不到某些编译器 例如g++ 可以试着SYSROOT以及TOOLCHAIN都写成绝对路径,编译如果失败 密切注意config.log文件,最下几行,看好log可以让你少走很多弯路,一味的机械的执行别人写的教程只会让你离成功编译越来越远,找到一条属于自己的路。之前系统64位编译时,会出现乱码,侥幸贼心不死,回到家以后又尝试了一下,一次编译过去,至此发现本地环境有问题,一样的代码一个的脚本,两个结果,没有精力深究,换到32位,一帆风顺。(家里是64位)

 

至此,应该创建了android文件夹 并且文件夹下有了arm文件夹。恭喜你,编译成功了。去掉lib中的link文件,就剩下调用了。

3.在android/arm目录下创建Android.mk文件 直接影响到后面项目中的加载以及调用。(放到source下就是为了在多个项目中统一调用)

LOCAL_PATH:= $(call my-dir)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= lib/libavcodec-55.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= libavformat
LOCAL_SRC_FILES:= lib/libavformat-55.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= lib/libswscale-2.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= lib/libavutil-52.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= lib/libavfilter-4.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE:= libwsresample
LOCAL_SRC_FILES:= lib/libswresample-0.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

  这里需要注意的是文件名 我在编译时filter已经到了-4 而参考的mk还是写的-3 不改会提示找不到文件

 

 

到现在 有了so文件 也有了so文件的声明 在项目里见效果吧  项目也只需引用该本地资源即可

LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE    := tutorial03
LOCAL_SRC_FILES := tutorial03.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil
 
include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-2.2.3/android/arm)

 

编译过程中也经历了无数的失败 也深刻认识到拿来注意多害人皱眉 弯路走多了不要紧 能吸取教训就行

 

我的指路明灯:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

 

分享到:
评论

相关推荐

    ffmpeg6.0 android 编译库

    标题“ffmpeg6.0 android 编译库”表明这是一个针对 Android 平台编译的 FFmpeg 版本 6.0,意味着它已经被配置并构建为适合 Android 应用程序使用的静态或动态库。这个版本可能包含了 FFmpeg 最新的功能和性能优化,...

    ffmpeg6.1安卓交叉编译库

    ffmpeg6.1安卓交叉编译库 解压查看FFmpegLib/src/main/jniLibs/ 目录下的 arm64-v8a armeabi-v7a x86 x86_64 工程里有调用的示例,可以直接编译。

    Android 编译ffmpeg+测试工程

    本项目“Android编译ffmpeg+测试工程”旨在帮助开发者在Android环境中集成并运行FFmpeg,以便进行多媒体处理任务。通过这个项目,我们可以学习到以下关键知识点: 1. **FFmpeg简介**:FFmpeg是一个开源的跨平台...

    基于ffmpeg4.3.1编译的android动态库--开启了openssl(支持https)

    ffmpeg版本4.3.1,openssl版本1.1.1i, android cup架构支持armeabi-v7a,arm64-v8a,x86,x86_64,ffmpeg和openssl都是基于Android API level 21编译的。自测播放本地视频文件,http视频文件和https视频文件均可正常...

    4.0.2的编译过的ffmpeg全款so for Android

    在这个“4.0.2的编译过的ffmpeg全款so for Android”压缩包中,包含的是预编译的动态链接库(.so文件),这些是FFmpeg库在Android上的二进制形式。动态链接库是Android应用可以直接调用的本地代码,它们负责执行底层...

    ijkplayer ffmpeg android独立编译.docx

    2. `android/contrib/tool/do-compile-ffmpeg.sh`: 这个脚本专注于 Android 平台的交叉编译,特别是与 ffmpeg 的编译相关的部分。它会调用 `./configure` 命令,并传递特定的参数来适应 Android 环境。 在给定的...

    FFmpeg Android 编译以及普通调用

    在Android平台上,FFmpeg的使用需要通过NDK(Native Development Kit)进行编译和调用,因为FFmpeg主要由C/C++编写,不能直接在Java层运行。本文将详细介绍如何在Android Studio项目中编译FFmpeg以及如何在应用程序...

    android studio下利用cmake编译ffmpeg库

    本篇文章将详细讲解如何在Android Studio 2.2.2环境下,利用CMake来编译并集成FFmpeg库。 首先,FFmpeg是一个开源的跨平台多媒体框架,它包含了多种用于处理音频、视频的库,如libavcodec(编码/解码)、...

    Android-NDK-clang 编译 FFmpeg 安卓设备能使用的FFmpeg库

    Ubuntu20系统,Android NDK-r21e 编译 FFmpeg4.2.4; 编译出libavcodec.so libavdevice.so、libavfilter.so、libavformat.so、libavutil.so、libswresample.so、libswscale.so;

    ffmpeg android库文件编译脚本

    build_android.sh ffmpeg编译android库的脚本,ffmpeg2.6、1.1.2编译正常

    android ffmpeg h264编译脚本

    3. **Android编译环境搭建** 在编译FFmpeg之前,首先需要安装并配置Android Studio、NDK、以及JDK。设置好`ANDROID_NDK_HOME`环境变量,指向NDK的安装路径。 4. **配置脚本** "build-scripts-of-ffmpeg-x264-for-...

    ffmpeg for Android编译好的库

    标题"ffmpeg for Android编译好的库"表明这是已经针对Android系统编译完成的FFmpeg库,可以直接用于Android应用程序的开发,免去了开发者自行编译的复杂过程。这通常涉及到交叉编译,因为需要将适用于Linux环境的...

    android ffmpeg x264编译脚本

    这篇我们将深入探讨如何在Android环境中编译FFmpeg并集成x264。 首先,你需要理解Android的NDK(Native Development Kit),这是一个用于开发原生C/C++代码的工具集,使得我们可以在Android平台上使用像FFmpeg这样...

    ffmpeg for Android包含头文件和编译好的so库 可直接使用

    标题中的“ffmpeg for Android包含头文件和编译好的so库 可直接使用”表明,这个压缩包是一个预配置的FFmpeg版本,专门为Android平台定制,包含了开发者进行音视频处理所需的所有必要组件。头文件用于编译时的链接,...

    ffmpeg全平台编译

    在本教程中,我们将探讨如何在多个平台上编译FFmpeg,特别关注Android平台,并支持h264软编码。这涉及到理解FFmpeg的源码结构、编译流程以及针对不同平台的配置选项。 首先,我们需要从FFmpeg官方网站下载源码,如...

    在Linux下编译FFmpeg+android ndk成功的脚本及so库

    在Android平台上,为了实现对音视频的处理,开发者通常需要将FFmpeg编译为适用于Android系统的动态链接库(.so文件)。在Linux环境下编译FFmpeg并集成到Android项目中,通常会借助于Android NDK(Native Development...

    android成功编译ffmpeg0.6

    在Android平台上编译FFmpeg 0.6是一个技术性较强的过程,涉及到多个步骤和知识点。FFmpeg是一个开源的音视频处理库,广泛应用于各种多媒体应用中。以下将详细阐述编译FFmpeg 0.6在Android上的过程及其相关知识点。 ...

    ubuntu 下 编译 ffmpeg for Android armv7-a armv8-a

    综上所述,"ubuntu下 编译 ffmpeg for Android armv7-a armv8-a"涉及到的知识点包括Ubuntu环境、FFmpeg项目、Android架构、交叉编译、NDK、配置脚本以及硬件加速等。通过这样的编译过程,我们可以创建针对Android...

    Android studio CMake 编译ffmpeg SO库 头文件 和 CMakeLists

    本文将详细讲解如何使用Android Studio和CMake编译FFmpeg库,生成SO共享库,并处理相关的头文件和CMakeLists配置。 首先,我们需要在Android Studio项目中引入CMake构建系统。打开`build.gradle`(Module级别)文件...

    FFmpegAndroid-master

    在FFmpegAndroid-master压缩包中,你可能找到以下关键组成部分: 1. **源代码**:FFmpeg的源代码被适配和优化以适应Android环境,包括修改配置脚本、编译选项以及链接库等。这些源代码将帮助你在Android应用中集成...

Global site tag (gtag.js) - Google Analytics