From e08d24fd199bee764e5dfcf751c21a9d7774387f Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 29 Jan 2016 00:23:00 +0100 Subject: improved handling of seek position diff --git a/player/player.go b/player/player.go index 0717983..5d4e1d4 100644 --- a/player/player.go +++ b/player/player.go @@ -153,14 +153,21 @@ func (p *Player) onMessage(bus *gst.Bus, msg *gst.Message) { p.updateChan <- updateData{duration: p.duration} err, _ := msg.ParseError() p.stdlog.Printf("GStreamer Pipeline Error: %s", err) + case gst.MESSAGE_DURATION_CHANGED: + fallthrough case gst.MESSAGE_ASYNC_DONE: duration, ok := p.pipe.QueryDuration(gst.FORMAT_TIME) if ok { p.duration = time.Duration(duration) - p.updateChan <- updateData{duration: p.duration} + pos, ok := p.pipe.QueryPosition(gst.FORMAT_TIME) + if !ok { + p.stdlog.Printf("GStreamer Pipeline Error: unable to query playback position") + } + p.updateChan <- updateData{duration: p.duration, pos: time.Duration(pos)} } else { p.stdlog.Printf("GStreamer Pipeline Error: unable to query duration of file") } + case gst.MESSAGE_ELEMENT: s := msg.GetStructure() peak := s.Data["peak"].(gst.GValueArray) @@ -173,6 +180,11 @@ func (p *Player) onMessage(bus *gst.Bus, msg *gst.Message) { pos := time.Duration(s.Data["stream-time"].(uint64)) p.updateChan <- updateData{duration: p.duration, pos: pos, meter: meter} case gst.MESSAGE_STATE_CHANGED: + case gst.MESSAGE_STREAM_STATUS: + case gst.MESSAGE_STREAM_START: + case gst.MESSAGE_TAG: + case gst.MESSAGE_NEW_CLOCK: + case gst.MESSAGE_RESET_TIME: default: p.dbglog.Printf("GStreamer Message: unknown type '%s'", msg.GetTypeName()) } -- cgit v0.10.2