From e4df14a4478ac6595642d20793216628dac82f2e Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Thu, 21 Sep 2023 16:13:40 +0200 Subject: [PATCH] fix timestamp of outgoing RTSP/RTP packets in case of aggregated access units (#2389) --- internal/core/webrtc_outgoing_track.go | 8 ++++---- internal/formatprocessor/ac3.go | 2 +- internal/formatprocessor/av1.go | 2 +- internal/formatprocessor/h264.go | 2 +- internal/formatprocessor/h265.go | 2 +- internal/formatprocessor/mpeg1_audio.go | 2 +- internal/formatprocessor/mpeg1_video.go | 2 +- internal/formatprocessor/mpeg4_audio_generic.go | 2 +- internal/formatprocessor/mpeg4_audio_latm.go | 2 +- internal/formatprocessor/mpeg4_video.go | 2 +- internal/formatprocessor/opus.go | 2 +- internal/formatprocessor/vp8.go | 2 +- internal/formatprocessor/vp9.go | 2 +- 13 files changed, 16 insertions(+), 16 deletions(-) diff --git a/internal/core/webrtc_outgoing_track.go b/internal/core/webrtc_outgoing_track.go index 3b783d43..5338bef8 100644 --- a/internal/core/webrtc_outgoing_track.go +++ b/internal/core/webrtc_outgoing_track.go @@ -68,7 +68,7 @@ func newWebRTCOutgoingTrackVideo(desc *description.Session) (*webRTCOutgoingTrac } for _, pkt := range packets { - pkt.Timestamp = tunit.RTPPackets[0].Timestamp + pkt.Timestamp += tunit.RTPPackets[0].Timestamp webRTCTrak.WriteRTP(pkt) //nolint:errcheck } @@ -119,7 +119,7 @@ func newWebRTCOutgoingTrackVideo(desc *description.Session) (*webRTCOutgoingTrac } for _, pkt := range packets { - pkt.Timestamp = tunit.RTPPackets[0].Timestamp + pkt.Timestamp += tunit.RTPPackets[0].Timestamp webRTCTrak.WriteRTP(pkt) //nolint:errcheck } @@ -170,7 +170,7 @@ func newWebRTCOutgoingTrackVideo(desc *description.Session) (*webRTCOutgoingTrac } for _, pkt := range packets { - pkt.Timestamp = tunit.RTPPackets[0].Timestamp + pkt.Timestamp += tunit.RTPPackets[0].Timestamp webRTCTrak.WriteRTP(pkt) //nolint:errcheck } @@ -231,7 +231,7 @@ func newWebRTCOutgoingTrackVideo(desc *description.Session) (*webRTCOutgoingTrac } for _, pkt := range packets { - pkt.Timestamp = tunit.RTPPackets[0].Timestamp + pkt.Timestamp += tunit.RTPPackets[0].Timestamp webRTCTrak.WriteRTP(pkt) //nolint:errcheck } diff --git a/internal/formatprocessor/ac3.go b/internal/formatprocessor/ac3.go index 6f546f11..90ef5aa3 100644 --- a/internal/formatprocessor/ac3.go +++ b/internal/formatprocessor/ac3.go @@ -55,7 +55,7 @@ func (t *formatProcessorAC3) ProcessUnit(uu unit.Unit) error { //nolint:dupl ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/av1.go b/internal/formatprocessor/av1.go index 9886c148..5d8b6418 100644 --- a/internal/formatprocessor/av1.go +++ b/internal/formatprocessor/av1.go @@ -57,7 +57,7 @@ func (t *formatProcessorAV1) ProcessUnit(uu unit.Unit) error { //nolint:dupl ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/h264.go b/internal/formatprocessor/h264.go index 90a2ca51..80cfc70a 100644 --- a/internal/formatprocessor/h264.go +++ b/internal/formatprocessor/h264.go @@ -226,7 +226,7 @@ func (t *formatProcessorH264) ProcessUnit(uu unit.Unit) error { ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/h265.go b/internal/formatprocessor/h265.go index 57e3767d..629945a7 100644 --- a/internal/formatprocessor/h265.go +++ b/internal/formatprocessor/h265.go @@ -245,7 +245,7 @@ func (t *formatProcessorH265) ProcessUnit(uu unit.Unit) error { //nolint:dupl ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/mpeg1_audio.go b/internal/formatprocessor/mpeg1_audio.go index 0cbecd1f..68b39b4c 100644 --- a/internal/formatprocessor/mpeg1_audio.go +++ b/internal/formatprocessor/mpeg1_audio.go @@ -55,7 +55,7 @@ func (t *formatProcessorMPEG1Audio) ProcessUnit(uu unit.Unit) error { //nolint:d ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/mpeg1_video.go b/internal/formatprocessor/mpeg1_video.go index 851816e7..998b149f 100644 --- a/internal/formatprocessor/mpeg1_video.go +++ b/internal/formatprocessor/mpeg1_video.go @@ -56,7 +56,7 @@ func (t *formatProcessorMPEG1Video) ProcessUnit(uu unit.Unit) error { //nolint:d ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/mpeg4_audio_generic.go b/internal/formatprocessor/mpeg4_audio_generic.go index 9d1410c6..13e1884a 100644 --- a/internal/formatprocessor/mpeg4_audio_generic.go +++ b/internal/formatprocessor/mpeg4_audio_generic.go @@ -59,7 +59,7 @@ func (t *formatProcessorMPEG4AudioGeneric) ProcessUnit(uu unit.Unit) error { //n ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/mpeg4_audio_latm.go b/internal/formatprocessor/mpeg4_audio_latm.go index 4562468e..456be000 100644 --- a/internal/formatprocessor/mpeg4_audio_latm.go +++ b/internal/formatprocessor/mpeg4_audio_latm.go @@ -55,7 +55,7 @@ func (t *formatProcessorMPEG4AudioLATM) ProcessUnit(uu unit.Unit) error { //noli ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/mpeg4_video.go b/internal/formatprocessor/mpeg4_video.go index df8f0b74..acdfca10 100644 --- a/internal/formatprocessor/mpeg4_video.go +++ b/internal/formatprocessor/mpeg4_video.go @@ -94,7 +94,7 @@ func (t *formatProcessorMPEG4Video) ProcessUnit(uu unit.Unit) error { //nolint:d ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/opus.go b/internal/formatprocessor/opus.go index f2cd348a..80aa9536 100644 --- a/internal/formatprocessor/opus.go +++ b/internal/formatprocessor/opus.go @@ -60,7 +60,7 @@ func (t *formatProcessorOpus) ProcessUnit(uu unit.Unit) error { //nolint:dupl } ts := uint32(multiplyAndDivide(pts, time.Duration(t.format.ClockRate()), time.Second)) - pkt.Timestamp = ts + pkt.Timestamp += ts rtpPackets = append(rtpPackets, pkt) pts += opus.PacketDuration(packet) diff --git a/internal/formatprocessor/vp8.go b/internal/formatprocessor/vp8.go index 70f98ae6..f82c1660 100644 --- a/internal/formatprocessor/vp8.go +++ b/internal/formatprocessor/vp8.go @@ -56,7 +56,7 @@ func (t *formatProcessorVP8) ProcessUnit(uu unit.Unit) error { //nolint:dupl ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts diff --git a/internal/formatprocessor/vp9.go b/internal/formatprocessor/vp9.go index 9db50a4f..5b69d98d 100644 --- a/internal/formatprocessor/vp9.go +++ b/internal/formatprocessor/vp9.go @@ -56,7 +56,7 @@ func (t *formatProcessorVP9) ProcessUnit(uu unit.Unit) error { //nolint:dupl ts := uint32(multiplyAndDivide(u.PTS, time.Duration(t.format.ClockRate()), time.Second)) for _, pkt := range pkts { - pkt.Timestamp = ts + pkt.Timestamp += ts } u.RTPPackets = pkts