在“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配置文件中的其他参数