在Raspberry Pi上将omxplayer与go.dbus一起使用

问题描述 投票:10回答:1

我正在尝试使用omxplayer上的D-Bus接口来控制正在运行的视频。我正在尝试使用位于以下位置的go.dbus库进行此操作:https://github.com/guelfey/go.dbus

omxplayer文档提供了可以成功使用的dbuscontrol.sh脚本。它设置了一些环境变量,然后可以使用dbus-send来查询omxplayer。

我正在尝试在Go中重现此内容,但我不断收到错误消息“任何服务文件均未提供名称org.mpris.MediaPlayer2”

这是我的代码:

package main

import (
    "encoding/json"
    "fmt"
    "github.com/guelfey/go.dbus"
    "github.com/guelfey/go.dbus/introspect"
    "os"
)

func main() {
    os.Setenv("OMXPLAYER_DBUS_ADDR", "/tmp/omxplayerdbus.pi")
    os.Setenv("OMXPLAYER_DBUS_PID", "/tmp/omxplayerdbus.pi.pid")
    conn, err := dbus.SessionBus()
    if err != nil {
        panic(err)
    }
    node, err := introspect.Call(conn.Object("org.mpris.MediaPlayer2.omxplayer", "/org/mpris/MediaPlayer2"))
    if err != nil {
        fmt.Println(err)
    }
    data, _ := json.MarshalIndent(node, "", "    ")

    var s []string
    err = conn.BusObject().Call("org.freedesktop.DBus.ListNames", 0).Store(&s)
    if err != nil {
        fmt.Fprintln(os.Stderr, "Failed to get list of owned names:", err)
        os.Exit(1)
    }

    fmt.Println("Currently owned names on the session bus:")
    for _, v := range s {
        fmt.Println(v)
    }

    os.Stdout.Write(data)
}
go raspberry-pi dbus omxplayer
1个回答
0
投票

[OMXplayer不使用系统或会话总线,而是使用其自己的总线,该总线的路径是OMXPLAYER_DBUS_ADDR环境变量指向的文件的内容。

您可以看到dbuscontrol.sh脚本在lines 5-8(特别是第7行)上进行了设置。

根据您的情况,您需要打开该文件,阅读其内容,并将其用于对dbus.Conn.Dial()的调用。

类似于此的方法可能起作用:

dbus.Conn.Dial()
© www.soinside.com 2019 - 2024. All rights reserved.