- 浏览: 119985 次
- 性别:
- 来自: 成都
文章分类
1.建立一个安卓工程,创建jni目录,将上一篇文章中的库和头文件拷贝到jni目录中,并创建Android.mk文件.并创建一个main.c
2.工程目录如下图
3.main.c文件内容
4.Android.mk内容
LOCAL_PATH := $(callmy-dir)
MY_PATH := /home/kangxian/FFMPEG/ffmpeg_android/testFFMPEG/app/jni
MY_INCLUDE_PATH := /home/kangxian/FFMPEG/ffmpeg_android/testFFMPEG/app/jni/prebuilt
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
$(warning $(MY_PATH))
include $(CLEAR_VARS)
LOCAL_MODULE := avcodec-57-prebuilt
LOCAL_SRC_FILES := $(MY_PATH)/prebuilt/libavcodec-57.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=avdevice-57-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavdevice-57.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=avfilter-6-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavfilter-6.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=avformat-57-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavformat-57.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := avutil-55-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavutil-55.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := avswresample-2-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libswresample-2.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := swscale-4-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libswscale-4.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=kx_ffmpeg
LOCAL_SRC_FILES := $(MY_PATH)/main.c
LOCAL_C_INCLUDES := $(MY_INCLUDE_PATH)
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid -L/home/kangxian/NDK/android-ndk-r10/platforms/android-9/arch-arm/usr/lib
LOCAL_SHARED_LIBRARIES:= avcodec-57-prebuilt avdevice-57-prebuilt avfilter-6-prebuilt avformat-57-prebuilt avutil-55-prebuilt
include $(BUILD_SHARED_LIBRARY)
5.切换到jni目录,执行ndk-build,如果没有错误,则会在libs目录下生成7个so库,如下图:
6.安卓可用的jni库就编译完成了,将7个库拷贝到安卓工程试试,如果这个jni函数返回0,证明我们编译的ffmpeg库是可用的。
7.建立和jni函数保持一致的包名和类名,如下图
8.FFMPEGInterface.java的内容
2.工程目录如下图
3.main.c文件内容
#include <string.h> #include <jni.h> #include <dlfcn.h> #include <android/log.h> #include "libavcodec/avcodec.h" #define TAG "kx_ffmpeg" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__) #define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) jint Java_com_kk_xx_ffmpeg_FFMPEGInterface_test(JNIEnv *env, jobject obj, jint codecID) { AVCodec *codec = NULL; /*register all formats and codecs */ av_register_all(); codec= avcodec_find_decoder(codecID); if(codec != NULL) { return 0; } else { return -1; } }
4.Android.mk内容
LOCAL_PATH := $(callmy-dir)
MY_PATH := /home/kangxian/FFMPEG/ffmpeg_android/testFFMPEG/app/jni
MY_INCLUDE_PATH := /home/kangxian/FFMPEG/ffmpeg_android/testFFMPEG/app/jni/prebuilt
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
$(warning $(MY_PATH))
include $(CLEAR_VARS)
LOCAL_MODULE := avcodec-57-prebuilt
LOCAL_SRC_FILES := $(MY_PATH)/prebuilt/libavcodec-57.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=avdevice-57-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavdevice-57.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=avfilter-6-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavfilter-6.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=avformat-57-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavformat-57.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := avutil-55-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libavutil-55.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := avswresample-2-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libswresample-2.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := swscale-4-prebuilt
LOCAL_SRC_FILES :=$(MY_PATH)/prebuilt/libswscale-4.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE :=kx_ffmpeg
LOCAL_SRC_FILES := $(MY_PATH)/main.c
LOCAL_C_INCLUDES := $(MY_INCLUDE_PATH)
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid -L/home/kangxian/NDK/android-ndk-r10/platforms/android-9/arch-arm/usr/lib
LOCAL_SHARED_LIBRARIES:= avcodec-57-prebuilt avdevice-57-prebuilt avfilter-6-prebuilt avformat-57-prebuilt avutil-55-prebuilt
include $(BUILD_SHARED_LIBRARY)
5.切换到jni目录,执行ndk-build,如果没有错误,则会在libs目录下生成7个so库,如下图:
6.安卓可用的jni库就编译完成了,将7个库拷贝到安卓工程试试,如果这个jni函数返回0,证明我们编译的ffmpeg库是可用的。
7.建立和jni函数保持一致的包名和类名,如下图
8.FFMPEGInterface.java的内容
package com.kk.xx.ffmpeg; /** * Created by Administrator on 2017/3/14. */ public class FFMPEGInterface { static{ System.loadLibrary("avutil-55"); System.loadLibrary("avcodec-57"); System.loadLibrary("swresample-2"); System.loadLibrary("avformat-57"); System.loadLibrary("swscale-4"); System.loadLibrary("avfilter-6"); System.loadLibrary("avdevice-57"); System.loadLibrary("kx_ffmpeg"); } public static native int test(int codecID); }
发表评论
-
ubuntu16 OpenGrok配置多项目
2019-03-29 14:26 1206以前的博客介绍过OpenGrok配置一个项目,这里介绍下 ... -
android adb shell su设置密码
2019-03-26 14:02 25951.打开su源码在system/extras/su/su. ... -
make日志同时输出到控制台和文件
2019-03-22 10:23 12730 标准输入 stdin = standard in ... -
增加自定义property目录
2019-03-18 10:04 365打开文件system/core/init/property ... -
recovery增加打印到串口和增加复制代码
2019-03-07 09:49 634项目里需要调试recover,网上查了部分资料,增加了 ... -
android adb shell命令启动应用
2019-03-01 13:33 13961.执行adb shell 2.这里以打开设置为例: ... -
android HAL层例子
2019-02-27 11:15 1200上一篇文章已经写了led驱动,这篇文章我们再封装HAL层 ... -
FireFlay开发板点亮LED驱动开发
2019-02-22 11:09 518实现功能,点亮LED,参考了网上部分代码。 1.在目 ... -
RK3288 默认打开adb调试
2019-02-19 14:03 2225在文件:vendor/rockchip/firefly/us ... -
RK3288 修改开机动画和开机图片
2019-02-18 11:25 1829开机动画: 1.创建一个目录frameworks/ba ... -
android系统修改默认语言为中文
2019-02-18 11:19 884修改 build/target/product/full_b ... -
ubuntu OpenGrok的搭建
2019-02-18 11:15 1017下载apache-tomcat-8.5.37和opengro ... -
gradleview错误定位
2019-01-08 14:39 3851、打开cmd,进入项目的gradle所在目录 2、键入gra ... -
安卓系统签名转keystore
2017-11-23 10:53 1230./keytool-importkeypair -k ./de ... -
抓jni日志
2017-11-16 14:29 378建一个sh文件,内容如下,将crash内容复制到crash.t ... -
FFMPEG android 库编译
2017-03-14 13:57 6501.首先下载ffmpeg源码:http://www.ffmpe ... -
Windows搭建OpenGrok
2014-12-08 11:33 16681.下载opengrok-0.11.1.tar.gz 二进制包 ... -
怎么给apk签名
2014-11-08 21:51 674jarsigner -verbose -keystore 证书 ... -
OpenGrok搜索技巧
2014-09-26 15:59 2733+ 表示包含此字符串,- 表示包含此字符串。例如在 Full ... -
自动生成dimen
2014-07-11 13:33 680package com.kang.makedimen; ...
相关推荐
首先,FFmpeg库在Android上使用时需要编译为特定架构的动态链接库(.so文件),因为Android支持多种处理器架构,例如arm64-v8a、armeabi、armeabi-v7a、x86和x86_64。这些文件夹分别对应了不同的CPU架构,确保了...
在Android平台上,FFmpeg库通常以静态库(.a)和动态库(.so)的形式存在,以支持不同的CPU架构。在您提供的信息中,`arm64-v8a`和`armeabi-v7a`分别对应了两种常见的Android架构:一种是针对64位处理器的ARMv8架构...
在Android平台上,FFmpeg库被广泛用于音视频的解码、编码、转码、流媒体处理等任务。本文将深入探讨FFmpeg在Android上的应用,以及如何使用提供的`.SO`库文件(版本4.1.3)。 1. **FFmpeg简介** FFmpeg是一个跨...
在Android平台上,通过NDK(Native Development Kit)技术,我们可以将FFmpeg库集成到Android应用中,进行原生级别的音视频处理。下面将详细讲解Android调用FFmpeg库进行版本查询的操作及其相关知识。 1. Android ...
总的来说,"android ffmpeg rtsp播放"涉及到Android原生开发、FFmpeg库的移植和使用、RTSP协议解析以及Android多媒体框架的深入理解和应用。开发者需要具备扎实的C/C++编程基础,熟悉Android NDK开发环境,以及对...
2. **Android上的FFmpeg**:在Android平台上使用FFmpeg需要进行一些额外的配置工作,包括编译FFmpeg库以适应Android的NDK环境,创建适用于Android的静态或动态库。动态库(.so文件)通常体积较小,但需要在运行时...
标题“ffmpeg6.0 android 编译库”表明这是一个针对 Android 平台编译的 FFmpeg 版本 6.0,意味着它已经被配置并构建为适合 Android 应用程序使用的静态或动态库。这个版本可能包含了 FFmpeg 最新的功能和性能优化,...
其他说明:在网上没有找到android平台的FFmpeg库,就自己编译了一个,我用的事RTP拉流的功能,教程上说功能挺全的但是其他的功能没有使用过。本人的开发环境为:Qt For Android,感兴趣的朋友见链接:...
在Android平台上,FFmpeg库和头文件的使用对于开发涉及音视频处理的应用至关重要。本篇将深入探讨如何在Android平台上集成和使用FFmpeg,尤其是针对arm64-v8a和armeabi-v7a这两种常见的Android架构。 首先,我们...
标题中的“android平台ffmpeg动态库”指的是在 Android 设备上运行的 FFmpeg 库,这些库是经过特定优化以适应 Android 的操作系统环境。动态库文件通常以 .so (Shared Object) 结尾,它们是可执行代码的一部分,可以...
在Android项目中使用FFmpeg库,首先需要获取到适用于Android的预编译SO库。描述中提到的"最新的so库"意味着这个压缩包提供了最新版本的FFmpeg,开发者可以利用这些库实现对多媒体文件的高级操作,例如视频裁剪、合并...
从Android 6.0开始,严格禁止text relocations , ffmpeg使用的许多源文件都使用text relocations因此,除非ffmpeg重写大型库并将其替换为替代text relocations否则ffmpeg将永远无法在未来的android构建中运行。...
在Android平台上,FFmpeg库通常通过JNI(Java Native Interface)与Java代码交互,利用NDK(Native Development Kit)进行原生C/C++代码的编译和运行,以实现对音视频的高效处理。 标题“android ffmpeg so库文件”...
本文将详细介绍如何在 Android 开发中集成并使用 FFmpeg 库。 首先,我们要理解 FFmpeg 的基本结构。FFmpeg 包含了多个组件,如 libavcodec(编码解码库)、libavformat(容器格式处理库)、libavfilter(滤镜库)...
FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发。 FFMPEG使用NDK_R19C编译。 这是一个简单的DEMO工程,可以直接使用QT打开,编译部署到Android设备运行。 注意: 这个工程...
在 Android 应用中使用 FFmpeg,通常需要将 FFmpeg 库编译为适合 Android 的版本,这包括静态库(.a 文件)和动态库(.so 文件)。静态库可以将所有依赖一次性链接到应用中,而动态库则是在运行时加载。这两种方式...
在C/C++源文件中,使用`JNIEXPORT`和` JNICALL`宏定义JNI接口的实现,调用FFmpeg库中的相应函数。 9. **加载.so库** 在Java代码中,使用`System.loadLibrary("ffmpeg")`加载.so库。 10. **创建FFmpeg Demo** 在...
4. **JNI接口**:在Android应用中调用FFmpeg库,需要通过Java Native Interface (JNI) 来创建C/C++与Java之间的桥梁。在JNI中定义函数,使得Java代码可以调用FFmpeg的C/C++函数。 5. **音视频处理API**:理解FFmpeg...
在Android平台上集成FFmpeg库,可以为应用提供强大的音视频处理功能,如解码、编码、转码、裁剪、合并等。以下是一份详细的步骤和知识点解析,以帮助你理解如何在Android项目中实现一个最简单的FFmpeg demo。 1. **...
在Android应用中使用编译好的FFmpeg库,你需要在Java层创建JNI接口,通过JNI函数调用C/C++的FFmpeg API。例如,你可以创建一个`NativeFFmpeg.java`文件声明JNI方法,然后在对应的C/C++源码中实现这些方法。使用`...