android studio编译ffmpeg过程

原创 2016年05月31日 10:48:39

写此文以记录android studio编译和调用ffmpeg库的操蛋过程

要调用成功最终用到android系统源代码,如果你没有系统代码,只是做应用开发,请忽略本文

下载ffmpeg以及编译就不多说了,网上很多答案,相信最终都能编译出一下这几个库,我下的是最新版本ffmpeg3.0.2,这部分代码我已经在资源中分享了,下载直接运行脚本即可编译完成

libavcodec-57.so  libavdevice-57.so  libavfilter-6.so  libavformat-57.so  libavutil-55.so  libswresample-2.so  libswscale-4.so
jni测试代码如下:

JNIEXPORT jint JNICALL Java_com_example_lsc_duijiangserver_MainActivity_findDecode
        (JNIEnv *env, jobject obj, jint codeID) {
    AVCodec*codec = NULL;
    LOGE("hi %s", __func__);
    /*register all formats and codecs */
    av_register_all();
    codec= avcodec_find_decoder(codeID);
    LOGE("version=%d", (int)avcodec_version());
    return 0;
}
java的调用代码则如下:

        static {
       //     System.loadLibrary("avcodec-57");
       //     System.loadLibrary("avdevice-57");
        //    System.loadLibrary("avfilter-6");
        //    System.loadLibrary("avformat-57");
       ////     System.loadLibrary("avutil-55");
        //    System.loadLibrary("swresample-2");
        //    System.loadLibrary("swscale-4");
            System.loadLibrary("ffmpegTest");
        }

        public native int findDecode(int codecID);

很简单的测试库代码,但是在studio下怎么写Android.mk来链接上述的几个库呢,我在网上找了各种办法,折腾了两天,都是最终链接时候提示找不到这几个库函数

我只能放弃了,直接在系统源代码中编译。

这样studio就不用编译jni了,先直接把jni代码删除,只留下java的loadLibrary加载so库函数

现要解决的问题就是编译出libffmpegTest.so库并adb push 到system/lib/目录下即可,app运行时会寻找该目录下的so库

编译so库:

在源代码目录新建一个文件夹,我的是jni,把上述的7个so库拷贝到该目录下,并且把前面编译ffmpeg时候生成的几个头文件目录一起拷贝到jni目录下,编写Android.mk如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS := libavcodec-57.so 
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS := libavdevice-57.so 
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS := libavfilter-6.so 
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS := libavformat-57.so 
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS := libavutil-55.so 
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS :=  libswresample-2.so
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng optional
LOCAL_PREBUILT_LIBS :=  libswscale-4.so
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
include $(CLEAR_VARS)
LOCAL_MODULE    := libffmpegTest
LOCAL_SRC_FILES := com_example_lsc_duijiangserver_MainActivity.c
#LOCAL_SRC_FILES := $(call all-subdir-c-files)

LOCAL_LDLIBS := -llog -ljnigraphics -lz
LOCAL_STATIC_LIBRARIES := libcutils libc liblog
LOCAL_SHARED_LIBRARIES += libavcodec-57 libavfilter-6  libavformat-57 libavutil-55 libswresample-2 libswscale-4
LOCAL_C_INCLUDES += $(LOCAL_PATH)/ffmpeg \
                    $(LOCAL_PATH)/ffmpeg/libavutil \
                    $(LOCAL_PATH)/ffmpeg/libavcodec \
                    $(LOCAL_PATH)/ffmpeg/libavformat \
                    $(LOCAL_PATH)/ffmpeg/libavcodec \
                    $(LOCAL_PATH)/ffmpeg/libswscale

include $(BUILD_SHARED_LIBRARY)
最终的jni目录如下:

Android.mk                                     ffmpeg      libavcodec-57.so   libavfilter       libavformat-57.so  libswresample       libswscale-4.so
com_example_lsc_duijiangserver_MainActivity.c  lib         libavdevice        libavfilter-6.so  libavutil          libswresample-2.so
com_example_lsc_duijiangserver_MainActivity.h  libavcodec  libavdevice-57.so  libavformat       libavutil-55.so    libswscale

最后mm编译,adb push 到system/lib/下即可


手把手图文并茂教你用Android Studio编译FFmpeg库并移植

之前曾写过一篇[《FFmpeg在Linux下安装编译过程》](http://blog.csdn.net/hejjunlin/article/details/52402759),今天有空就用Androi...
  • hejjunlin
  • hejjunlin
  • 2016年09月25日 17:06
  • 12008

编译FFMpeg的Android版本,并整合到android studio

通过编译ffmpeg的android版本,并在android studio中引用的过程。
  • smallrainf
  • smallrainf
  • 2015年04月19日 20:26
  • 10343

我的Android studio 编译ffmpeg之路

最近在学习使用android studio 的CMake 插件  进行编译ffmpeg   由于是自己单独摸索 出现了一系列的坑  特此记录一下 。 1.CMakeLists 脚本配置的学习阶段 ...
  • a06963938
  • a06963938
  • 2017年01月10日 22:10
  • 301

Android开发学习之路--Android Studio cmake编译ffmpeg

最新的android studio2.2引入了cmake可以很好地实现ndk的编写。这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路–ND...
  • eastmoon502136
  • eastmoon502136
  • 2016年10月20日 22:33
  • 12576

android studio 2.2 cmake ffmpeg 简单的播放器(这里只有视频解码)

背景 在上一次的初次使用cmake编译jni后,这次cmake文件再次升级。利用网上的代码来编译一个简单的播放器。本文参照 Android+FFmpeg+ANativeWindow视频解码播放 一文...
  • nothingl3
  • nothingl3
  • 2016年10月10日 09:24
  • 2699

FFmpeg解码库裁剪和调试三--Android Studio调试FFmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源项目。FFmpeg是在Linux平台下开发,而Android是现在非常火爆的移动平台,由于Android平台与Linux的亲缘...
  • shakingWaves
  • shakingWaves
  • 2017年03月13日 22:13
  • 1384

FFmpeg的Android平台移植—编译篇

FFmpeg的Android平台移植—编译篇 Dennis Hu 2014年3月28日 摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程。 环境准备: Ub...
  • gobitan
  • gobitan
  • 2014年04月01日 19:11
  • 88607

Mac下编译FFMpeg(AndroidStudio)

最近想仔细研究一下公司的推流以及播放器的底层代码,可是我是做Java的c不是特别的懂,没有办法,先一步步来吧。 ndk配置其实都很简单,我这里就不赘述了,网上大神的帖子也比较多,其实也就下载安装那么...
  • u012729092
  • u012729092
  • 2017年04月30日 17:04
  • 530

编译Android环境下Ffmpeg命令行

提示:如果Ubuntu中未搭建android studio、或对Linux系统操作不熟悉的,可拷贝ffmpeg相关文件到windows中进行后续开发。 新建Android项目,并创建一个ffmpegl...
  • qq137722697
  • qq137722697
  • 2017年12月16日 21:49
  • 271

window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库

window环境下使用ndk编译出android studio 能使用的ffmpeg动态库目录window环境下使用ndk编译出android studio 能使用的ffmpeg动态库 ffmepg介...
  • u013252711
  • u013252711
  • 2016年08月20日 17:26
  • 1507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android studio编译ffmpeg过程
举报原因:
原因补充:

(最多只允许输入30个字)