如何设置 DBus 查询以获取 VLC 的播放状态?

如何设置 DBus 查询以获取 VLC 的播放状态?

我正在经历这个问题即使在播放结束后,VLC 仍会继续抑制电源管理守护进程(尽管 VLC 偏好设置中的选项标记为“抑制电源管理守护进程播放期间“)。我问VLC 论坛但没有得到答复。我考虑过手动编译VLC 的最新开发版本来解决此问题,但我不确定是否要去那里或者这是否能解决问题。 一个答案建议设置 DBus 查询以获取 VLC 的播放状态并在播放完成后终止进程。如何设置这样的 DBus 查询?我的系统在ppa:videolan/stable-dailyUbuntu 12.04 LTS 上运行 VLC 2.0.9,并且所有已安装的软件包都已更新为最新版本。谢谢。

答案1

我的解决方案是用 C 语言编写的是我最终选择的。它是一个守护进程,使用低级 DBus API 调用 VLC 上的方法以获取播放状态,并在 VLC 停止时要求其退出。bash 和 python 脚本在作为 Ubuntu 启动应用程序运行时不可靠,而这正是我想要的。如果我没记错的话,bash 和 python 版本必须从终端手动运行才能工作。

猛击使用 GDBus 的解决方案(在我的 Ubuntu 12.04 上默认安装):

#VLC Watchdog Bash Script (vlcwd.sh)
while [ 1 -eq 1 ]
do
    if [ "$(pgrep vlc)" != "" ] #if VLC is running
        then #get the playback status and save to variable pbs
        pbs=$(bash -c 'gdbus call --session \
        --dest org.mpris.MediaPlayer2.vlc-$(pgrep vlc) \
        --object-path /org/mpris/MediaPlayer2 \
        --method org.freedesktop.DBus.Properties.Get \
        "org.mpris.MediaPlayer2.Player" \
        "PlaybackStatus"')
        if [ "$pbs" = "(<'Stopped'>,)" ] #if VLC is stopped
        then kill -9 $(pgrep vlc) #then kill it so it doesn't block my screen saver
        fi
    fi
    sleep 5
done

Python 以下是我使用 Python 和模块设置 DBus 查询以获取 VLC 的播放状态的方法python-dbus

import dbus

bus = dbus.SessionBus()
vlc_media_player_obj = bus.get_object("org.mpris.MediaPlayer2.vlc", "/org/mpris/MediaPlayer2")
props_iface = dbus.Interface(vlc_media_player_obj, 'org.freedesktop.DBus.Properties')
pb_stat = props_iface.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus')

相关内容