StreamingHelpers.GetOutputFileExtension should never return null (#10387)

This commit is contained in:
Bond-009 2023-10-11 23:05:28 +02:00 committed by GitHub
commit 456d9dc0a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -421,13 +421,12 @@ public static class StreamingHelpers
/// <param name="state">The state.</param> /// <param name="state">The state.</param>
/// <param name="mediaSource">The mediaSource.</param> /// <param name="mediaSource">The mediaSource.</param>
/// <returns>System.String.</returns> /// <returns>System.String.</returns>
private static string? GetOutputFileExtension(StreamState state, MediaSourceInfo? mediaSource) private static string GetOutputFileExtension(StreamState state, MediaSourceInfo? mediaSource)
{ {
var ext = Path.GetExtension(state.RequestedUrl.AsSpan()); var ext = Path.GetExtension(state.RequestedUrl);
if (!string.IsNullOrEmpty(ext))
if (ext.IsEmpty)
{ {
return null; return ext;
} }
// Try to infer based on the desired video codec // Try to infer based on the desired video codec
@ -463,10 +462,9 @@ public static class StreamingHelpers
return ".asf"; return ".asf";
} }
} }
else
// Try to infer based on the desired audio codec
if (!state.IsVideoRequest)
{ {
// Try to infer based on the desired audio codec
var audioCodec = state.Request.AudioCodec; var audioCodec = state.Request.AudioCodec;
if (string.Equals("aac", audioCodec, StringComparison.OrdinalIgnoreCase)) if (string.Equals("aac", audioCodec, StringComparison.OrdinalIgnoreCase))
@ -497,7 +495,7 @@ public static class StreamingHelpers
return '.' + (idx == -1 ? mediaSource.Container : mediaSource.Container[..idx]).Trim(); return '.' + (idx == -1 ? mediaSource.Container : mediaSource.Container[..idx]).Trim();
} }
return null; throw new InvalidOperationException("Failed to find an appropriate file extension");
} }
/// <summary> /// <summary>
@ -509,12 +507,12 @@ public static class StreamingHelpers
/// <param name="deviceId">The device id.</param> /// <param name="deviceId">The device id.</param>
/// <param name="playSessionId">The play session id.</param> /// <param name="playSessionId">The play session id.</param>
/// <returns>The complete file path, including the folder, for the transcoding file.</returns> /// <returns>The complete file path, including the folder, for the transcoding file.</returns>
private static string GetOutputFilePath(StreamState state, string? outputFileExtension, IServerConfigurationManager serverConfigurationManager, string? deviceId, string? playSessionId) private static string GetOutputFilePath(StreamState state, string outputFileExtension, IServerConfigurationManager serverConfigurationManager, string? deviceId, string? playSessionId)
{ {
var data = $"{state.MediaPath}-{state.UserAgent}-{deviceId!}-{playSessionId!}"; var data = $"{state.MediaPath}-{state.UserAgent}-{deviceId!}-{playSessionId!}";
var filename = data.GetMD5().ToString("N", CultureInfo.InvariantCulture); var filename = data.GetMD5().ToString("N", CultureInfo.InvariantCulture);
var ext = outputFileExtension?.ToLowerInvariant(); var ext = outputFileExtension.ToLowerInvariant();
var folder = serverConfigurationManager.GetTranscodePath(); var folder = serverConfigurationManager.GetTranscodePath();
return Path.Combine(folder, filename + ext); return Path.Combine(folder, filename + ext);