使用对象 ID 获取正确的 Pipewire 对象

使用对象 ID 获取正确的 Pipewire 对象

我需要知道对应于特定对象的 Pipewire object.serial 。

解析 的输出pw-cli list-objects是我所需要的,但我对多行正则表达式很差。

pw-cli list-objects给出这个:

id 0, type PipeWire:Interface:Core/4
    object.serial = "0"
    core.name = "pipewire-0"
id 1, type PipeWire:Interface:Module/3
    object.serial = "1"
    module.name = "libpipewire-module-rt"
id 2, type PipeWire:Interface:Module/3
    object.serial = "2"
    module.name = "libpipewire"
...
...

我不知道,这个格式的名字是什么,所以我需要自己解析它。

我需要首先识别对象(id 1,2,...),然后将它们逐行放入正则表达式中,选择正确的对象,然后用正则表达式解析正确的参数。

如何使用 AWK 检测对象?

  1. 使用多行正则表达式模式检测对象
  2. 通过逐行正则表达式模式(例如使用 grep)将对象逐一放置并选择正确的对象
  3. 我处于 awk 推送正确对象然后解析正确参数的正确值的情况
    例如:grep -G "\s.*object.serial = \".*\"" | cut -d '"' -f

对于@marcus-müller

好的,所以我的目标是操纵特定过程的音频。

我的脚本中有方法可以确定该进程的正确 PID。 Pipewire 不理解 PID,所以我必须了解object.serial该 PID 的对应信息。然而,它的图表包含它们并将它们保存到pipewire.sec.pid参数中。通过该参数,我可以从图中识别正确的对象,然后使用它的其他参数等object.serial

证明 Pipewire 服务器知道其客户端的 PID:

  1. pw-play [path to a audio file] &cvlc [path to a audio file] &或者其他玩家。目标是开始播放音频并了解该进程的 PID。注意:该文件需要足够长,以便您有时间运行以下命令。
  2. 运行pw-cli ls | grep [the pid]就会返回pipewire.sec.pid = "[PID]"。这证明 Pipewire 服务器的图知道 PID。如果运行,pw-cli ls | grep -B20 -A20 [the pid]您将看到该参数属于哪个对象。

相关内容