FFmpeg学习—Android 使用ffmpeg 集成x264和fdk-aac 库

这篇文章紧接上一篇ffmpeg 集成x264和fdk-aac 库的编译讲解如何使用编译后的库。上一篇的文章的连接:

http://blog.csdn.net/xiaibiancheng/article/details/69703023

1.在eclipse 里面设置ndk 的路径如下图所示:

ndk 的下载路径:

https://dl.google.com/android/repository/android-ndk-r11c-windows-x86_64.zip

下载后解压到指定路径,然后在上面的界面浏览到解压的路径。

注意:解压后再ndk 目录里面新建一个文件,命名为ndk-build,文件内容为空,不然的话进行上面那一步设置ndk路径的时候,eclipse 将无法识别.

 

2.在eclipse 里面新建一个android 项目,然后点击项目右键,Android tools菜单,选择Add Native support ,这样项目就可以编译ndk  的c/c++代码了。

3.在将fdk-aac、x264和ffmpeg 生成静态库拷贝到jni目录下,结构目录如下图:

4.编写Android.mk和Application.mk文件,内容分别如下:

Android.mk内容:

 

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) 

LOCAL_MODULE    :=x264
LOCAL_SRC_FILES :=./libx264/libx264.a
include $(PREBUILT_STATIC_LIBRARY)

LOCAL_MODULE    :=fdk_aac
LOCAL_SRC_FILES := ./fdk-aac/libfdk-aac.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := avutil
ifeq ($(TARGET_ARCH_ABI),armeabi)
     LOCAL_SRC_FILES := ./ffmpeg/armv5te/libavutil.a
else
     LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavutil.a
endif
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := avcodec
ifeq ($(TARGET_ARCH_ABI),armeabi)
    LOCAL_SRC_FILES := ./ffmpeg/armv5te/libavcodec.a
else
    LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavcodec.a
endif
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := avformat
ifeq ($(TARGET_ARCH_ABI),armeabi)
    LOCAL_SRC_FILES := ./ffmpeg/armv5te/libavformat.a
else
    LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavformat.a
endif
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -Wno-sign-compare -Wno-switch -Wno-pointer-sign -DHAVE_NEON=1 \
      -mfpu=neon -mfloat-abi=softfp -fPIC -DANDROID

LOCAL_C_INCLUDES := \
    ./$(LOCAL_PATH)/ffmpeg/include
    
LOCAL_SRC_FILES := \
    ffmpegexample.c

LOCAL_LDLIBS 	:= -llog -ljnigraphics -lz -ldl -lgcc
LOCAL_STATIC_LIBRARIES := avformat avcodec avutil x264 fdk_aac
LOCAL_MODULE := test
include $(BUILD_SHARED_LIBRARY)

上面只连接了三个ffmpeg 的库,如有其它需要可以仿照上面添加。
Application.mk的内容:

 

 

APP_ABI :=armeabi-v7a armeabi 
APP_PLATFORM = android-14

5.编写测试代码:

 

jni代码:

 

#include <jni.h>
#include<stdio.h>
#include<math.h>
#include <android/log.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavutil/log.h"
#include "libavutil/mathematics.h"
#define TAG "TEST"
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)
void Java_com_example_ffmpeg_MainActivity_test(JNIEnv* env, jobject thiz){
	av_register_all();
	LOGD("ok");
}


java 代码:

 

 

package com.example.ffmpeg;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

	static {
        System.loadLibrary("test");
    }
	public static native void test();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				test();
				
			}
		});
	}
}


编译运行就行就行

 

测试项目地址:

https://github.com/XIAIBIANCHENG/ffmpegtest

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值