Зарегистрируйте более одного игрока MPRIS в GDBus

Я хочу зарегистрировать более одного медиаплеера в glib. Минимальный (не) рабочий пример здесь. Как я могу понять спецификацию, я должен экспортировать много объектов с одним именем /org/mpris/MediaPlayer2 и это странно.

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(),

Другие вопросы по тегам