java - 如何将 FFMPEG 构建并包含到现有的 Android 项目中

标签 java android ffmpeg audio-streaming

我发现了多个关于 FFMPEG 的问题和教程,但我似乎并不理解其中的大部分内容。我读过的所有指南,都遗漏了很大的空白,而且不倾向于解释事情。

我有一个现有的 Android 应用程序,它使用名为 AAC 解码器的第三方库流式传输音频。由于各种原因,我需要切换到使用 FFMPEG,但无法弄清楚如何。我已设法按照指南构建 FFMPEG,但后来我不明白我应该如何处理输出。

我的应用只需要从远程 URL 流式传输音频。流可以采用多种格式。

如果有人可以将我链接到一些全面、详细的指南,或者向我提供说明,那就太好了。

谢谢。

最佳答案

我创建了构建 FFmpeg 的脚本,请在此处查看我的答案:

arm-linux-androideabi-gcc is unable to create an executable - compile ffmpeg for android armeabi devices

您已经编译了 FFmpeg,在项目的根目录中创建一个“jni”文件夹。在 jni 文件夹中创建包含以下内容的 Android.mk:

include $(call all-subdir-makefiles)

然后使用这些内容创建 Application.mk:

APP_ABI := armeabi armeabi-v7a x86

接下来,在 jni 文件夹中创建以下文件夹结构:

ffmpeg/ffmpeg/

在第一个 ffmpeg 文件夹中创建另一个 Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libavformat
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libavutil
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_PATH:= $(call my-dir)

最后,将构建文件夹的内容(从构建脚本)移动到/jni/ffmpeg/ffmpeg/

从项目根目录运行:

ndk-build clean

然后运行:

ndk-build 

如果你觉得懒惰,你可以简单地从我的项目中下载 jni 文件夹,然后删除“metadata”和“player”文件夹:

http://svn.code.sf.net/p/servestream/code/trunk/jni/

如果您有任何其他问题,请告诉我。

关于java - 如何将 FFMPEG 构建并包含到现有的 Android 项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798602/

相关文章:

android - 在刷新时禁用 ListView 中的滚动

php - 如何显示ffmpeg错误输出

java - 使用涉及日期限制的 JPA2 通过 EntityManger 重写 Hibernate SessionFactory 查询

java - 如何关闭不是由InputStream定义但直接在方法内部使用的Inputstream?

android - 方法 findViewById(int) 未定义

python - 如何在 Python 3.8 中为 asyncio.gather 构建任务列表

video - FPS 中的 FFMPEG 开始和持续时间

Java 套接字 : check if client is able to receive message from server

java - 当我将 JSON 从 Firebase 转换为 Java 对象时,为什么会得到 "Failed to bounce to type"?

android - 将移动设备的 SDCard 中的文件上传到文件服务器时出现进度条问题