mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Merge branch 'master' into network-rewrite
This commit is contained in:
commit
414eb45899
@ -1705,12 +1705,13 @@ namespace Jellyfin.Api.Controllers
|
|||||||
return audioTranscodeParams;
|
return audioTranscodeParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
// dts, flac and opus are experimental in mp4 muxer
|
// dts, flac, opus and truehd are experimental in mp4 muxer
|
||||||
var strictArgs = string.Empty;
|
var strictArgs = string.Empty;
|
||||||
|
|
||||||
if (string.Equals(state.ActualOutputAudioCodec, "flac", StringComparison.OrdinalIgnoreCase)
|
if (string.Equals(state.ActualOutputAudioCodec, "flac", StringComparison.OrdinalIgnoreCase)
|
||||||
|| string.Equals(state.ActualOutputAudioCodec, "opus", StringComparison.OrdinalIgnoreCase)
|
|| string.Equals(state.ActualOutputAudioCodec, "opus", StringComparison.OrdinalIgnoreCase)
|
||||||
|| string.Equals(state.ActualOutputAudioCodec, "dts", StringComparison.OrdinalIgnoreCase))
|
|| string.Equals(state.ActualOutputAudioCodec, "dts", StringComparison.OrdinalIgnoreCase)
|
||||||
|
|| string.Equals(state.ActualOutputAudioCodec, "truehd", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
strictArgs = " -strict -2";
|
strictArgs = " -strict -2";
|
||||||
}
|
}
|
||||||
|
@ -248,10 +248,10 @@ namespace Jellyfin.Api.Controllers
|
|||||||
{
|
{
|
||||||
var item = _libraryManager.GetItemById(itemId);
|
var item = _libraryManager.GetItemById(itemId);
|
||||||
_logger.LogInformation(
|
_logger.LogInformation(
|
||||||
"Setting provider id's to item {0}-{1}: {2}",
|
"Setting provider id's to item {ItemId}-{ItemName}: {@ProviderIds}",
|
||||||
item.Id,
|
item.Id,
|
||||||
item.Name,
|
item.Name,
|
||||||
JsonSerializer.Serialize(searchResult.ProviderIds));
|
searchResult.ProviderIds);
|
||||||
|
|
||||||
// Since the refresh process won't erase provider Ids, we need to set this explicitly now.
|
// Since the refresh process won't erase provider Ids, we need to set this explicitly now.
|
||||||
item.ProviderIds = searchResult.ProviderIds;
|
item.ProviderIds = searchResult.ProviderIds;
|
||||||
|
@ -9,6 +9,7 @@ using System.Threading;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Models.StreamingDtos;
|
using Jellyfin.Api.Models.StreamingDtos;
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
@ -204,8 +205,11 @@ namespace Jellyfin.Api.Helpers
|
|||||||
builder.Append(flacWaPlaylist);
|
builder.Append(flacWaPlaylist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var encodingOptions = _serverConfigurationManager.GetEncodingOptions();
|
||||||
|
|
||||||
// Provide SDR HEVC entrance for backward compatibility.
|
// Provide SDR HEVC entrance for backward compatibility.
|
||||||
if (EncodingHelper.IsCopyCodec(state.OutputVideoCodec)
|
if (encodingOptions.AllowHevcEncoding
|
||||||
|
&& EncodingHelper.IsCopyCodec(state.OutputVideoCodec)
|
||||||
&& !string.IsNullOrEmpty(state.VideoStream.VideoRange)
|
&& !string.IsNullOrEmpty(state.VideoStream.VideoRange)
|
||||||
&& string.Equals(state.VideoStream.VideoRange, "HDR", StringComparison.OrdinalIgnoreCase)
|
&& string.Equals(state.VideoStream.VideoRange, "HDR", StringComparison.OrdinalIgnoreCase)
|
||||||
&& string.Equals(state.ActualOutputVideoCodec, "hevc", StringComparison.OrdinalIgnoreCase))
|
&& string.Equals(state.ActualOutputVideoCodec, "hevc", StringComparison.OrdinalIgnoreCase))
|
||||||
|
@ -64,21 +64,21 @@ namespace Jellyfin.Api.WebSocketListeners
|
|||||||
base.Dispose(dispose);
|
base.Dispose(dispose);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTaskCompleted(object? sender, TaskCompletionEventArgs e)
|
private async void OnTaskCompleted(object? sender, TaskCompletionEventArgs e)
|
||||||
{
|
{
|
||||||
SendData(true);
|
|
||||||
e.Task.TaskProgress -= OnTaskProgress;
|
e.Task.TaskProgress -= OnTaskProgress;
|
||||||
|
await SendData(true).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTaskExecuting(object? sender, GenericEventArgs<IScheduledTaskWorker> e)
|
private async void OnTaskExecuting(object? sender, GenericEventArgs<IScheduledTaskWorker> e)
|
||||||
{
|
{
|
||||||
SendData(true);
|
await SendData(true).ConfigureAwait(false);
|
||||||
e.Argument.TaskProgress += OnTaskProgress;
|
e.Argument.TaskProgress += OnTaskProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTaskProgress(object? sender, GenericEventArgs<double> e)
|
private async void OnTaskProgress(object? sender, GenericEventArgs<double> e)
|
||||||
{
|
{
|
||||||
SendData(false);
|
await SendData(false).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Net
|
|
||||||
{
|
|
||||||
public static class CustomHeaderNames
|
|
||||||
{
|
|
||||||
// Other Headers
|
|
||||||
public const string XForwardedFor = "X-Forwarded-For";
|
|
||||||
public const string XForwardedPort = "X-Forwarded-Port";
|
|
||||||
public const string XForwardedProto = "X-Forwarded-Proto";
|
|
||||||
public const string XRealIP = "X-Real-IP";
|
|
||||||
}
|
|
||||||
}
|
|
@ -38,7 +38,10 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
private readonly ISubtitleEncoder _subtitleEncoder;
|
private readonly ISubtitleEncoder _subtitleEncoder;
|
||||||
private readonly IConfiguration _config;
|
private readonly IConfiguration _config;
|
||||||
private readonly Version _minKernelVersionAmdVkFmtModifier = new Version(5, 15);
|
private readonly Version _minKernelVersionAmdVkFmtModifier = new Version(5, 15);
|
||||||
private readonly Version _minKernelVersioni915Hang = new Version(5, 18);
|
// i915 hang was fixed by linux 6.2 (3f882f2)
|
||||||
|
private readonly Version _minKerneli915Hang = new Version(5, 18);
|
||||||
|
private readonly Version _maxKerneli915Hang = new Version(6, 1, 3);
|
||||||
|
private readonly Version _minFixedKernel60i915Hang = new Version(6, 0, 18);
|
||||||
|
|
||||||
private static readonly string[] _videoProfilesH264 = new[]
|
private static readonly string[] _videoProfilesH264 = new[]
|
||||||
{
|
{
|
||||||
@ -1336,7 +1339,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
// which will reduce overhead in performance intensive tasks such as 4k transcoding and tonemapping.
|
// which will reduce overhead in performance intensive tasks such as 4k transcoding and tonemapping.
|
||||||
var intelLowPowerHwEncoding = false;
|
var intelLowPowerHwEncoding = false;
|
||||||
|
|
||||||
// Workaround for linux 5.18+ i915 hang at cost of performance.
|
// Workaround for linux 5.18 to 6.1.3 i915 hang at cost of performance.
|
||||||
// https://github.com/intel/media-driver/issues/1456
|
// https://github.com/intel/media-driver/issues/1456
|
||||||
var enableWaFori915Hang = false;
|
var enableWaFori915Hang = false;
|
||||||
|
|
||||||
@ -1355,18 +1358,25 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
}
|
}
|
||||||
else if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
|
else if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
if (OperatingSystem.IsLinux() && Environment.OSVersion.Version >= _minKernelVersioni915Hang)
|
if (OperatingSystem.IsLinux())
|
||||||
{
|
{
|
||||||
var vidDecoder = GetHardwareVideoDecoder(state, encodingOptions) ?? string.Empty;
|
var ver = Environment.OSVersion.Version;
|
||||||
var isIntelDecoder = vidDecoder.Contains("qsv", StringComparison.OrdinalIgnoreCase)
|
var isFixedKernel60 = ver.Major == 6 && ver.Minor == 0 && ver >= _minFixedKernel60i915Hang;
|
||||||
|| vidDecoder.Contains("vaapi", StringComparison.OrdinalIgnoreCase);
|
var isUnaffectedKernel = ver < _minKerneli915Hang || ver > _maxKerneli915Hang;
|
||||||
var doOclTonemap = _mediaEncoder.SupportsHwaccel("qsv")
|
|
||||||
&& IsVaapiSupported(state)
|
|
||||||
&& IsOpenclFullSupported()
|
|
||||||
&& !IsVaapiVppTonemapAvailable(state, encodingOptions)
|
|
||||||
&& IsHwTonemapAvailable(state, encodingOptions);
|
|
||||||
|
|
||||||
enableWaFori915Hang = isIntelDecoder && doOclTonemap;
|
if (!(isUnaffectedKernel || isFixedKernel60))
|
||||||
|
{
|
||||||
|
var vidDecoder = GetHardwareVideoDecoder(state, encodingOptions) ?? string.Empty;
|
||||||
|
var isIntelDecoder = vidDecoder.Contains("qsv", StringComparison.OrdinalIgnoreCase)
|
||||||
|
|| vidDecoder.Contains("vaapi", StringComparison.OrdinalIgnoreCase);
|
||||||
|
var doOclTonemap = _mediaEncoder.SupportsHwaccel("qsv")
|
||||||
|
&& IsVaapiSupported(state)
|
||||||
|
&& IsOpenclFullSupported()
|
||||||
|
&& !IsVaapiVppTonemapAvailable(state, encodingOptions)
|
||||||
|
&& IsHwTonemapAvailable(state, encodingOptions);
|
||||||
|
|
||||||
|
enableWaFori915Hang = isIntelDecoder && doOclTonemap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.Equals(videoEncoder, "h264_qsv", StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(videoEncoder, "h264_qsv", StringComparison.OrdinalIgnoreCase))
|
||||||
@ -2939,8 +2949,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
}
|
}
|
||||||
else if (hasGraphicalSubs)
|
else if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
// [0:s]scale=expr
|
// [0:s]scale=s=1280x720
|
||||||
var subSwScaleFilter = GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH);
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
||||||
}
|
}
|
||||||
@ -3126,9 +3136,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
||||||
}
|
}
|
||||||
@ -3328,9 +3336,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
||||||
}
|
}
|
||||||
@ -3582,9 +3588,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=endall:shortest=1:repeatlast=0");
|
||||||
}
|
}
|
||||||
@ -3793,9 +3797,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
||||||
}
|
}
|
||||||
@ -4054,9 +4056,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
||||||
|
|
||||||
@ -4251,9 +4251,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
||||||
|
|
||||||
@ -4428,9 +4426,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (hasGraphicalSubs)
|
if (hasGraphicalSubs)
|
||||||
{
|
{
|
||||||
var subSwScaleFilter = isSwDecoder
|
var subSwScaleFilter = GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
||||||
? GetSwScaleFilter(state, options, vidEncoder, inW, inH, threeDFormat, reqW, reqH, reqMaxW, reqMaxH)
|
|
||||||
: GetCustomSwScaleFilter(inW, inH, reqW, reqH, reqMaxW, reqMaxH);
|
|
||||||
subFilters.Add(subSwScaleFilter);
|
subFilters.Add(subSwScaleFilter);
|
||||||
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
overlayFilters.Add("overlay=eof_action=pass:shortest=1:repeatlast=0");
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ public class BrandingOptions
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether to enable the splashscreen.
|
/// Gets or sets a value indicating whether to enable the splashscreen.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool SplashscreenEnabled { get; set; } = true;
|
public bool SplashscreenEnabled { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the splashscreen location on disk.
|
/// Gets or sets the splashscreen location on disk.
|
||||||
|
@ -1174,7 +1174,6 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
var reason = a & flag;
|
var reason = a & flag;
|
||||||
if (reason != 0)
|
if (reason != 0)
|
||||||
{
|
{
|
||||||
a = reason;
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1184,6 +1183,8 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
return index;
|
return index;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var containerSupported = false;
|
||||||
|
|
||||||
// Check DirectPlay profiles to see if it can be direct played
|
// Check DirectPlay profiles to see if it can be direct played
|
||||||
var analyzedProfiles = profile.DirectPlayProfiles
|
var analyzedProfiles = profile.DirectPlayProfiles
|
||||||
.Where(directPlayProfile => directPlayProfile.Type == DlnaProfileType.Video)
|
.Where(directPlayProfile => directPlayProfile.Type == DlnaProfileType.Video)
|
||||||
@ -1197,6 +1198,10 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
directPlayProfileReasons |= TranscodeReason.ContainerNotSupported;
|
directPlayProfileReasons |= TranscodeReason.ContainerNotSupported;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
containerSupported = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Check video codec
|
// Check video codec
|
||||||
string videoCodec = videoStream?.Codec;
|
string videoCodec = videoStream?.Codec;
|
||||||
@ -1239,7 +1244,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
playMethod = PlayMethod.DirectPlay;
|
playMethod = PlayMethod.DirectPlay;
|
||||||
}
|
}
|
||||||
else if (directStreamFailureReasons == 0 && isEligibleForDirectStream && mediaSource.SupportsDirectStream && directPlayProfile is not null)
|
else if (directStreamFailureReasons == 0 && isEligibleForDirectStream && mediaSource.SupportsDirectStream)
|
||||||
{
|
{
|
||||||
playMethod = PlayMethod.DirectStream;
|
playMethod = PlayMethod.DirectStream;
|
||||||
}
|
}
|
||||||
@ -1261,7 +1266,10 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
return profileMatch;
|
return profileMatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
var failureReasons = analyzedProfiles[false].Select(analysis => analysis.Result).FirstOrDefault().TranscodeReason;
|
var failureReasons = analyzedProfiles[false]
|
||||||
|
.Select(analysis => analysis.Result)
|
||||||
|
.Where(result => !containerSupported || (result.TranscodeReason & TranscodeReason.ContainerNotSupported) == 0)
|
||||||
|
.FirstOrDefault().TranscodeReason;
|
||||||
if (failureReasons == 0)
|
if (failureReasons == 0)
|
||||||
{
|
{
|
||||||
failureReasons = TranscodeReason.DirectPlayError;
|
failureReasons = TranscodeReason.DirectPlayError;
|
||||||
|
@ -26,7 +26,7 @@ namespace Jellyfin.Model.Tests
|
|||||||
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
||||||
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
||||||
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")]
|
||||||
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
||||||
@ -37,7 +37,7 @@ namespace Jellyfin.Model.Tests
|
|||||||
[InlineData("Firefox", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
[InlineData("Firefox", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
||||||
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Firefox", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
||||||
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")]
|
||||||
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
||||||
@ -88,7 +88,7 @@ namespace Jellyfin.Model.Tests
|
|||||||
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
||||||
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome-NoHLS", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "http")]
|
[InlineData("Chrome-NoHLS", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "http")]
|
||||||
[InlineData("Chrome-NoHLS", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "http")]
|
[InlineData("Chrome-NoHLS", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode", "http")]
|
||||||
[InlineData("Chrome-NoHLS", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
[InlineData("Chrome-NoHLS", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
||||||
[InlineData("Chrome-NoHLS", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome-NoHLS", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome-NoHLS", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
[InlineData("Chrome-NoHLS", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
||||||
@ -176,7 +176,7 @@ namespace Jellyfin.Model.Tests
|
|||||||
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
||||||
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode")]
|
||||||
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
||||||
@ -186,7 +186,7 @@ namespace Jellyfin.Model.Tests
|
|||||||
[InlineData("Firefox", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Firefox", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Firefox", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
||||||
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode")]
|
||||||
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
|
||||||
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
|
||||||
@ -275,10 +275,10 @@ namespace Jellyfin.Model.Tests
|
|||||||
// Chrome
|
// Chrome
|
||||||
[InlineData("Chrome", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
[InlineData("Chrome", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
||||||
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450
|
||||||
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")]
|
||||||
// Firefox
|
// Firefox
|
||||||
[InlineData("Firefox", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
[InlineData("Firefox", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
||||||
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
|
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")]
|
||||||
// Yatse
|
// Yatse
|
||||||
[InlineData("Yatse", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
[InlineData("Yatse", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
||||||
[InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
[InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
|
||||||
|
Loading…
x
Reference in New Issue
Block a user