seek to correct position when switching players

This commit is contained in:
Drew Weymouth
2025-03-29 15:57:34 -07:00
parent 084aa6cdba
commit f9c9f290bd
5 changed files with 63 additions and 30 deletions
+24 -7
View File
@@ -123,7 +123,7 @@ func (d *DLNAPlayer) GetVolume() int {
return vol
}
func (d *DLNAPlayer) PlayFile(urlstr string, meta mediaprovider.MediaItemMetadata) error {
func (d *DLNAPlayer) PlayFile(urlstr string, meta mediaprovider.MediaItemMetadata, startTime float64) error {
d.ensureSetupProxy()
d.metaLock.Lock()
@@ -139,13 +139,23 @@ func (d *DLNAPlayer) PlayFile(urlstr string, meta mediaprovider.MediaItemMetadat
if err := d.playAVTransportMedia(&media); err != nil {
return err
}
if startTime > 0 {
// TODO: do something better than this!!
time.Sleep(2 * time.Second)
d.sendSeekCmd(startTime)
}
d.state = playing
d.setTrackChangeTimer(time.Duration(meta.Duration) * time.Second)
remainingDur := meta.Duration - int(startTime)
d.setTrackChangeTimer(time.Duration(remainingDur) * time.Second)
d.stopwatch.Reset()
d.stopwatch.Start()
d.lastStartTime = 0
d.lastStartTime = int(startTime)
d.InvokeOnPlaying()
d.InvokeOnTrackChange()
if startTime > 0 {
d.InvokeOnSeek()
}
return nil
}
@@ -251,12 +261,9 @@ func (d *DLNAPlayer) SeekSeconds(secs float64) error {
d.pendingSeek = true
d.pendingSeekSecs = secs
} else {
d.seeking = true
if err := d.avTransport.Seek(context.Background(), int(secs)); err != nil {
d.seeking = false
if err := d.sendSeekCmd(secs); err != nil {
return err
}
d.seeking = false
}
d.lastStartTime = int(secs)
@@ -274,6 +281,16 @@ func (d *DLNAPlayer) SeekSeconds(secs float64) error {
return nil
}
func (d *DLNAPlayer) sendSeekCmd(secs float64) error {
d.seeking = true
if err := d.avTransport.Seek(context.Background(), int(secs)); err != nil {
d.seeking = false
return err
}
d.seeking = false
return nil
}
func (d *DLNAPlayer) IsSeeking() bool {
return d.seeking
}