@@ -35,6 +35,7 @@ type StreamBin struct {
3535 Bin * gstreamer.Bin
3636 OutputType types.OutputType
3737
38+ latency time.Duration
3839 mu sync.RWMutex
3940 pipeline * gstreamer.Pipeline
4041}
@@ -50,7 +51,7 @@ type Stream struct {
5051 failed atomic.Bool
5152}
5253
53- func BuildStreamBin (pipeline * gstreamer.Pipeline , o * config.StreamConfig ) (* StreamBin , error ) {
54+ func BuildStreamBin (pipeline * gstreamer.Pipeline , p * config. PipelineConfig , o * config.StreamConfig ) (* StreamBin , error ) {
5455 b := pipeline .NewBin ("stream" )
5556
5657 var mux * gst.Element
@@ -68,7 +69,7 @@ func BuildStreamBin(pipeline *gstreamer.Pipeline, o *config.StreamConfig) (*Stre
6869 return nil , errors .ErrGstPipelineError (err )
6970 }
7071 // add latency to give time for flvmux to receive and order packets from both streams
71- if err = mux .SetProperty ("latency" , config . PipelineLatency ); err != nil {
72+ if err = mux .SetProperty ("latency" , uint64 ( p . Latency . PipelineLatency ) ); err != nil {
7273 return nil , errors .ErrGstPipelineError (err )
7374 }
7475
@@ -104,6 +105,7 @@ func BuildStreamBin(pipeline *gstreamer.Pipeline, o *config.StreamConfig) (*Stre
104105 sb := & StreamBin {
105106 Bin : b ,
106107 OutputType : o .OutputType ,
108+ latency : p .Latency .PipelineLatency ,
107109 }
108110
109111 return sb , nil
@@ -113,7 +115,7 @@ func (sb *StreamBin) BuildStream(stream *config.Stream, framerate int32) (*Strea
113115 stream .Name = utils .NewGuid ("" )
114116 b := sb .Bin .NewBin (stream .Name )
115117
116- queue , err := gstreamer .BuildQueue (fmt .Sprintf ("queue_%s" , stream .Name ), config . PipelineLatency , true )
118+ queue , err := gstreamer .BuildQueue (fmt .Sprintf ("queue_%s" , stream .Name ), sb . latency , true )
117119 if err != nil {
118120 return nil , errors .ErrGstPipelineError (err )
119121 }
0 commit comments