webrtc icon indicating copy to clipboard operation
webrtc copied to clipboard

How does the interceptors work?

Open Enem-20 opened this issue 6 months ago • 13 comments

I need to make the video stream as stable as possible. Default interceptors should send rtcp automatically as I know. When I start Wireshark and packet drops I see RR only and picture crashes. Maybe I do something wrong:

func NewWebrtcReceiver() *WebrtcReceiver {
	wr := &WebrtcReceiver{}
	wr.lastRemoteSdp = ""
	wr.wsUrl = "ws://signallingzur.air-link.space/wstest?name=GS001D0&partnerName=001D0"
	wr.mediaEngine = &webrtc.MediaEngine{}
	loggingFactory := logging.NewDefaultLoggerFactory()
	loggingFactory.DefaultLogLevel.Set(logging.LogLevelTrace)
	s := webrtc.SettingEngine{
		LoggerFactory: loggingFactory,
	}
	s.SetICETimeouts(5*time.Second, 30*time.Second, 5*time.Second)
	s.SetIPFilter(func(ip net.IP) bool {
		return ip.To4() != nil
	})

	opusCodec := webrtc.RTPCodecParameters{
		RTPCodecCapability: webrtc.RTPCodecCapability{
			MimeType: webrtc.MimeTypeOpus,
			RTCPFeedback: []webrtc.RTCPFeedback{
				{Type: "nack"},
				{Type: "nack", Parameter: "pli"},
				{Type: "goog-remb"},
				//{Type: "ccm", Parameter: "fir"},
			},
		}, PayloadType: 111,
	}

	wr.mediaEngine.RegisterDefaultCodecs()

	if err := wr.mediaEngine.RegisterCodec(opusCodec, webrtc.RTPCodecTypeAudio); err != nil {
		panic(err)
	}

	interceptorRegistry := &interceptor.Registry{}

	if err := webrtc.RegisterDefaultInterceptors(wr.mediaEngine, interceptorRegistry); err != nil {
		log.Fatal(err)
	}
	wr.api = webrtc.NewAPI(
		webrtc.WithSettingEngine(s),
		webrtc.WithMediaEngine(wr.mediaEngine),
		webrtc.WithInterceptorRegistry(interceptorRegistry),
	)
	wr.createPeerConnection()
	wr.establishWs()
	return wr
}

Enem-20 avatar Apr 09 '25 15:04 Enem-20