gpt4 book ai didi

android - Android平台的FFmpeg

转载 作者:行者123 更新时间:2023-12-04 23:04:03 25 4
gpt4 key购买 nike

我正在尝试创建一个使用 FFMpeg 的 android 应用程序。为此,我从 http://www.ffmpeg.org/olddownload.html 下载了 FFmpeg 代码(v 0.8.15) .并按照 http://www.roman10.net/how-to-build-ffmpeg-for-android/ 中给出的说明编译代码

结果,在 Android/lib 文件夹中生成了 .a 文件,在 android/include 文件夹中生成了 .h 文件。

但是,当我尝试创建使用此预构建 FFmpeg 库(.a 文件)的 native 代码的 .so 文件时,它会给出未定义的引用错误。

请在下面找到我的项目的代码结构。

项目路径为/home/guest/Neeraj_temp/FFMpeg-Example
在这条路径上,我创建了两个文件夹 jni & prebuilt
在预建文件夹中,我保留了 libavfilter.a、libavcodec.a、libavformat.a、libavutil.a、libswscale.a
在 jni 文件夹中,我保留了一个包含所有 .h 文件夹(libavcodec、libavfilter、libavformat、libavutil、libswscale)的包含文件夹。

api-example.c 文件也保存在使用 FFmpeg API 的 jni 文件夹中。
& jni 文件夹中的一个 Android.mk 文件。

Android.mk:-

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libFFmpeg
LOCAL_C_INCLUDES := $(LOCAL_PATH)/FFMpeg/include
LOCAL_SRC_FILES := api-example.c
LOCAL_LDLIBS += -L$(LOCAL_PATH)/../prebuilt -lavfilter -lavutil -lavformat -lavcodec -lswscale
include $(BUILD_SHARED_LIBRARY)

错误:
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:689: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wavpack.o): In function `wv_unpack_stereo':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:604: undefined reference to `av_log'
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:608: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wavpack.o):/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:1215: more undefined references to `av_log' follow
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `synth_block_fcb_acb':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1359: undefined reference to `av_memcpy_backptr'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `synth_frame':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1441: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `synth_superframe':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1765: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `wmavoice_decode_packet':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1919: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `wmavoice_decode_init':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:350: undefined reference to `av_log'
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:373: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o):/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:397: more undefined references to `av_log' follow
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wnv1.o): In function `decode_frame':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wnv1.c:81: undefined reference to `av_reverse'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(ws-snd1.o): In function `ws_snd_decode_frame':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/ws-snd1.c:70: undefined reference to `av_log'
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/ws-snd1.c:83: undefined reference to `av_log'
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/ws-snd1.c:79: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xan.o): In function `xan_decode_frame':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:568: undefined reference to `av_log'
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:551: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xan.o):/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:515: more undefined references to `av_log' follow
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xan.o): In function `xan_unpack':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:178: undefined reference to `av_memcpy_backptr'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xl.o): In function `decode_frame':
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xl.c:60: undefined reference to `av_log'
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xsubdec.o): In function `decode_frame'

我已经阅读了很多博客,但仍然无法获得解决方案。请给我解决方案。我需要如何构建不应该出现这些错误的代码并编译代码。

谢谢。

最佳答案

我下载了该版本的 FFmpeg 并将其构建在 Ubuntu Linux 上(但不适用于 Android)。我调查了那些给你带来麻烦的功能。

看起来您只复制了一些链接错误(这很好,因为其余的可能相似)。错误文本显示缺少 2 个符号:av_logav_reverse .这两个都应该在 libavutil.a 中定义。运行nm针对 libavutil.a 并搜索 'T av_log''R av_reverse' .那些字符串出现了吗?如果不是,则某些文件没有被构建并归档到 libavutil.a 中。搜索已构建的对象并尝试验证 log.o(对于 av_log)和 math.o(对于 av_reverse)都已构建。如果它们不存在,我们需要找出构建错过它们的原因。

如果这些字符串确实存在于 nm上市,然后我就糊涂了。这表明 libavutil.a 没有被链接,即使我在您的 LOCAL_LDLIBS 变量中看到它。链接顺序显示正确(libavcodec 之前的 avutil)。

关于android - Android平台的FFmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com