From d6b20a70f4a86ce08f36e5b413e1a0d9e4fcd776 Mon Sep 17 00:00:00 2001 From: harshabose Date: Thu, 5 Jun 2025 15:42:05 +0530 Subject: [PATCH] added some packet metadata --- pkg/stream.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/stream.go b/pkg/stream.go index 1dffe5f..e3047ec 100644 --- a/pkg/stream.go +++ b/pkg/stream.go @@ -17,7 +17,11 @@ import ( type Stream struct { transcoder transcode.CanProduceMediaPacket buffer buffer.BufferWithGenerator[media.Sample] - ctx context.Context + + frameCount int + startTime time.Time + + ctx context.Context } func CreateStream(ctx context.Context, options ...StreamOption) (*Stream, error) { @@ -49,12 +53,14 @@ func (stream *Stream) loop() { packet *astiav.Packet err error ) + ticker := time.NewTicker(40 * time.Millisecond) + defer ticker.Stop() for { select { case <-stream.ctx.Done(): return - default: + case <-ticker.C: packet, err = stream.getPacket() if err != nil { // fmt.Println("unable to get packet from transcoder; err:", err.Error()) @@ -110,10 +116,22 @@ func (stream *Stream) packetToSample(packet *astiav.Packet) *media.Sample { } sample := stream.buffer.Generate() - sample.Data = packet.Data() - sample.Timestamp = time.Now().UTC() - sample.Duration = time.Duration(packet.Duration()) + + // Initialize on first packet + if stream.frameCount == 0 { + stream.startTime = time.Now().UTC() + } + + stream.frameCount++ + + // Calculate expected timestamp for this frame number + frameDuration := time.Second / time.Duration(25) + expectedTimestamp := stream.startTime.Add(time.Duration(stream.frameCount-1) * frameDuration) + + // Use expected timestamp (not real-time) for consistent spacing + sample.Timestamp = expectedTimestamp + sample.Duration = frameDuration return sample }