`

android使用ffmpeg库

 
阅读更多
1.建立一个安卓工程,创建jni目录,将上一篇文章中的库和头文件拷贝到jni目录中,并创建Android.mk文件.并创建一个main.c
2.工程目录如下图



3.main.c文件内容
#include <string.h>
#include <jni.h>
#include <dlfcn.h>
#include <android/log.h>
#include "libavcodec/avcodec.h"


#define TAG "kx_ffmpeg"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__)
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__)

jint Java_com_kk_xx_ffmpeg_FFMPEGInterface_test(JNIEnv *env, jobject obj, jint codecID)
{
                AVCodec *codec = NULL;

                /*register all formats and codecs */
                av_register_all();

                codec= avcodec_find_decoder(codecID);

                if(codec != NULL)
                {
                       return 0;
                }
                else
                {
                      return -1;
                }
}


4.Android.mk内容
LOCAL_PATH := $(callmy-dir)
MY_PATH := /home/kangxian/FFMPEG/ffmpeg_android/testFFMPEG/app/jni
MY_INCLUDE_PATH := /home/kangxian/FFMPEG/ffmpeg_android/testFFMPEG/app/jni/prebuilt
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef

$(warning $(MY_PATH))

include $(CLEAR_VARS)
LOCAL_MODULE := avcodec-57-prebuilt
LOCAL_SRC_FILES := $(MY_PATH)/prebuilt/libavcodec-57.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=avdevice-57-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavdevice-57.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=avfilter-6-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavfilter-6.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=avformat-57-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavformat-57.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=  avutil-55-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavutil-55.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=  avswresample-2-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libswresample-2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=  swscale-4-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libswscale-4.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE :=kx_ffmpeg
LOCAL_SRC_FILES := $(MY_PATH)/main.c
LOCAL_C_INCLUDES := $(MY_INCLUDE_PATH)

LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid -L/home/kangxian/NDK/android-ndk-r10/platforms/android-9/arch-arm/usr/lib
LOCAL_SHARED_LIBRARIES:= avcodec-57-prebuilt avdevice-57-prebuilt avfilter-6-prebuilt avformat-57-prebuilt avutil-55-prebuilt

include $(BUILD_SHARED_LIBRARY)

5.切换到jni目录,执行ndk-build,如果没有错误,则会在libs目录下生成7个so库,如下图:



6.安卓可用的jni库就编译完成了,将7个库拷贝到安卓工程试试,如果这个jni函数返回0,证明我们编译的ffmpeg库是可用的。
7.建立和jni函数保持一致的包名和类名,如下图


8.FFMPEGInterface.java的内容
package com.kk.xx.ffmpeg;

/**
 * Created by Administrator on 2017/3/14.
 */

public class FFMPEGInterface {
    static{
        System.loadLibrary("avutil-55");
        System.loadLibrary("avcodec-57");
        System.loadLibrary("swresample-2");
        System.loadLibrary("avformat-57");
        System.loadLibrary("swscale-4");
        System.loadLibrary("avfilter-6");
        System.loadLibrary("avdevice-57");
        System.loadLibrary("kx_ffmpeg");
    }

    public static native int test(int codecID);
}

  • 大小: 18.2 KB
  • 大小: 15.4 KB
  • 大小: 16 KB
分享到:
评论

相关推荐

    android ffmpeg so库 下载

    首先,FFmpeg库在Android上使用时需要编译为特定架构的动态链接库(.so文件),因为Android支持多种处理器架构,例如arm64-v8a、armeabi、armeabi-v7a、x86和x86_64。这些文件夹分别对应了不同的CPU架构,确保了...

    Android ffmpeg .a .so库(ffmpeg 4.4.1)

    在Android平台上,FFmpeg库通常以静态库(.a)和动态库(.so)的形式存在,以支持不同的CPU架构。在您提供的信息中,`arm64-v8a`和`armeabi-v7a`分别对应了两种常见的Android架构:一种是针对64位处理器的ARMv8架构...

    android FFmpeg库 .SO库文件(版本:4.1.3)

    在Android平台上,FFmpeg库被广泛用于音视频的解码、编码、转码、流媒体处理等任务。本文将深入探讨FFmpeg在Android上的应用,以及如何使用提供的`.SO`库文件(版本4.1.3)。 1. **FFmpeg简介** FFmpeg是一个跨...

    Android测试FFmpeg库例子

    在Android平台上,通过NDK(Native Development Kit)技术,我们可以将FFmpeg库集成到Android应用中,进行原生级别的音视频处理。下面将详细讲解Android调用FFmpeg库进行版本查询的操作及其相关知识。 1. Android ...

    android ffmpeg rtsp播放

    总的来说,"android ffmpeg rtsp播放"涉及到Android原生开发、FFmpeg库的移植和使用、RTSP协议解析以及Android多媒体框架的深入理解和应用。开发者需要具备扎实的C/C++编程基础,熟悉Android NDK开发环境,以及对...

    Android FFmpeg 6.1+FFmpeg 4.0.2

    2. **Android上的FFmpeg**:在Android平台上使用FFmpeg需要进行一些额外的配置工作,包括编译FFmpeg库以适应Android的NDK环境,创建适用于Android的静态或动态库。动态库(.so文件)通常体积较小,但需要在运行时...

    ffmpeg6.0 android 编译库

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

    Android平台使用的FFmpeg静态库版本4.4.2。支持RTP拉流

    其他说明:在网上没有找到android平台的FFmpeg库,就自己编译了一个,我用的事RTP拉流的功能,教程上说功能挺全的但是其他的功能没有使用过。本人的开发环境为:Qt For Android,感兴趣的朋友见链接:...

    android平台ffmpeg的库和头文件

    在Android平台上,FFmpeg库和头文件的使用对于开发涉及音视频处理的应用至关重要。本篇将深入探讨如何在Android平台上集成和使用FFmpeg,尤其是针对arm64-v8a和armeabi-v7a这两种常见的Android架构。 首先,我们...

    android平台ffmpeg动态库

    标题中的“android平台ffmpeg动态库”指的是在 Android 设备上运行的 FFmpeg 库,这些库是经过特定优化以适应 Android 的操作系统环境。动态库文件通常以 .so (Shared Object) 结尾,它们是可执行代码的一部分,可以...

    Android ffmpeg so库

    在Android项目中使用FFmpeg库,首先需要获取到适用于Android的预编译SO库。描述中提到的"最新的so库"意味着这个压缩包提供了最新版本的FFmpeg,开发者可以利用这些库实现对多媒体文件的高级操作,例如视频裁剪、合并...

    xamarin-android-ffmpeg:Xamarin Android FFMpeg绑定

    从Android 6.0开始,严格禁止text relocations , ffmpeg使用的许多源文件都使用text relocations因此,除非ffmpeg重写大型库并将其替换为替代text relocations否则ffmpeg将永远无法在未来的android构建中运行。...

    android ffmpeg so库文件

    在Android平台上,FFmpeg库通常通过JNI(Java Native Interface)与Java代码交互,利用NDK(Native Development Kit)进行原生C/C++代码的编译和运行,以实现对音视频的高效处理。 标题“android ffmpeg so库文件”...

    Android ffmpeg库

    本文将详细介绍如何在 Android 开发中集成并使用 FFmpeg 库。 首先,我们要理解 FFmpeg 的基本结构。FFmpeg 包含了多个组件,如 libavcodec(编码解码库)、libavformat(容器格式处理库)、libavfilter(滤镜库)...

    FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发

    FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发。 FFMPEG使用NDK_R19C编译。 这是一个简单的DEMO工程,可以直接使用QT打开,编译部署到Android设备运行。 注意: 这个工程...

    FFmpeg7.0 安卓静态库+动态库

    在 Android 应用中使用 FFmpeg,通常需要将 FFmpeg 库编译为适合 Android 的版本,这包括静态库(.a 文件)和动态库(.so 文件)。静态库可以将所有依赖一次性链接到应用中,而动态库则是在运行时加载。这两种方式...

    Android 使用 FFmpeg (一)——编译.so文件Demo

    在C/C++源文件中,使用`JNIEXPORT`和` JNICALL`宏定义JNI接口的实现,调用FFmpeg库中的相应函数。 9. **加载.so库** 在Java代码中,使用`System.loadLibrary("ffmpeg")`加载.so库。 10. **创建FFmpeg Demo** 在...

    Android 编译ffmpeg+测试工程

    4. **JNI接口**:在Android应用中调用FFmpeg库,需要通过Java Native Interface (JNI) 来创建C/C++与Java之间的桥梁。在JNI中定义函数,使得Java代码可以调用FFmpeg的C/C++函数。 5. **音视频处理API**:理解FFmpeg...

    Android平台集成ffmpeg最简单demo

    在Android平台上集成FFmpeg库,可以为应用提供强大的音视频处理功能,如解码、编码、转码、裁剪、合并等。以下是一份详细的步骤和知识点解析,以帮助你理解如何在Android项目中实现一个最简单的FFmpeg demo。 1. **...

    android编译ffmpeg库的demo【内置已编译好的SO文件】

    在Android应用中使用编译好的FFmpeg库,你需要在Java层创建JNI接口,通过JNI函数调用C/C++的FFmpeg API。例如,你可以创建一个`NativeFFmpeg.java`文件声明JNI方法,然后在对应的C/C++源码中实现这些方法。使用`...

Global site tag (gtag.js) - Google Analytics