Ubuntu编译调用FFmpeg so库Api方法例子
2016-08-20 16:12
260 查看
作者:谭东
时间:2016年8月19日
环境:Ubuntu 16.04 LTS最新版
NDK版本:android-ndk-r12b
FFMPEG版本:FFmpeg 3.0.2 “Einstein”
配置好Ubuntu的Android Studio后,我们接下来启动和创建我们的FFMPEG程序吧。
Ctrl+Alt+T 启动命令终端,跳转到android-studio/bin目录下,然后执行:$./studio.sh即可启动我们的Android Studio了。
新建FFMPEG项目,名字自己随意。
主要就是jni目录了。include里面包含我们的功能需要调用的.h和.c的头文件和源文件。我们可以把之前编译后的源码里的include拷贝进去即可。如果有其他的功能调用,可以加入对应的目录的缺少的.h和.c文件。
之后,将编译好的ffmpeg的so库放到jni目录下。接下来在Jni目录下新建ffmpeg-jni.c文件,供我们写自己的需求方法,调用ffmpeg,编译另外的需要的so库。
我这里的ffmpeg-jni.c功能就是输出ffmpeg相关配置信息。
// // Created by tandong on 16-8-19. // #include <string.h> #include <jni.h> #include "libavcodec/avcodec.h" jstring Java_com_tandong_ffmpeg_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz ) { char info[10000] = { 0 }; sprintf(info, "%s\n", avcodec_configuration()); return (*env)->NewStringUTF(env, info); }
之后,新建Android.mk和Application.mk。
内容分别为:
LOCAL_PATH := $(call my-dir) # FFmpeg library include $(CLEAR_VARS) LOCAL_MODULE := avcodec LOCAL_SRC_FILES := libavcodec-57.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := avdevice LOCAL_SRC_FILES := libavdevice-57.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := avfilter LOCAL_SRC_FILES := libavfilter-6.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := avformat LOCAL_SRC_FILES := libavformat-57.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := avutil LOCAL_SRC_FILES := libavutil-55.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := postproc LOCAL_SRC_FILES := libpostproc-54.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := swresample LOCAL_SRC_FILES := libswresample-2.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := swscale LOCAL_SRC_FILES := libswscale-4.so include $(PREBUILT_SHARED_LIBRARY) # Program include $(CLEAR_VARS) LOCAL_MODULE := ffmpeg-jni LOCAL_SRC_FILES := ffmpeg-jni.c LOCAL_C_INCLUDES += $(LOCAL_PATH)/include LOCAL_LDLIBS := -llog -lz LOCAL_SHARED_LIBRARIES := avcodec avdevice avfilter avformat avutil postproc swresample swscale include $(BUILD_SHARED_LIBRARY)
有些人对.mk语法,不熟悉。请看谷歌文档。
Application.mk内容:
APP_ABI=armeabi
然后在Android Studio的Terminal下输入命令。跳转到jni所在目录。输入$NDK/ndk-build。前提你的ndk已经环境变量配置好。
这样就编译好so库了。
把so库拷贝到jniLibs目录armeabi下。
MainActivity里调用So库。
package com.tandong.ffmpeg; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView tv_ffmpeg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_ffmpeg=(TextView)this.findViewById(R.id.tv_ffmpeg); tv_ffmpeg.setText(stringFromJNI()); } public native String stringFromJNI(); static { System.loadLibrary("avutil-55"); System.loadLibrary("avcodec-57"); System.loadLibrary("avformat-57"); System.loadLibrary("avdevice-57"); System.loadLibrary("swresample-2"); System.loadLibrary("swscale-4"); System.loadLibrary("postproc-54"); System.loadLibrary("avfilter-6"); System.loadLibrary("ffmpeg-jni"); } }
运行即可。
相关文章推荐
- ubuntu平台下ffmpeg的编译安装方法
- Android编译调用FFmpeg API,自己写方法,编译so库
- FFMPEG研究: ubuntu平台下ffmpeg的编译安装方法
- Ubuntu下FFmpeg库编译方法
- ubuntu 12.10 x64 下编译新内核 + 系统调用方法
- ubuntu平台下ffmpeg的编译安装方法
- Ubuntu下编译安装OpenCV 2.4.13以及Python调用OpenCV方法
- ubuntu平台下ffmpeg的编译安装方法
- 1 ubuntu下编译安装opencv2详细教程以及python调用opencv方法
- linux虚拟机下面编译ffmpeg,并调用其main方法
- windows命令行下随时随地调用csc编译器的方法(解决dos下编译.net程序找不到CSC的问题)
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
- windows命令行下随时随地调用csc编译器的方法(解决dos下编译.net程序找不到CSC的问题)
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- ffmpeg和mencoder的编译方法
- dwr例子5调用有JavaBean参数的java方法