This commit is contained in:
Avi Zimmerman
2021-01-21 21:10:38 +02:00
parent 811328136f
commit ef30649420

View File

@@ -176,10 +176,14 @@ func (m *minioSink) Event(self *base.GstBaseSink, event *gst.Event) bool {
if segment.GetFormat() == gst.FormatBytes { if segment.GetFormat() == gst.FormatBytes {
if uint64(m.writer.currentPosition) != segment.GetStart() { if uint64(m.writer.currentPosition) != segment.GetStart() {
m.mux.Lock()
self.Log(sinkCAT, gst.LevelInfo, fmt.Sprintf("Seeking to %d", segment.GetStart())) self.Log(sinkCAT, gst.LevelInfo, fmt.Sprintf("Seeking to %d", segment.GetStart()))
if _, err := m.writer.Seek(int64(segment.GetStart()), io.SeekStart); err != nil { if _, err := m.writer.Seek(int64(segment.GetStart()), io.SeekStart); err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, err.Error(), "") self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, err.Error(), "")
m.mux.Unlock()
return false
} }
m.mux.Unlock()
} else { } else {
self.Log(sinkCAT, gst.LevelDebug, "Ignored SEGMENT, no seek needed") self.Log(sinkCAT, gst.LevelDebug, "Ignored SEGMENT, no seek needed")
} }
@@ -190,23 +194,30 @@ func (m *minioSink) Event(self *base.GstBaseSink, event *gst.Event) bool {
case gst.EventTypeFlushStop: case gst.EventTypeFlushStop:
self.Log(sinkCAT, gst.LevelInfo, "Flushing contents of writer and seeking back to start") self.Log(sinkCAT, gst.LevelInfo, "Flushing contents of writer and seeking back to start")
if m.writer.currentPosition != 0 { if m.writer.currentPosition != 0 {
m.mux.Lock()
if err := m.writer.flush(true); err != nil { if err := m.writer.flush(true); err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorWrite, err.Error(), "") self.ErrorMessage(gst.DomainResource, gst.ResourceErrorWrite, err.Error(), "")
m.mux.Unlock()
return false return false
} }
if _, err := m.writer.Seek(0, io.SeekStart); err != nil { if _, err := m.writer.Seek(0, io.SeekStart); err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, err.Error(), "") self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, err.Error(), "")
m.mux.Unlock()
return false
} }
m.mux.Unlock()
} }
case gst.EventTypeEOS: case gst.EventTypeEOS:
self.Log(sinkCAT, gst.LevelInfo, "Received EOS, closing MinIO writer") self.Log(sinkCAT, gst.LevelInfo, "Received EOS, closing MinIO writer")
m.mux.Lock()
if err := m.writer.Close(); err != nil { if err := m.writer.Close(); err != nil {
self.Log(sinkCAT, gst.LevelError, err.Error()) self.Log(sinkCAT, gst.LevelError, err.Error())
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorClose, fmt.Sprintf("Failed to close MinIO writer: %s", err.Error()), "") self.ErrorMessage(gst.DomainResource, gst.ResourceErrorClose, fmt.Sprintf("Failed to close MinIO writer: %s", err.Error()), "")
m.mux.Unlock()
return false return false
} }
m.mux.Unlock()
} }
return self.ParentEvent(event) return self.ParentEvent(event)