如何将多个属性传递给 PulseAudio 模块参数 source_output_properties?

如何将多个属性传递给 PulseAudio 模块参数 source_output_properties?

许多 PulseAudio 模块接受属性列表作为参数,但我找不到有关该列表格式的任何文档,而且我能找到的所有示例都只传递一个属性。以下是我想要做的:

pactl load-module module-loopback source=… sink=… \
    source_output_properties='module-stream-restore.id="loopback" media.name="foo"'

此调用导致无用的错误消息

Failure: Module initialisation failed

系统日志包含稍微更有帮助的信息

module-loopback.c: Failed to parse module arguments

单独传递这两个参数中的任何一个都可以正常工作,所以问题在于同时传递这两个参数。我尝试了各种格式,包括传递source_output_properties两次参数,但总是得到相同的错误。

我知道pacmd在加载模块后可以用来更改源输出的属性,但是在 shell 脚本中编写脚本要复杂得多,因为您需要找到新源输出的索引。

由于没有文档说明如何做到这一点,我查看了源代码,解析属性列表的函数看起来它应该接受我提供的格式的参数列表。

有什么线索可以告诉我们如何做到这一点吗?

我正在使用 PulseAudio 版本 13.0。

答案1

通过根据源代码进行有根据的猜测,我发现了以下两种传递多个属性的工作方式:

pactl load-module module-loopback source_output_properties="'foo=\"bar\" baz=\"gloink\"'"
pactl load-module module-loopback source_output_properties='foo="bar"baz="gloink"'

显然,PulseAudio 正在应用其自己的引号解析,其与 shell 的引号解析的交互存在缺陷。

解决这个问题的另一种方式适合于 shell 脚本,pacmd而是使用:

pacmd <<EOF
load-module module-loopback source_output_properties='foo="bar" baz="gloink"'
EOF

这样,我们就可以避免 shell 的引号解析,从而恢复一些理智。

这些似乎都没有在任何地方有记录,所以我提交了错误

相关内容