From c5f77df6b0ec8a84803c72d0196499ec52785900 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 5 Nov 2024 23:49:26 +0100 Subject: [PATCH] webrtc: start/stop ffmpeg procees if webrtc has clients --- cmd/kvm/main.go | 5 ++--- http/rtc/webrtc.go | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cmd/kvm/main.go b/cmd/kvm/main.go index a660d1c..968dd96 100644 --- a/cmd/kvm/main.go +++ b/cmd/kvm/main.go @@ -31,7 +31,7 @@ func main() { log.Println("Failed to parse log level, use default level: info") } - webrtc, err := rtc.InitListener(cfg.WebRtc.Host, cfg.WebRtc.VideoPort, 5006) + webrtc, err := rtc.InitListener(cfg.WebRtc.Host, cfg.WebRtc.VideoPort, cfg.WebRtc.AudioPort) if err != nil { log.Fatal(err) } @@ -44,8 +44,7 @@ func main() { ustreamer.Start() //go ustreamer.Watch() } else if cfg.Stream.Source == config.StreamSourceH264 { - v := ffmpeg.InitFFmpeg() - v.Start() + ffmpeg.InitFFmpeg() } else { log.Fatalf("unsupported stream source type: %v", cfg.Stream.Source) } diff --git a/http/rtc/webrtc.go b/http/rtc/webrtc.go index f318a33..a063644 100644 --- a/http/rtc/webrtc.go +++ b/http/rtc/webrtc.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "net" + "rkkvm/external/ffmpeg" "sync" "github.com/google/uuid" @@ -37,6 +38,10 @@ func (r *RTC) AddPeer(p *webrtc.PeerConnection, offer webrtc.SessionDescription) peerID := uuid.New().String() r.m.Lock() r.peers[peerID] = p + if len(r.peers) == 1 { + ffmpeg.GetFFmpeg().Start() + log.Info("FFmpeg process started") + } r.m.Unlock() p.OnConnectionStateChange(func(connState webrtc.PeerConnectionState) { @@ -44,6 +49,10 @@ func (r *RTC) AddPeer(p *webrtc.PeerConnection, offer webrtc.SessionDescription) r.m.Lock() defer r.m.Unlock() delete(r.peers, peerID) + if len(r.peers) == 0 { + ffmpeg.GetFFmpeg().Stop() + log.Info("No clients anymore, stop ffmpeg process") + } p.Close() peers := make([]string, 0, len(r.peers))