2

DBus 経由で omxplayer の複数のインスタンスを制御しようとしています。これは、アプリケーションを制御するために現在使用しているコードです。

QDBusConnection *m_dbus = new QDBusConnection(QDBusConnection::sessionBus());
m_dbus->connectToBus("/tmp/omxplayerdbus.root", "org.mpris.MediaPlayer2.omxplayer");
// ...
    QString dest = "org.mpris.MediaPlayer2.omxplayer";
    QString path = "/org/mpris/MediaPlayer2";
    QString interface = "org.mpris.MediaPlayer2.Player";
    QString name = "Action";
    QDBusMessage msg = QDBusMessage::createMethodCall(dest, path, interface, name);
    msg.setArguments(QList<QVariant>() << 16);
    m_dbus->send(msg);

/tmp/omxplayerdbus.root にはアドレスが含まれており、次のように作成されます。

DBUS_CMD="dbus-daemon --fork --print-address 5 --print-pid 6 --session"
OMXPLAYER_DBUS_ADDR="/tmp/omxplayerdbus.${USER:-root}"
OMXPLAYER_DBUS_PID="/tmp/omxplayerdbus.${USER:-root}.pid"
exec 5> "$OMXPLAYER_DBUS_ADDR"
exec 6> "$OMXPLAYER_DBUS_PID"
$DBUS_CMD

DBUS_SESSION_BUS_ADDRESS=`cat $OMXPLAYER_DBUS_ADDR`
DBUS_SESSION_BUS_PID=`cat $OMXPLAYER_DBUS_PID`

export DBUS_SESSION_BUS_ADDRESS
export DBUS_SESSION_BUS_PID

OMXPLAYER_DIR="/usr/bin"
OMXPLAYER_BIN="$OMXPLAYER_DIR/omxplayer.bin"
$OMXPLAYER_BIN "$@"

ここで、omxplayer の別のインスタンスを開始し、DBus から制御したいと考えています。

異なるアドレスを提供するたびに dbus-daemon をフォークする必要があり、アプリケーションで関連するバスに接続する必要がありますか? この場合、関連付けられている omxplayer が終了するときに、フォークされたプロセスを強制終了する必要がありますか?

4

0 に答える 0