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

Ste*_*son 1 java android ffmpeg audio-streaming

我发现了关于FFMPEG的多个问题和教程,但我似乎并不了解大多数问题.我读过的所有指南都错过了很大的空白而且不倾向于解释事情.

我有一个现有的Android应用程序,它使用名为AAC Decoder的第三方库来传输音频.由于各种原因,我需要切换到使用FFMPEG,但无法弄清楚如何.我已经设法遵循指南来构建FFMPEG,但后来我不明白我应该对输出做什么.

我的应用只需要从远程URL流式传输音频.流可以是各种格式.

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

谢谢.

Wil*_*ann 7

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

arm-linux-androideabi-gcc无法创建可执行文件 - 为android armeabi设备编译ffmpeg

编译FFmpeg的人在项目的根目录中创建一个"jni"文件夹.在jni文件夹中使用以下内容创建Android.mk:

include $(call all-subdir-makefiles)
Run Code Online (Sandbox Code Playgroud)

然后使用以下内容创建Application.mk:

APP_ABI := armeabi armeabi-v7a x86
Run Code Online (Sandbox Code Playgroud)

接下来,在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)
Run Code Online (Sandbox Code Playgroud)

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

从项目根运行:

ndk-build clean
Run Code Online (Sandbox Code Playgroud)

然后运行:

ndk-build 
Run Code Online (Sandbox Code Playgroud)

如果您感到懒惰,可以直接从我的项目中下载jni文件夹并删除"元数据"和"播放器"文件夹:

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

如果您有任何其他问题,请与我们联系.