android使用ffmpeg库

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


[img]http://dl2.iteye.com/upload/attachment/0123/7051/e148b035-fd5f-359c-b03f-6aef99e2172e.png[/img]
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库,如下图:

[img]http://dl2.iteye.com/upload/attachment/0123/7055/7a0c0320-5c78-3bcc-a8fa-7faf464ab95d.png[/img]

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

[img]http://dl2.iteye.com/upload/attachment/0123/7057/c1b62693-481e-3d79-8e0e-c646f0d233f4.png[/img]
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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值