使用GDBus注册多个MPRIS播放器

时间:2017-06-28 01:09:58

标签: c glib dbus gdbus

我想用glib注册多个媒体播放器。最小(非)工作示例是here。我可以理解specification,我应该导出许多名为advance_past_empty_inner_containers()的对象,这很奇怪。

1 个答案:

答案 0 :(得分:1)

如果您在同一个进程中有多个媒体播放器,则需要为会话总线打开一个D-Bus连接,以便每个,并公开一个单独的/org/mpris/MediaPlayer2对象在每个连接上。您不能在单个D-Bus连接上的同一路径上公开多个对象。

请注意,如果您使用g_bus_get_sync()获取总线连接,它将返回单例会话总线连接 - 即每次调用时都返回相同的连接。为了建立与会话总线的多个连接,您需要使用g_dbus_address_get_for_bus_sync()g_dbus_connection_new_for_address()进行连接,如g_bus_get_sync()的文档中所述:

  

返回的对象是一个单例,即与其他调用者共享   对于g_bus_get()g_bus_get_sync()bus_type。如果是这样的话   你需要一个私人消息总线连接,使用   g_dbus_address_get_for_bus_sync()和   g_dbus_connection_new_for_address()