From 146fb62b8e1baaf517476ef4afe413cbdddcf76a Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Fri, 10 Mar 2023 10:26:50 +0300 Subject: [PATCH] Adds force keyframe for WebRTC passive producer --- pkg/webrtc/conn.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/webrtc/conn.go b/pkg/webrtc/conn.go index 406486a0..377586e2 100644 --- a/pkg/webrtc/conn.go +++ b/pkg/webrtc/conn.go @@ -3,7 +3,9 @@ package webrtc import ( "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/streamer" + "github.com/pion/rtcp" "github.com/pion/webrtc/v3" + "time" ) type Conn struct { @@ -57,6 +59,17 @@ func NewConn(pc *webrtc.PeerConnection) *Conn { return // it's OK when we not need, for example, audio from producer } + if c.Mode == streamer.ModePassiveProducer && remote.Kind() == webrtc.RTPCodecTypeVideo { + go func() { + pkts := []rtcp.Packet{&rtcp.PictureLossIndication{MediaSSRC: uint32(remote.SSRC())}} + for range time.NewTicker(time.Second * 2).C { + if err := pc.WriteRTCP(pkts); err != nil { + return + } + } + }() + } + for { packet, _, err := remote.ReadRTP() if err != nil {