From 0821fdf21802ff70bd161346bae260355eb3e9c0 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Sun, 5 Apr 2020 13:06:09 -0700 Subject: [PATCH] Tweak quality auto-adjustments. --- ScreenCast.Core/Models/Viewer.cs | 30 +++++++++++--------- ScreenCast.Core/Services/ScreenCasterBase.cs | 19 ++----------- Server/Pages/RemoteControl.cshtml | 2 +- 3 files changed, 20 insertions(+), 31 deletions(-) diff --git a/ScreenCast.Core/Models/Viewer.cs b/ScreenCast.Core/Models/Viewer.cs index 4735c240..a199461c 100644 --- a/ScreenCast.Core/Models/Viewer.cs +++ b/ScreenCast.Core/Models/Viewer.cs @@ -16,7 +16,14 @@ namespace Remotely.ScreenCast.Core.Models public Viewer() { - ImageQuality = 75; + ImageQuality = 60; + EncoderParams = new EncoderParameters() + { + Param = new[] + { + new EncoderParameter(Encoder.Quality, ImageQuality) + } + }; } public bool AutoAdjustQuality { get; internal set; } = true; public IScreenCapturer Capturer { get; set; } @@ -42,13 +49,7 @@ namespace Remotely.ScreenCast.Core.Models } imageQuality = value; - EncoderParams = new EncoderParameters() - { - Param = new[] - { - new EncoderParameter(Encoder.Quality, value) - } - }; + EncoderParams.Param[0] = new EncoderParameter(Encoder.Quality, value); } } @@ -72,21 +73,24 @@ namespace Remotely.ScreenCast.Core.Models { if (IsUsingWebRtc() && RtcSession?.CurrentBuffer > 100_000) { + ImageQuality -= 5; + Logger.Debug($"Auto-adjusting image quality for WebRTC. Latency: {Latency}. Quality: {ImageQuality}"); var delay = (int)Math.Ceiling((RtcSession.CurrentBuffer - 100_000) * .0025); Logger.Debug($"Throttling output due to WebRTC buffer. Size: {RtcSession.CurrentBuffer}. Delay: {delay}"); await Task.Delay(delay); } else if (!IsUsingWebRtc() && WebSocketBuffer > 150_000) { + ImageQuality -= 5; + Logger.Debug($"Auto-adjusting image quality for WebSocket. Latency: {Latency}. Quality: {ImageQuality}"); var delay = (int)Math.Ceiling((WebSocketBuffer - 150_000) * .0025); Logger.Debug($"Throttling output due to websocket buffer. Size: {WebSocketBuffer}. Delay: {delay}"); await Task.Delay(delay); } - } - - public bool ShouldAdjustQuality() - { - return !IsUsingWebRtc() && AutoAdjustQuality && Latency > 1000; + else + { + ImageQuality = 60; + } } public bool IsUsingWebRtc() diff --git a/ScreenCast.Core/Services/ScreenCasterBase.cs b/ScreenCast.Core/Services/ScreenCasterBase.cs index f7a0a04f..dee2e81d 100644 --- a/ScreenCast.Core/Services/ScreenCasterBase.cs +++ b/ScreenCast.Core/Services/ScreenCasterBase.cs @@ -110,23 +110,8 @@ namespace Remotely.ScreenCast.Core.Services { capturer.CaptureFullscreen = false; } - - if (viewer.ShouldAdjustQuality()) - { - var quality = (int)(viewer.ImageQuality * 1000 / viewer.Latency); - Logger.Debug($"Auto-adjusting image quality. Latency: {viewer.Latency}. Quality: {quality}"); - encodedImageBytes = ImageUtils.EncodeBitmap(newImage, new EncoderParameters() - { - Param = new[] - { - new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality) - } - }); - } - else - { - encodedImageBytes = ImageUtils.EncodeBitmap(newImage, viewer.EncoderParams); - } + + encodedImageBytes = ImageUtils.EncodeBitmap(newImage, viewer.EncoderParams); if (encodedImageBytes?.Length > 0) { diff --git a/Server/Pages/RemoteControl.cshtml b/Server/Pages/RemoteControl.cshtml index a2708a6a..b944e232 100644 --- a/Server/Pages/RemoteControl.cshtml +++ b/Server/Pages/RemoteControl.cshtml @@ -132,7 +132,7 @@ Image Quality
- +