【问题标题】:Using go.dbus with omxplayer on Raspberry Pi在 Raspberry Pi 上使用 go.dbus 和 omxplayer
【发布时间】:2015-03-17 18:40:37
【问题描述】:

我正在尝试使用 omxplayer 上的 D-Bus 界面来控制正在运行的视频。我正在尝试使用此处找到的 go.dbus 库:https://github.com/guelfey/go.dbus

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

我试图在 Go 中重现这一点,但我不断收到错误消息“任何 .service 文件都没有提供名称 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)
}

【问题讨论】:

  • 您必须使用文件的内容 - 地址类似于 unix:abstract=/tmp/dbus-mQJTjffxVL,guid=cb5b9d6eb7d17e381a9ce1c2590d99aa 但我仍然无法调用任何 dbus 函数omxplayer

标签: go raspberry-pi dbus omxplayer


【解决方案1】:

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

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

在您的情况下,您需要打开该文件,读取其内容,然后在调用 dbus.Conn.Dial() 时使用它。

类似的东西可能会起作用:

import (
    "log"
    "io/ioutil"
    "github.com/guelfey/go.dbus"
)

func getOMXPlayerDBUSAddr() string {
    content, err := ioutil.ReadFile("/tmp/omxplayerdbus.pi")
    if err != nil {
        log.Fatal(err)
    }

    return string(content)
}

func main() {
    conn, err := dbus.Dial(getOMXPlayerDBUSAddr())
    if err != nil {
        panic(err)
    }

    // The rest of the code goes here
    node, err := introspect...
}

【讨论】:

    猜你喜欢
    • 2017-01-23
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多