diff --git a/pkg/jitterbuffer/jitter_buffer.go b/pkg/jitterbuffer/jitter_buffer.go index bd1a7cc7..cd16fd6b 100644 --- a/pkg/jitterbuffer/jitter_buffer.go +++ b/pkg/jitterbuffer/jitter_buffer.go @@ -66,6 +66,7 @@ type ( // provided timestamp type JitterBuffer struct { packets *PriorityQueue + minStartCount uint16 lastSequence uint16 playoutHead uint16 playoutReady bool @@ -90,13 +91,21 @@ type Stats struct { // New will initialize a jitter buffer and its associated statistics func New(opts ...Option) *JitterBuffer { - jb := &JitterBuffer{state: Buffering, stats: Stats{0, 0, 0}, packets: NewQueue(), listeners: make(map[Event][]EventListener)} + jb := &JitterBuffer{state: Buffering, stats: Stats{0, 0, 0}, minStartCount: 50, packets: NewQueue(), listeners: make(map[Event][]EventListener)} for _, o := range opts { o(jb) } return jb } +// WithMinimumPacketCount will set the required number of packets to be received before +// any attempt to pop a packet can succeed +func WithMinimumPacketCount(count uint16) Option { + return func (jb *JitterBuffer) { + jb.minStartCount = count + } +} + // Listen will register an event listener // The jitter buffer may emit events correspnding, interested listerns should // look at Event for available events @@ -142,7 +151,7 @@ func (jb *JitterBuffer) emit(event Event) { func (jb *JitterBuffer) updateState() { // For now, we only look at the number of packets captured in the play buffer - if jb.packets.Length() >= 50 && jb.state == Buffering { + if jb.packets.Length() >= jb.minStartCount && jb.state == Buffering { jb.state = Emitting jb.playoutReady = true jb.emit(BeginPlayback)