webrtc: start/stop ffmpeg procees if webrtc has clients
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user