Important
🔥 Found this useful? A quick star goes a long way.
[!DANGER]
v2is very unstable!
- Full MPRIS 2.2 support for
BaseandPlayerinterfaces (TrackListandPlaylistsare incomplete). - Type-safe D-Bus access ensuring reliable data handling across all players.
- Native
time.Durationusage for playback times instead of raw microseconds. - Simple, high-level API for playback control, metadata, and property management.
go get github.com/Nadim147c/go-mpris/v2The dependency github.com/godbus/dbus/v5 is going to be installed as well.
Printing the current playback status and then changing it:
import (
"log"
"github.com/Nadim147c/go-mpris/v2"
"github.com/godbus/dbus/v5"
)
func main() {
conn, err := dbus.SessionBus()
if err != nil {
panic(err)
}
names, err := mpris.List(conn)
if err != nil {
panic(err)
}
if len(names) == 0 {
log.Fatal("No player found")
}
name := names[0]
client := mpris.NewClient(conn, name)
status, err := client.GetPlaybackStatus()
if err != nil {
log.Fatal("Could not get current playback status")
}
log.Printf("The player was %s...", status)
err = client.PlayPause()
if err != nil {
log.Fatal("Could not play/pause player")
}
}Creating a mock MPRIS server:
import (
"context"
"log"
"github.com/Nadim147c/go-mpris/v2"
"github.com/godbus/dbus/v5"
)
func main() {
conn, err := dbus.SessionBus()
if err != nil {
panic(err)
}
defer conn.Close()
name := mpris.BaseInterface + ".my_server"
server := mpris.NewServer(conn, name)
meta := mpris.Metadata{}
meta.Set(mpris.KeyTitle, "My Track")
meta.Set(mpris.KeyArtist, []string{"My Artist"})
pm := mpris.NewPropertiesManager(&mpris.Properties{
PlaybackStatus: mpris.PlaybackPlaying,
Metadata: meta,
})
server.RegisterPropertiesManager(pm, mpris.NoOpPropertySetter{})
server.RegisterBaseHandler(mpris.NoOpBaseHandler{})
server.RegisterPlayerHandler(mpris.NoOpPlayerHandler{})
log.Printf("Listening on %s", name)
if err := server.Listen(context.Background()); err != nil {
log.Fatal(err)
}
}For more examples, see the examples folder.
Read the docs at https://pkg.go.dev/github.com/Nadim147c/go-mpris.