Adds force keyframe for WebRTC passive producer

This commit is contained in:
Alexey Khit
2023-03-10 10:26:50 +03:00
parent 53e8fed0b0
commit 146fb62b8e
+13
View File
@@ -3,7 +3,9 @@ package webrtc
import ( import (
"github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/streamer" "github.com/AlexxIT/go2rtc/pkg/streamer"
"github.com/pion/rtcp"
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
"time"
) )
type Conn struct { 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 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 { for {
packet, _, err := remote.ReadRTP() packet, _, err := remote.ReadRTP()
if err != nil { if err != nil {