在“buildozer.spec”的要求部分中指定 FFMPEG 导致 [libavformat/network.o] 错误 1

Posted

技术标签:

【中文标题】在“buildozer.spec”的要求部分中指定 FFMPEG 导致 [libavformat/network.o] 错误 1【英文标题】:Specifying FFMPEG in the requirements section of 'buildozer.spec' causing [libavformat/network.o] Error 1 【发布时间】:2018-07-08 22:56:21 【问题描述】:

我的问题与如何减轻 buildozer.spec 中列出的 ffmpeg 要求有关,该要求导致使用 buildozer 编译错误。

目标:

使用 buildozer 确保 FFMPEG 可以嵌入到小型 Kivy 应用程序中,这样我就可以在我的 android 手机上使用 youtube_dl 功能。

问题: 在“buildozer.spec”的要求部分中指定 FFMPEG 会导致以下错误消息:common.mak:60: recipe for target 'libavformat/network.o' failed make: [libavformat/network.o] 错误 1 make: 等待未完成的工作......

我做了什么来解决自己: 1. 确保指定了 LOG LEVEL 2。

    将 cython 从版本 21 升级到 27。然后降级到 25,然后是 21,然后是 20,看看这是否解决了任何问题。它没有。

    在 BUILDOZER.SPEC 中,在 Android NDK crystax-ndk-10.3.2 和 android-ndk-r16b 之间切换。 (注意已恢复到 Crystax 10.3.2)在我的 NDK PATH 中。

    在 BUILDOZER.SPEC 中,将 android.api 从 19 更改为 15(只是看看这是否有任何积极影响)。

    在每次编译尝试之间执行:rm -Rf .buildozer。

    Buildozer.log

    部分摘录

    在 libavformat/dump.c:37:0: 中包含的文件中 libavformat/avformat.h:893:21:注意:此处声明 AVCodecContext 编解码器; ^ CC libavformat/format.o CC libavformat/golomb_tab.o CC libavformat/h264dec.o CC libavformat/hevc.o CC libavformat/http.o CC libavformat/httpauth.o CC libavformat/id3v1.o CC libavformat/id3v2.o CC libavformat/img2.o CC libavformat/isom.o CC libavformat/log2_tab.o CC libavformat/m4vdec.o CC libavformat/metadata.o CC libavformat/mov_chan.o CC libavformat/mov.o CC libavformat/movenc.o CC libavformat/movenccenc.o CC libavformat/movenchint.o CC libavformat/mpegvideodec.o CC libavformat/mux.o CC libavformat/network.o 在 libavformat/network.h:29:0 包含的文件中, 来自 libavformat/network.c:22: libavformat/os_support.h:67:32: 错误:预期的声明说明符或 '...' 在 '(' 标记 # 定义 lseek(f,p,w) lseek64((f), (p), (w)) ^ libavformat/os_support.h:67:37:错误:预期的声明说明符或 '...' 在 '(' 标记 # 定义 lseek(f,p,w) lseek64((f), (p), (w)) ^ libavformat/os_support.h:67:42:错误:预期的声明说明符或 '...' 在 '(' 标记 # 定义 lseek(f,p,w) lseek64((f), (p), (w)) ^ common.mak:60:目标“libavformat/network.o”的配方失败 制作: [libavformat/network.o] 错误 1 make: * 等待未完成的工作......

    部分摘录 Buildozer.spec

    (str) 应用标题

    title = 我的应用程序

    (str) 包名

    package.name = myapp

    (str) 包域(android/ios打包需要)

    package.domain = org.test

    (str) main.py所在的源代码

    source.dir = .

    (列表)要包含的源文件(留空以包含所有文件)

    source.include_exts = py,png,jpg,kv,atlas

    (list) 使用模式匹配的包含列表

    source.include_patterns = assets/,images/.png

    (列表)要排除的源文件(留空不排除任何内容)

    source.exclude_exts = 规范

    (list) 要排除的目录列表(留空不排除任何内容)

    source.exclude_dirs = 测试,bin

    (list) 使用模式匹配的排除列表

    source.exclude_patterns = license,images//.jpg

    (str) 应用程序版本控制(方法 1)

    版本 = 0.1

    (str) 应用程序版本控制(方法 2)

    version.regex = 版本 = '"['"]

    version.filename = %(source.dir)s/main.py

    (列表)申请要求

    逗号分隔,例如要求 = sqlite3,kivy

    要求 = ffmpeg,python2,hostpython2,kivy,youtube-dl

    (str) 需求的自定义源文件夹

    根据配方的任何要求设置自定义来源

    requirements.source.kivy = ../../kivy

    (列表)花园要求

    garden_requirements =

    (str) 应用程序的预启动

    presplash.filename = %(source.dir)s/data/presplash.png

    (str) 应用程序图标

    icon.filename = %(source.dir)s/data/icon.png

    (str) 支持的方向(横向、纵向或全部)

    方向=纵向

    (list)要声明的服务列表

    服务 = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

    OSX 特定

    作者 = © 版权信息

    更改应用程序使用的python的主要版本

    osx.python_version = 3

    要使用的 Kivy 版本

    osx.kivy_version = 1.9.1

    Android 特定

    (bool) 指示应用程序是否应该全屏

    全屏 = 0

    (string) Presplash 背景颜色(用于新的 android 工具链)

    支持的格式有:#RRGGBB #AARRGGBB 或以下名称之一:

    红色、蓝色、绿色、黑色、白色、灰色、青色、洋红色、黄色、浅灰色,

    深灰色、灰色、浅灰色、深灰色、浅绿色、紫红色、青柠色、栗色、海军蓝、

    橄榄色、紫色、银色、蓝绿色。

    android.presplash_color = #FFFFFF

    (列出)权限

    android.permissions = 互联网

    (int) 要使用的 Android API

    android.api = 19

    (int) 所需的最低 API

    android.minapi = 9

    (int) 要使用的 Android SDK 版本

    android.sdk = 20

    (str) 要使用的 Android NDK 版本

    android.ndk = 10.3.2

    (bool) 使用--private data storage (True) 或--dir public storage (False)

    android.private_storage = True

    (str) Android NDK目录(为空会自动下载)

    android.ndk_path = /home/gjones/Downloads/crystax-ndk-10.3.2

    (str) Android SDK目录(为空会自动下载)

    android.sdk_path =

    (str) ANT目录(为空会自动下载)

    android.ant_path =

    最后,当我从 buildozer.spec 中的要求中删除 ffmpeg 时,.APK 编译成功,我可以使用 KIVY 将它部署到我的手机上图形用户界面。显然,ffmpeg 功能不存在。

当前环境规范:

    将 Linux Mint 17.2 作为 Virtual Box VM 运行 Buildozer 版本:0.35dev Cython 版本:0.25

任何建议将不胜感激。

最后,如果通过 buildozer 没有明显的解决方案,我是否需要单独为 Android 编译 ffmpeg 并以某种方式将其包含在 buildozer 规范文件的某个位置以防止出现此错误消息?

提前致谢。

【问题讨论】:

我今天也遇到了同样的问题。只需添加 ffmpeg 即可在我的 Android 应用中显示视频。全新安装每个 kivy 站点。一切从头开始。尽管如此,在同一个库上编译失败。 【参考方案1】:

buildozer 的 ffmpeg 配方在 master 上被破坏了。您必须在 buildozer.spec 上设置“p4a.branch = develop”才能使 ffpyplayer 和 ffmpeg 工作。

【讨论】:

使用代码/命令语法提供更多信息,以便更好地理解

以上是关于在“buildozer.spec”的要求部分中指定 FFMPEG 导致 [libavformat/network.o] 错误 1的主要内容,如果未能解决你的问题,请参考以下文章

《Buildozer打包实战指南》第六节 buildozer.spec配置文件中的其他参数

《Buildozer打包实战指南》第六节 buildozer.spec配置文件中的其他参数

使用 Buildozer 进行语音识别

《Buildozer打包实战指南》第六节 buildozer.spec配置文件中的其他参数

buildozer.spec

由于不同的 ModuleNotFoundError 原因,Buildozer 不断崩溃