我发现了多个关于 FFMPEG 的问题和教程,但我似乎并不理解其中的大部分内容。我读过的所有指南,都遗漏了很大的空白,而且不倾向于解释事情。
我有一个现有的 Android 应用程序,它使用名为 AAC 解码器的第三方库流式传输音频。由于各种原因,我需要切换到使用 FFMPEG,但无法弄清楚如何。我已设法按照指南构建 FFMPEG,但后来我不明白我应该如何处理输出。
我的应用只需要从远程 URL 流式传输音频。流可以采用多种格式。
如果有人可以将我链接到一些全面、详细的指南,或者向我提供说明,那就太好了。
谢谢。
最佳答案
我创建了构建 FFmpeg 的脚本,请在此处查看我的答案:
您已经编译了 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/