Mac 下为将ffmepg +x264移植到android中(2)

原创 2016年08月31日 10:54:33

上一篇文章说到,怎么将ffmepg打包成so库的编译过程,这篇文章将把上一篇文章的so库打包进android studio中,通常情况下只需要直接将so库和头文件直接放在libs下就可以,但是那样比较容易错,本人试过好几次都有头文件找不到的报错,于是直接采用下面的方法:

1将ndk路径添加到环境变量

touch ~/.bash_profile

open ~/.bash_profile

然后在文本内输入ndk的路径,本文是

export PATH=$PATH:/Users/wenxi/Library/Android/sdk/ndk-bundle (也就是SDK默认的下载路径)

然后source ~/.bash_profile使环境变量生效。

2,将编译生成的头文件和libs放入ndk的sources目录,这个目录会在ndk编译的时候被引用,本文采用的路径是

sources/ffmepg/android/arm(这个路径在studio的工程中将会被用到,要记下来)

头文件和lib目录放在arm文件夹里面,在arm文件夹里面新建一个Android.mk文件,

其内容如下:

LOCAL_PATH:= $(call my-dir)


include $(CLEAR_VARS)

LOCAL_MODULE:= libavcodec

LOCAL_SRC_FILES:= lib/libavcodec-57.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libavdevice

LOCAL_SRC_FILES:= lib/libavdevice-57.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libavfilter

LOCAL_SRC_FILES:= lib/libavfilter-6.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libavformat

LOCAL_SRC_FILES:= lib/libavformat-57.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libavutil

LOCAL_SRC_FILES:= lib/libavutil-55.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libpostproc

LOCAL_SRC_FILES:= lib/libpostproc-54.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libswresample

LOCAL_SRC_FILES:= lib/libswresample-2.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libswscale

LOCAL_SRC_FILES:= lib/libswscale-4.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE:= libx264

LOCAL_SRC_FILES:= lib/libx2641.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)


大概的意思是将lib下的so重新命名并绑定头文件,这样我们就不用那么麻烦把头文件添加到工程了

3在android studio中创建jni

在工程的main目录下创建jni文件夹,在该文件夹下创建Android.mk文件,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := tutorial01
LOCAL_SRC_FILES := tutorial01.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz 
LOCAL_SHARED_LIBRARIES := libavcodec libavdevice libavfilter libavformat libavutil libpostproc libswresample libswscale libx264

include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmepg/android/arm)
其中,ffmepg/android/arm就是我们刚才记录下来的路径
创建一个Application.mk文件:

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-24

最后,在android studio下打开终端,sudo一下,cd 到工程的main文件夹,然后执行ndk-build命令看到编译结果


在libs文件夹下看到对应的so就成功了


下面我们来写个hello word牛刀小试下,新建一个工程,里面有一个textview ,

在main activity里面加载所有的so文件库,

static {
    System.loadLibrary("x2641");
    System.loadLibrary("avcodec-57");
    System.loadLibrary("avdevice-57");
    System.loadLibrary("avfilter-6");
    System.loadLibrary("avformat-57");
    System.loadLibrary("avutil-55");
    System.loadLibrary("postproc-54");
    System.loadLibrary("swresample-2");
    System.loadLibrary("swscale-4");
    System.loadLibrary("hello");

}

创建一个Utilts类,下面定义一个方法

public native String  stringFromJNI();

使用java生成.h文件(参考ndk教程的使用,本文不再描述)

创建一个.c文件,

其内容如下,

#include <jni.h>
#include <com_example_wenxi_myapplication_Utils.h>
#include "libavcodec/avcodec.h"

JNIEXPORT jstring JNICALL Java_com_example_wenxi_myapplication_Utils_stringFromJNI
  (JNIEnv *env, jobject obj)
  {
         char info[10000] = { 0 };
         sprintf(info, "%s\n", avcodec_configuration());
         return (*env)->NewStringUTF(env, info);

  }
该函数用来返回ffmepg的配置信息

我们让它显示在textview上

Utils utils=new Utils();
editText=(TextView)findViewById(R.id.textview);
editText.setText(utils.stringFromJNI());

我们需要设置一下NDK的相关配置:
在gradle.properties中添加
android.useDeprecatedNdk=true //该代码启动NDK的相关配置
然后在APP build中添加
sourceSets.main {
    jni.srcDirs = []
    jniLibs.srcDir 'src/main/libs'
}
该代码用来配置NDK相关资源的目录,没有这个APP会崩溃

最后,运行如图:



最后,贡献自己的源码:http://download.csdn.net/detail/qq_25817651/9655958

版权声明:本文为博主原创文章,未经博主允许不得转载。

Mac系统下编译支持Android平台的最新X264编码器

Mac系统下编译支持Android平台的最新X264编码器 原文来自http://www.mingjianhua.com,转载请注明出处 1、首先去官网下载最新的x264源代码,解压到任意...
  • mjh1021
  • mjh1021
  • 2013年11月01日 12:34
  • 1420

Mac编译ffmpeg

本文记录Mac编译ffmpeg生成在Android上运行的so文件的过程。
  • hwliu51
  • hwliu51
  • 2017年08月19日 23:46
  • 269

ARM移植X264+FFMPEG

交叉编译器版本:version 4.5.1 Libx264版本:x264-snapshot-20121020-2245 FFMPEG版本:ffmpeg-1.0   这里我只是移植了ffmpeg...
  • XIAOGUOCHANG
  • XIAOGUOCHANG
  • 2012年12月07日 18:20
  • 6288

Mac 下为将ffmepg +x264移植到android中,解决libx264.so.148 库cannot find问题

本人最近在研究音频视频这一块,考虑到后期开发要加很多功能,决定使用ffmepg去做,看的网上的东西都是比较陈旧,新版的工具编译会存在不少问题,于是本人决定自己挖坑 首先下载源码,这个没什么好讲,ffm...
  • qq_25817651
  • qq_25817651
  • 2016年08月30日 20:16
  • 434

mac 平台下编译android版本 ffmpeg+h264

网上很多例子,但是试了很多都没有都没有弄好,最后经过长时间的试错,终于弄好了,放到android 里没有问题。系统环境:os 10.11.5 ndk r121,首先下载ffmpeg 2.5.11 h...
  • qq_26093363
  • qq_26093363
  • 2016年09月24日 00:43
  • 546

X264 的编译和移植

原文来自:http://www.cnblogs.com/lixiaoming90/archive/2012/08/25/2656991.html 摘要:      H.264提...
  • NewThinker_wei
  • NewThinker_wei
  • 2013年04月17日 18:16
  • 3345

V4L2视频采集与H264编码3—X264移植

计划将YUV数据编码成H264视频,中间需要用到X264编码器。X264编码器的源码分析参考了雷神的博客x64源码分析 ,这里将介绍如何将x264编码库移植到ARM开发板上。最新的x264代码可以在x...
  • li_wen01
  • li_wen01
  • 2016年12月11日 11:33
  • 1884

Android平台移植FFmpeg和x264

之前记录过一篇编译FFmpeg的文章,没写完整 最近在做ijkplayer的二次开发,重新拾起FFmpeg,记录完。 记得之前的移植很头疼,网上很多帖子,都是抄来抄去,作者也没有去验证 笔者记录...
  • byhook
  • byhook
  • 2016年07月20日 23:24
  • 2990

将x264移植到Android

x264的版本是:x264-snapshot-20131228-2245 NDK的版本:android-ndk-r8b 虚拟机VMware9.0.2,Ubuntu12.04,...
  • huahuahailang
  • huahuahailang
  • 2014年05月28日 20:36
  • 6319

Mac下为Android编译FFMPEG和x264 (一)

前言 ffmpeg是一个超级牛逼的音视频软件,它几乎可以处理市面上常见的所有音视频格式,许多著名的软件都是基于ffmpeg的,比如kmplayer之类的播放器,格式工厂之类的格式转换软件等。并且...
  • u010164190
  • u010164190
  • 2016年11月18日 17:27
  • 1215
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mac 下为将ffmepg +x264移植到android中(2)
举报原因:
原因补充:

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