Tweak quality auto-adjustments.

This commit is contained in:
Jared Goodwin 2020-04-05 13:06:09 -07:00
parent 22800dde25
commit 56bd5dd73e
3 changed files with 20 additions and 31 deletions

View File

@ -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()

View File

@ -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)
{

View File

@ -132,7 +132,7 @@
Image Quality
</div>
<div>
<input id="qualityRangeInput" value="75" max="100" class="form-control-range" type="range" />
<input id="qualityRangeInput" value="60" max="100" class="form-control-range" type="range" />
<div style="color:white; font-size:12px; text-align: left">
<input id="autoAdjustQualityCheckBox" type="checkbox" checked />
<label for="autoAdjustQualityCheckBox">Auto Adjust</label>