diff --git a/backend/mediaprovider/model.go b/backend/mediaprovider/model.go index a39477d..bd7b4d7 100644 --- a/backend/mediaprovider/model.go +++ b/backend/mediaprovider/model.go @@ -183,6 +183,7 @@ const ( type MediaItemMetadata struct { Type MediaItemType + MIMEType string ID string Name string Artists []string @@ -204,6 +205,7 @@ func (t *Track) Metadata() MediaItemMetadata { } return MediaItemMetadata{ Type: MediaItemTypeTrack, + MIMEType: t.ContentType, ID: t.ID, Name: t.Title, Artists: t.ArtistNames, diff --git a/backend/playbackengine.go b/backend/playbackengine.go index 52b6e78..8ed8654 100644 --- a/backend/playbackengine.go +++ b/backend/playbackengine.go @@ -140,6 +140,14 @@ func (p *playbackEngine) registerPlayerCallbacks(pl player.BasePlayer) { }) } +func (p *playbackEngine) unregisterPlayerCallbacks(pl player.BasePlayer) { + pl.OnPaused(nil) + pl.OnPlaying(nil) + pl.OnStopped(nil) + pl.OnSeek(nil) + pl.OnTrackChange(nil) +} + func (p *playbackEngine) SetPlayer(pl player.BasePlayer) error { // even if we don't successfully change players, // make sure UI updates if needed (eg enabling cast button) @@ -162,6 +170,7 @@ func (p *playbackEngine) SetPlayer(pl player.BasePlayer) error { p.pendingPlayerChangeTimePos = stat.TimePos p.pendingPlayerChange = true } + p.unregisterPlayerCallbacks(p.player) if err := p.player.Stop(true); err != nil { log.Printf("failed to stop player: %v", err) } diff --git a/backend/player/dlna/dlnaplayer.go b/backend/player/dlna/dlnaplayer.go index 939824f..0dcb38f 100644 --- a/backend/player/dlna/dlnaplayer.go +++ b/backend/player/dlna/dlnaplayer.go @@ -156,8 +156,10 @@ func (d *DLNAPlayer) PlayFile(urlstr string, meta mediaprovider.MediaItemMetadat key := d.addURLToProxy(urlstr) media := avtransport.MediaItem{ - URL: d.urlForItem(key), - Title: meta.Name, + URL: d.urlForItem(key), + Title: meta.Name, + ContentType: meta.MIMEType, + Seekable: true, } if err := d.playAVTransportMedia(&media); err != nil { @@ -224,8 +226,10 @@ func (d *DLNAPlayer) SetNextFile(url string, meta mediaprovider.MediaItemMetadat key := d.addURLToProxy(url) media = &avtransport.MediaItem{ - URL: d.urlForItem(key), - Title: meta.Name, + URL: d.urlForItem(key), + ContentType: meta.MIMEType, + Title: meta.Name, + Seekable: true, } }