aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
diff options
context:
space:
mode:
authornyanmisaka <nst799610810@gmail.com>2024-03-16 03:51:54 +0800
committernyanmisaka <nst799610810@gmail.com>2024-03-16 07:35:05 +0800
commit39b953e41caf6f0c333296af8d360b6a2559b835 (patch)
tree18d2a366e9dc0a14aa7d9d9e11bde41eb9d7edd9 /MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
parent55fd6b5cb90fe6fa1f10f706cdbe0a7ecdd54fbb (diff)
Set input readrate for using SegmentDeletion with stream-copy
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
Diffstat (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs')
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs14
1 files changed, 13 insertions, 1 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index 946f7266c..5daa03935 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -51,6 +51,8 @@ namespace MediaBrowser.Controller.MediaEncoding
private readonly Version _minFFmpegOclCuTonemapMode = new Version(5, 1, 3);
private readonly Version _minFFmpegSvtAv1Params = new Version(5, 1);
private readonly Version _minFFmpegVaapiH26xEncA53CcSei = new Version(6, 0);
+ private readonly Version _minFFmpegAutoscaleOption = new Version(4, 4);
+ private readonly Version _minFFmpegReadrateOption = new Version(5, 0);
private static readonly string[] _videoProfilesH264 = new[]
{
@@ -1221,7 +1223,7 @@ namespace MediaBrowser.Controller.MediaEncoding
// Disable auto inserted SW scaler for HW decoders in case of changed resolution.
var isSwDecoder = string.IsNullOrEmpty(GetHardwareVideoDecoder(state, options));
- if (!isSwDecoder && _mediaEncoder.EncoderVersion >= new Version(4, 4))
+ if (!isSwDecoder && _mediaEncoder.EncoderVersion >= _minFFmpegAutoscaleOption)
{
arg.Append(" -noautoscale");
}
@@ -6393,6 +6395,16 @@ namespace MediaBrowser.Controller.MediaEncoding
{
inputModifier += " -re";
}
+ else if (encodingOptions.EnableSegmentDeletion
+ && state.VideoStream is not null
+ && state.TranscodingType == TranscodingJobType.Hls
+ && IsCopyCodec(state.OutputVideoCodec)
+ && _mediaEncoder.EncoderVersion >= _minFFmpegReadrateOption)
+ {
+ // Set an input read rate limit 10x for using SegmentDeletion with stream-copy
+ // to prevent ffmpeg from exiting prematurely (due to fast drive)
+ inputModifier += " -readrate 10";
+ }
var flags = new List<string>();
if (state.IgnoreInputDts)