webrtc: start/stop ffmpeg procees if webrtc has clients

This commit is contained in:
Artem
2024-11-05 23:49:26 +01:00
parent c228921237
commit c5f77df6b0
2 changed files with 11 additions and 3 deletions

View File

@@ -31,7 +31,7 @@ func main() {
log.Println("Failed to parse log level, use default level: info") 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 { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@@ -44,8 +44,7 @@ func main() {
ustreamer.Start() ustreamer.Start()
//go ustreamer.Watch() //go ustreamer.Watch()
} else if cfg.Stream.Source == config.StreamSourceH264 { } else if cfg.Stream.Source == config.StreamSourceH264 {
v := ffmpeg.InitFFmpeg() ffmpeg.InitFFmpeg()
v.Start()
} else { } else {
log.Fatalf("unsupported stream source type: %v", cfg.Stream.Source) log.Fatalf("unsupported stream source type: %v", cfg.Stream.Source)
} }

View File

@@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"net" "net"
"rkkvm/external/ffmpeg"
"sync" "sync"
"github.com/google/uuid" "github.com/google/uuid"
@@ -37,6 +38,10 @@ func (r *RTC) AddPeer(p *webrtc.PeerConnection, offer webrtc.SessionDescription)
peerID := uuid.New().String() peerID := uuid.New().String()
r.m.Lock() r.m.Lock()
r.peers[peerID] = p r.peers[peerID] = p
if len(r.peers) == 1 {
ffmpeg.GetFFmpeg().Start()
log.Info("FFmpeg process started")
}
r.m.Unlock() r.m.Unlock()
p.OnConnectionStateChange(func(connState webrtc.PeerConnectionState) { p.OnConnectionStateChange(func(connState webrtc.PeerConnectionState) {
@@ -44,6 +49,10 @@ func (r *RTC) AddPeer(p *webrtc.PeerConnection, offer webrtc.SessionDescription)
r.m.Lock() r.m.Lock()
defer r.m.Unlock() defer r.m.Unlock()
delete(r.peers, peerID) delete(r.peers, peerID)
if len(r.peers) == 0 {
ffmpeg.GetFFmpeg().Stop()
log.Info("No clients anymore, stop ffmpeg process")
}
p.Close() p.Close()
peers := make([]string, 0, len(r.peers)) peers := make([]string, 0, len(r.peers))