二、验证ffmpeg ndk编译出来的so可行的简单例子

1.ffmpeg的编译请参考 一、ffmpeg编译成android使用的so库

2.在ndk路径下创建一个文件夹,如 ffmpegTest ,在ffmpegTest目录下再创建一个jni目录,此时目录结构如下:

lx@ubt:~/android-ndk-r13b/ffmpegTest$ ls
jni
3.将之前ffmpeg编译出来的include和lib目录拷至上面创建好的jni目录中:
lx@ubt:~/android-ndk-r13b/ffmpegTest/jni$ ls
include  lib
4.用eclipse创建一个android工程,如FFmpegTest

5.在工程中创建一个类,如 FFmpegJNI.java,并写个native方法











6.终端进入工程目录FFmpegTest/bin/classes/下,执行:

javah -classpath . -jni com.hoperun.ffmpegtest.FFmpegJNI
生成com_hoperun_ffmpegtest_FFmpegJNI.h头文件,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hoperun_ffmpegtest_FFmpegJNI */

#ifndef _Included_com_hoperun_ffmpegtest_FFmpegJNI
#define _Included_com_hoperun_ffmpegtest_FFmpegJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_hoperun_ffmpegtest_FFmpegJNI
 * Method:    avcodecLicense
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_hoperun_ffmpegtest_FFmpegJNI_avcodecLicense
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
7.拷贝该头文件,放到~/android-ndk-r13b/ffmpegTest/jni/目录下

8.在~/android-ndk-r13b/ffmpegTest/jni/目录下创建一个c文件,如com_hoperun_ffmpegtest_FFmpegJNI.c。内容如下:

#include "com_hoperun_ffmpegtest_FFmpegJNI.h"

#include <android/log.h>  
#include <libavcodec/avcodec.h>

#define LOG_TAG "FFMPEG"  
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)  
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,  LOG_TAG, __VA_ARGS__)

/*
 * Class:     com_hoperun_ffmpegtest_FFmpegJNI
 * Method:    avcodecLicense
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_hoperun_ffmpegtest_FFmpegJNI_avcodecLicense
  (JNIEnv *env, jobject obj) {
    LOGD("call Java_com_hoperun_ffmpegtest_FFmpegJNI_avcodecLicense\n");
	return (*env)->NewStringUTF(env,avcodec_license());
}
9.在~/android-ndk-r13b/ffmpegTest/jni/目录下创建一个Android.mk内容如下:
LOCAL_PATH := $(call my-dir)  

#begin 预编so模块,后面链接进来
include $(CLEAR_VARS)
LOCAL_MODULE    := avcodec
LOCAL_SRC_FILES := lib/libavcodec-57.so
include $(PREBUILT_SHARED_LIBRARY)

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

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

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

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

include $(CLEAR_VARS)
LOCAL_MODULE    := postproc
LOCAL_SRC_FILES := lib/libpostproc-54.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := swresample
LOCAL_SRC_FILES := lib/libswresample-2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := swscale
LOCAL_SRC_FILES := lib/libswscale-4.so
include $(PREBUILT_SHARED_LIBRARY)
#end

include $(CLEAR_VARS)

#编译生成的模块名 --> libFFmpeg-jni.so
LOCAL_MODULE    := FFmpeg-jni
#搜索的头文件路径
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
#需要编译的源文件
LOCAL_SRC_FILES := com_hoperun_ffmpegtest_FFmpegJNI.c 
#链接ffmpeg so模块
LOCAL_SHARED_LIBRARIES := avcodec avdevice avfilter avformat avutil postproc swresample swscale
#-llog 链接android的log so
LOCAL_LDLIBS += -llog 
  
include $(BUILD_SHARED_LIBRARY)  
10.执行如下命令编译:(只生成amreabi-v7a架构的)
lx@ubt:~/android-ndk-r13b/ffmpegTest/jni$ ../../ndk-build  APP_ABI="armeabi-v7a"
[armeabi-v7a] Compile thumb  : FFmpeg-jni <= com_hoperun_ffmpegtest_FFmpegJNI.c
[armeabi-v7a] Prebuilt       : libavcodec-57.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libavdevice-57.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libavfilter-6.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libavformat-57.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libavutil-55.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libpostproc-54.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libswresample-2.so <= jni/lib/
[armeabi-v7a] Prebuilt       : libswscale-4.so <= jni/lib/
[armeabi-v7a] SharedLibrary  : libFFmpeg-jni.so
[armeabi-v7a] Install        : libFFmpeg-jni.so => libs/armeabi-v7a/libFFmpeg-jni.so
[armeabi-v7a] Install        : libavcodec-57.so => libs/armeabi-v7a/libavcodec-57.so
[armeabi-v7a] Install        : libavdevice-57.so => libs/armeabi-v7a/libavdevice-57.so
[armeabi-v7a] Install        : libavfilter-6.so => libs/armeabi-v7a/libavfilter-6.so
[armeabi-v7a] Install        : libavformat-57.so => libs/armeabi-v7a/libavformat-57.so
[armeabi-v7a] Install        : libavutil-55.so => libs/armeabi-v7a/libavutil-55.so
[armeabi-v7a] Install        : libpostproc-54.so => libs/armeabi-v7a/libpostproc-54.so
[armeabi-v7a] Install        : libswresample-2.so => libs/armeabi-v7a/libswresample-2.so
[armeabi-v7a] Install        : libswscale-4.so => libs/armeabi-v7a/libswscale-4.so
生成的so库都在lx@ubt:~/android-ndk-r13b/ffmpegTest/libs/armeabi-v7a 目录下:
lx@ubt:~/android-ndk-r13b/ffmpegTest/libs/armeabi-v7a$ ls
libavcodec-57.so  libavdevice-57.so  libavfilter-6.so  libavformat-57.so  libavutil-55.so  libFFmpeg-jni.so  libpostproc-54.so  libswresample-2.so  libswscale-4.so
11.拷贝这些so到eclipse工程下
















12.修改FFmpegJNI.java文件:



















13.MainActivity内容:






















14.编译运行apk:

log输出OK

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值