removed adaptive framerate tag and react to closed channels

This commit is contained in:
mbattista
2023-01-29 13:28:03 +01:00
committed by Miroslav Šedivý
parent ee13e40d4c
commit c45a315d9b
9 changed files with 202 additions and 177 deletions

View File

@ -52,7 +52,11 @@ func (manager *CaptureManagerCtx) Start() {
go func() {
for {
<-manager.desktop.GetBeforeScreenSizeChangeChannel()
_, ok := <-manager.desktop.GetBeforeScreenSizeChangeChannel()
if !ok {
manager.logger.Info().Msg("Before screen size change channel was closed")
return
}
if manager.video.Started() {
manager.video.destroyPipeline()
@ -66,7 +70,11 @@ func (manager *CaptureManagerCtx) Start() {
go func() {
for {
framerate := <-manager.desktop.GetAfterScreenSizeChangeChannel()
framerate, ok := <-manager.desktop.GetAfterScreenSizeChangeChannel()
if !ok {
manager.logger.Info().Msg("After screen size change channel was closed")
return
}
if manager.video.Started() {
manager.video.SetChangeFramerate(framerate)

View File

@ -89,11 +89,6 @@ func (Capture) Init(cmd *cobra.Command) error {
return err
}
cmd.PersistentFlags().Bool("adaptive_framerate", false, "use the framerate given from the source display")
if err := viper.BindPFlag("adaptive_framerate", cmd.PersistentFlags().Lookup("adaptive_framerate")); err != nil {
return err
}
//
// audio
//
@ -197,12 +192,14 @@ func (s *Capture) Set() {
s.VideoHWEnc = videoHWEnc
s.VideoBitrate = viper.GetUint("video_bitrate")
s.VideoAdaptiveFramerate = false
s.VideoMaxFPS = int16(viper.GetInt("max_fps"))
if s.VideoMaxFPS == 0 {
s.VideoMaxFPS = 60
// TODO: Get the starting fps from the screen parameter.
s.VideoMaxFPS = 30
s.VideoAdaptiveFramerate = true
}
s.VideoPipeline = viper.GetString("video")
s.VideoAdaptiveFramerate = viper.GetBool("adaptive_framerate")
//
// audio

View File

@ -50,7 +50,11 @@ func (manager *DesktopManagerCtx) Start() {
go func() {
for {
msg := <-xevent.EventErrorChannel
msg, ok := <-xevent.EventErrorChannel
if !ok {
manager.logger.Info().Msg("Error channel was closed")
return
}
manager.logger.Warn().
Uint8("error_code", msg.Error_code).
Str("message", msg.Message).

View File

@ -63,7 +63,11 @@ func (manager *WebRTCManager) Start() {
continue
}
newSample := <-manager.capture.Audio().GetSampleChannel()
newSample, ok := <-manager.capture.Audio().GetSampleChannel()
if !ok {
manager.logger.Info().Msg("Audio capture channel was closed")
return
}
err := manager.audioTrack.WriteSample(media.Sample(newSample))
if err != nil && errors.Is(err, io.ErrClosedPipe) {
manager.logger.Warn().Err(err).Msg("audio pipeline failed to write")
@ -89,7 +93,11 @@ func (manager *WebRTCManager) Start() {
continue
}
newSample := <-manager.capture.Video().GetSampleChannel()
newSample, ok := <-manager.capture.Video().GetSampleChannel()
if !ok {
manager.logger.Info().Msg("Video capture channel was closed")
return
}
err := manager.videoTrack.WriteSample(media.Sample(newSample))
if err != nil && errors.Is(err, io.ErrClosedPipe) {
manager.logger.Warn().Err(err).Msg("video pipeline failed to write")

View File

@ -103,7 +103,12 @@ type WebSocketHandler struct {
func (ws *WebSocketHandler) Start() {
go func() {
for {
channelMessage := <-ws.sessions.GetSessionChannel()
channelMessage, ok := <-ws.sessions.GetSessionChannel()
if !ok {
ws.logger.Info().Str("id", channelMessage.Id).Msg("session channel was closed")
// channel closed
return
}
switch channelMessage.Type {
case "created":
@ -189,7 +194,11 @@ func (ws *WebSocketHandler) Start() {
go func() {
for {
_ = <-ws.desktop.GetClipboardUpdatedChannel()
_, ok = <-ws.desktop.GetClipboardUpdatedChannel()
if !ok {
ws.logger.Info()).Msg("Clipboard update channel closed")
return
}
session, ok := ws.sessions.GetHost()
if !ok {
return