Check videoRotation in video stream copy

Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
nyanmisaka
2026-05-09 15:11:04 +08:00
parent 5cb6ac521a
commit fc251265d9
3 changed files with 41 additions and 36 deletions

View File

@@ -91,6 +91,12 @@ namespace MediaBrowser.Controller.MediaEncoding
/// <value>The codec tag.</value>
public string CodecTag { get; set; }
/// <summary>
/// Gets or sets the rotation.
/// </summary>
/// <value>The video rotation angle, usually 0 or +-90/180.</value>
public string Rotation { get; set; }
/// <summary>
/// Gets or sets the framerate.
/// </summary>

View File

@@ -2466,6 +2466,17 @@ namespace MediaBrowser.Controller.MediaEncoding
}
}
var requestedRotations = state.GetRequestedRotations(videoStream.Codec);
if (requestedRotations.Length > 0)
{
var rotation = state.VideoStream?.Rotation ?? 0;
if (rotation != 0
&& !requestedRotations.Contains(rotation.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal))
{
return false;
}
}
// Video width must fall within requested value
if (request.MaxWidth.HasValue
&& (!videoStream.Width.HasValue || videoStream.Width.Value > request.MaxWidth.Value))

View File

@@ -571,62 +571,50 @@ namespace MediaBrowser.Controller.MediaEncoding
public string[] GetRequestedProfiles(string codec)
{
if (!string.IsNullOrEmpty(BaseRequest.Profile))
var profile = BaseRequest.Profile;
if (string.IsNullOrEmpty(profile) && !string.IsNullOrEmpty(codec))
{
return BaseRequest.Profile.Split(_separators, StringSplitOptions.RemoveEmptyEntries);
profile = BaseRequest.GetOption(codec, "profile");
}
if (!string.IsNullOrEmpty(codec))
{
var profile = BaseRequest.GetOption(codec, "profile");
if (!string.IsNullOrEmpty(profile))
{
return profile.Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
}
return Array.Empty<string>();
return (profile ?? string.Empty).Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
public string[] GetRequestedRangeTypes(string codec)
{
if (!string.IsNullOrEmpty(BaseRequest.VideoRangeType))
var rangetype = BaseRequest.VideoRangeType;
if (string.IsNullOrEmpty(rangetype) && !string.IsNullOrEmpty(codec))
{
return BaseRequest.VideoRangeType.Split(_separators, StringSplitOptions.RemoveEmptyEntries);
rangetype = BaseRequest.GetOption(codec, "rangetype");
}
if (!string.IsNullOrEmpty(codec))
{
var rangetype = BaseRequest.GetOption(codec, "rangetype");
if (!string.IsNullOrEmpty(rangetype))
{
return rangetype.Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
}
return Array.Empty<string>();
return (rangetype ?? string.Empty).Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
public string[] GetRequestedCodecTags(string codec)
{
if (!string.IsNullOrEmpty(BaseRequest.CodecTag))
var codectag = BaseRequest.CodecTag;
if (string.IsNullOrEmpty(codectag) && !string.IsNullOrEmpty(codec))
{
return BaseRequest.CodecTag.Split(_separators, StringSplitOptions.RemoveEmptyEntries);
codectag = BaseRequest.GetOption(codec, "codectag");
}
if (!string.IsNullOrEmpty(codec))
{
var codectag = BaseRequest.GetOption(codec, "codectag");
return (codectag ?? string.Empty).Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
if (!string.IsNullOrEmpty(codectag))
{
return codectag.Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
public string[] GetRequestedRotations(string codec)
{
var rotation = BaseRequest.Rotation;
if (string.IsNullOrEmpty(rotation) && !string.IsNullOrEmpty(codec))
{
rotation = BaseRequest.GetOption(codec, "rotation");
}
return Array.Empty<string>();
return (rotation ?? string.Empty).Split(_separators, StringSplitOptions.RemoveEmptyEntries);
}
public string GetRequestedLevel(string codec)