在我的嵌入式应用程序中,我必须对 wav 文件进行下采样。我发现 SoX 可以完成这项工作,所以我将其添加到我的图像配方中。
构建图像时,它引发了一个错误,因为需要 ffmpeg 作为依赖项,所以我在我的配方中添加了 ffmpeg
然后它引发了以下错误:
ffmpeg was skipped: because it has a restricted license 'commercial'. Which is not whitelisted in LICENSE_FLAGS_WHITELIST
所以我最终在我的 conf/local.conf 文件中添加了 LICENSE_FLAGS_WHITELIST="commercial" 。然后就可以构建了。
然而,我只使用 SoX 的下采样函数和我想摆脱 ffmpeg 的限制。
SoX 嵌入的版本是 14.4.2,在配方中,我可以看到与 ffmpeg 的依赖关系以及 LICENSE_FLAGS_WHITELIST 必须包含“商业”的事实
在 yocto/meta-openembedded 上,我找到了 SoX 14.4.0 版本的配方,它不依赖于 ffmpeg。
我有两种可能性,但我不知道如何实现它们:
- 嵌入 SoX 14.4.0 版本,这似乎是最简单的解决方案(希望它不会引发其他问题),
- 重载当前配方,以便使用选项 --with-ffmpeg=no 编译 SoX 以摆脱 ffmpeg
我的图像配方是这样开始的:
IMAGE_INSTALL = " \
packagegroup-core-boot \
packagegroup-verbatim-sensor \
python3 \
python3-pillow \
sox \
ffmpeg\
${CORE_IMAGE_EXTRA_INSTALL} \
"
...
我如何才能包含 SoX 配方的特定版本?
如何超载配方 sox_14.4.2.bb 以摆脱 ffmpeg ?
编辑 :我忘了提及我的 Yocto 基于分支“Honister”,默认情况下采用 sox 14.4.2
编辑 :我是 Yocto 初学者,所以我可能会说一些愚蠢的话,但是如果我获取 sox_14.4.0.bb 的内容并在 .bbappend 中使用它来覆盖 sox_14.4.2.bb ,它会起作用吗?
我尝试过,但解析失败。
编辑 :好吧,经过进一步研究发现sox依赖于libav函数进行重采样,这正是我需要的函数。在sox 14.4.0中,libav是直接引用的,但在sox 14.4.2中libav是由ffmpeg(ffmpeg 4.4)提供的
所以我想尝试另一种方法,包括做一个ffmpeg_4.4.bbappend,在其中我中和不需要的软件包(需要商业许可证)以及“商业”许可证,但我不知道如何继续。
我应该对包执行 PACKAGE_EXCLUDE 行吗?
如何通过 .bbappend 从 ffmpeg_4.4.bb 中删除 LICENSE_FLAGS ?