二、验证ffmpeg ndk编译出来的so可行的简单例子
来源:互联网 发布:windows 照片管理软件 编辑:程序博客网 时间:2024/05/22 12:31
1.ffmpeg的编译请参考 一、ffmpeg编译成android使用的so库
2.在ndk路径下创建一个文件夹,如 ffmpegTest ,在ffmpegTest目录下再创建一个jni目录,此时目录结构如下:
lx@ubt:~/android-ndk-r13b/ffmpegTest$ lsjni3.将之前ffmpeg编译出来的include和lib目录拷至上面创建好的jni目录中:
lx@ubt:~/android-ndk-r13b/ffmpegTest/jni$ lsinclude lib4.用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 __cplusplusextern "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#endif7.拷贝该头文件,放到~/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 := avcodecLOCAL_SRC_FILES := lib/libavcodec-57.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := avdeviceLOCAL_SRC_FILES := lib/libavdevice-57.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := avfilterLOCAL_SRC_FILES := lib/libavfilter-6.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := avformatLOCAL_SRC_FILES := lib/libavformat-57.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := avutilLOCAL_SRC_FILES := lib/libavutil-55.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := postprocLOCAL_SRC_FILES := lib/libpostproc-54.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := swresampleLOCAL_SRC_FILES := lib/libswresample-2.soinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE := swscaleLOCAL_SRC_FILES := lib/libswscale-4.soinclude $(PREBUILT_SHARED_LIBRARY)#endinclude $(CLEAR_VARS)#编译生成的模块名 --> libFFmpeg-jni.soLOCAL_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 soLOCAL_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$ lslibavcodec-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.so11.拷贝这些so到eclipse工程下
12.修改FFmpegJNI.java文件:
13.MainActivity内容:
14.编译运行apk:
log输出OK
0 0
- 二、验证ffmpeg ndk编译出来的so可行的简单例子
- Android最简单的基于FFmpeg的例子(二)---测试编译好的SO库
- Android最简单的基于FFmpeg的例子(三)---编译FFmpeg成一个SO库
- Android最简单的基于FFmpeg的例子(三)---编译FFmpeg成一个SO库
- NDK编译ffmpeg的配置文件
- DWR最简单可行的例子
- ffmpeg的简单例子
- NDK so库的调用和编译
- NDK so库的调用和编译
- NDK so库的调用和编译
- NDK so库的调用和编译
- ndk编译android可用的libjpeg.so
- Android NDK的简单例子
- ffmpeg编译android的so库
- ffmpeg不同版本的NDK编译
- Android最简单的基于FFmpeg的例子(一)---编译FFmpeg类库
- Android最简单的基于FFmpeg的例子(一)---编译FFmpeg类库
- 基于移动平台的多媒体框架——NDK编译ffmpeg超简单方法
- 第十四周项目一数组大折腾(5)创建一个长度为16的整形数组a并初始化前15个元素,输入一个整数b,将b插入到a[0]位置(原有的数据往后“移动”)
- Android动画之属性动画基础用法
- TextArea里Placeholder换行问题
- MongoDB时间处理问题
- mvc3升级mvc4的方法记录
- 二、验证ffmpeg ndk编译出来的so可行的简单例子
- 图片等比缩放
- 数据库菜鸟学习之旅(二):Mysql自定义函数
- Facebook 开源人工智能环境CommAI-env,目标是实现人机之间的语言交流
- AndroidStudio中的图片资源存放位置以及drawable文件夹的创建方法
- ionic一些命令(完善)
- js+controller+service+mysql 动态树
- 触摸屏(TP)乱跳原因总结
- Linux--有名管道