检测媒体播放/暂停事件

检测媒体播放/暂停事件

我想在拔下耳机后暂停播放,然后在重新插入耳机后恢复播放。

我当前的解决方案使用 ACPI 来检测插入/拔出,如下所示这里。要播放/暂停播放,我使用xdotool key XF86AudioPlay

这个解决方案在基本情况下工作正常:

  • 音乐正在播放,耳机已插入
  • 耳机拔出 -> 音乐暂停
  • 耳机重新插入 -> 音乐继续播放。

然而,我确实不是如果未处于活动状态,则想要恢复播放什么时候耳机已拔掉。

想象一下这样的场景:

  • 戴上耳机启动电脑,
  • 播放音乐,
  • 暂停音乐,
  • 拔下耳机,
  • 重新插入耳机。

问题就出在最后一点——虽然拔下耳机时播放功能并未处于活动状态,但重新插入耳机后播放会恢复。

此外,xdotool key XF86AudioPlay只是切换播放,而xdotool key XF86AudioPause什么也不做。这让事情变得更糟:

  • 戴上耳机启动电脑,
  • 播放音乐,
  • 暂停音乐,
  • 拔下耳机(音乐开始播放!)

所以我需要的是检测播放/暂停/停止事件以及插入/拔出事件,以便能够在所有可能的情况下做出正确反应。

该状态机描述了所需的操作: 拔出并暂停 FSM


我想到的一个想法是重新绑定播放/暂停/停止的键盘快捷键以添加状态机逻辑。这样做的缺点是播放总是必须使用这些键盘快捷键来控制,而不是使用 Rhythmbox 按钮,因为后者有些不切实际。

另外,如果我在播放时关闭 Rhythmbox,状态机将保持状态playing。当然,我可以有一个“守护进程”,它会等到 Rhythmbox 关闭,然后将状态设置为stopped。但是,如果不是 Rhythmbox 播放音乐,例如 VLC 等,该怎么办?这种方法很丑陋,也不可靠,所以我想避免它。


我的问题:如何检测媒体播放何时暂停/恢复/停止?

相关内容