mirror of
https://github.com/go-gst/go-gst.git
synced 2025-10-04 15:42:52 +08:00
gst_init finally works and pops correctly
This commit is contained in:
@@ -133,12 +133,15 @@ func (m *minioSink) Start(self *base.GstBaseSink) bool {
|
||||
ctx, m.cancel = context.WithCancel(context.Background())
|
||||
|
||||
go func() {
|
||||
self.Ref()
|
||||
defer self.Unref()
|
||||
defer m.cancel()
|
||||
defer func() { m.doneChan <- struct{}{} }()
|
||||
|
||||
self.Log(sinkCAT, gst.LevelInfo, fmt.Sprintf("Starting PutObject operation to %s/%s/%s", m.settings.endpoint, m.settings.bucket, m.settings.key))
|
||||
info, err := client.PutObject(ctx, m.settings.bucket, m.settings.key, m.rPipe, -1, minio.PutObjectOptions{
|
||||
ContentType: "application/octet-stream",
|
||||
PartSize: m.settings.partSize,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
@@ -156,6 +159,7 @@ func (m *minioSink) Start(self *base.GstBaseSink) bool {
|
||||
}
|
||||
|
||||
func (m *minioSink) Stop(self *base.GstBaseSink) bool {
|
||||
self.Log(sinkCAT, gst.LevelInfo, "Stopping MinIOSink")
|
||||
m.mux.Lock()
|
||||
defer m.mux.Unlock()
|
||||
|
||||
@@ -164,6 +168,13 @@ func (m *minioSink) Stop(self *base.GstBaseSink) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
self.Log(sinkCAT, gst.LevelInfo, "Closing write pipe to PutObject operation")
|
||||
if err := m.wPipe.Close(); err != nil {
|
||||
self.Log(sinkCAT, gst.LevelError, err.Error())
|
||||
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorClose, fmt.Sprintf("Failed to finalize MinIO object: %s", err.Error()), "")
|
||||
return false
|
||||
}
|
||||
|
||||
self.Log(sinkCAT, gst.LevelInfo, "Blocking until PutObject operation has completed")
|
||||
<-m.doneChan
|
||||
self.Log(sinkCAT, gst.LevelInfo, "PutObject operation has completed")
|
||||
@@ -194,18 +205,3 @@ func (m *minioSink) Render(self *base.GstBaseSink, buffer *gst.Buffer) gst.FlowR
|
||||
|
||||
return gst.FlowOK
|
||||
}
|
||||
|
||||
func (m *minioSink) Event(self *base.GstBaseSink, event *gst.Event) bool {
|
||||
switch event.Type() {
|
||||
case gst.EventTypeEOS:
|
||||
m.mux.Lock()
|
||||
defer m.mux.Unlock()
|
||||
self.Log(sinkCAT, gst.LevelInfo, "Received EOS, closing write pipe to PutObject operation")
|
||||
if err := m.wPipe.Close(); err != nil {
|
||||
self.Log(sinkCAT, gst.LevelError, err.Error())
|
||||
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorClose, fmt.Sprintf("Failed to finalize MinIO object: %s", err.Error()), "")
|
||||
return false
|
||||
}
|
||||
}
|
||||
return self.ParentEvent(event)
|
||||
}
|
||||
|
Reference in New Issue
Block a user