mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
Tweak quality auto-adjustments.
This commit is contained in:
parent
22800dde25
commit
56bd5dd73e
@ -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()
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user