From 180db311665776e5452d1712c3d7b16c928d2d9f Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 14 May 2022 00:37:08 +0200 Subject: [PATCH] rtmp: support negative timestamps in MessageWriter --- internal/rtmp/base/messagewriter.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/rtmp/base/messagewriter.go b/internal/rtmp/base/messagewriter.go index b63e4420..22dd1b41 100644 --- a/internal/rtmp/base/messagewriter.go +++ b/internal/rtmp/base/messagewriter.go @@ -20,8 +20,13 @@ func (wc *messageWriterChunkStream) write(msg *Message) error { var timestampDelta *uint32 if wc.lastTimestamp != nil { - v := msg.Timestamp - *wc.lastTimestamp - timestampDelta = &v + diff := int64(msg.Timestamp) - int64(*wc.lastTimestamp) + + // use delta only if it is positive + if diff >= 0 { + v := uint32(diff) + timestampDelta = &v + } } for { @@ -34,7 +39,7 @@ func (wc *messageWriterChunkStream) write(msg *Message) error { firstChunk = false switch { - case wc.lastMessageStreamID == nil || *wc.lastMessageStreamID != msg.MessageStreamID: + case wc.lastMessageStreamID == nil || timestampDelta == nil || *wc.lastMessageStreamID != msg.MessageStreamID: err := Chunk0{ ChunkStreamID: msg.ChunkStreamID, Timestamp: msg.Timestamp,