Forráskód Böngészése

Merge branch 'master' into hdr-extract

Nyanmisaka 4 éve
szülő
commit
421faabc7c

+ 2 - 1
Emby.Dlna/Eventing/DlnaEventManager.cs

@@ -72,7 +72,8 @@ namespace Emby.Dlna.Eventing
                 Id = id,
                 CallbackUrl = callbackUrl,
                 SubscriptionTime = DateTime.UtcNow,
-                TimeoutSeconds = timeout
+                TimeoutSeconds = timeout,
+                NotificationType = notificationType
             });
 
             return GetEventSubscriptionResponse(id, requestedTimeoutString, timeout);

+ 2 - 2
Emby.Server.Implementations/Emby.Server.Implementations.csproj

@@ -36,8 +36,8 @@
     <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" />
     <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0" />
     <PackageReference Include="Mono.Nat" Version="3.0.1" />
-    <PackageReference Include="prometheus-net.DotNetRuntime" Version="3.4.0" />
-    <PackageReference Include="ServiceStack.Text.Core" Version="5.10.0" />
+    <PackageReference Include="prometheus-net.DotNetRuntime" Version="3.4.1" />
+    <PackageReference Include="ServiceStack.Text.Core" Version="5.10.2" />
     <PackageReference Include="sharpcompress" Version="0.26.0" />
     <PackageReference Include="SQLitePCL.pretty.netstandard" Version="2.1.0" />
     <PackageReference Include="DotNet.Glob" Version="3.1.0" />

+ 2 - 1
Emby.Server.Implementations/Localization/Core/pt.json

@@ -116,5 +116,6 @@
     "TaskCleanActivityLog": "Limpar registo de atividade",
     "Undefined": "Indefinido",
     "Forced": "Forçado",
-    "Default": "Predefinição"
+    "Default": "Predefinição",
+    "TaskCleanActivityLogDescription": "Apaga itens no registro com idade acima do que é configurado."
 }

+ 4 - 2
Emby.Server.Implementations/Localization/Core/tr.json

@@ -12,7 +12,7 @@
     "DeviceOfflineWithName": "{0} bağlantısı kesildi",
     "DeviceOnlineWithName": "{0} bağlı",
     "FailedLoginAttemptWithUserName": "{0} adresinden giriş başarısız oldu",
-    "Favorites": "Favoriler",
+    "Favorites": "Favorilerim",
     "Folders": "Klasörler",
     "Genres": "Türler",
     "HeaderAlbumArtists": "Albüm Sanatçıları",
@@ -115,5 +115,7 @@
     "TaskRefreshChapterImages": "Bölüm Resimlerini Çıkar",
     "TaskCleanCacheDescription": "Sistem tarafından artık ihtiyaç duyulmayan önbellek dosyalarını siler.",
     "TaskCleanActivityLog": "İşlem Günlüğünü Temizle",
-    "TaskCleanActivityLogDescription": "Belirtilen sureden daha eski etkinlik log kayıtları silindi."
+    "TaskCleanActivityLogDescription": "Belirtilen sureden daha eski etkinlik log kayıtları silindi.",
+    "Undefined": "Bilinmeyen",
+    "Default": "Varsayılan"
 }

+ 38 - 24
Emby.Server.Implementations/ScheduledTasks/Tasks/DeleteTranscodeFileTask.cs

@@ -5,10 +5,10 @@ using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Common.Configuration;
+using MediaBrowser.Model.Globalization;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Tasks;
 using Microsoft.Extensions.Logging;
-using MediaBrowser.Model.Globalization;
 
 namespace Emby.Server.Implementations.ScheduledTasks.Tasks
 {
@@ -23,8 +23,12 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
         private readonly ILocalizationManager _localization;
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="DeleteTranscodeFileTask" /> class.
+        /// Initializes a new instance of the <see cref="DeleteTranscodeFileTask"/> class.
         /// </summary>
+        /// <param name="logger">Instance of the <see cref="ILogger{DeleteTranscodeFileTask}"/> interface.</param>
+        /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
+        /// <param name="configurationManager">Instance of the <see cref="IConfigurationManager"/> interface.</param>
+        /// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
         public DeleteTranscodeFileTask(
             ILogger<DeleteTranscodeFileTask> logger,
             IFileSystem fileSystem,
@@ -37,11 +41,42 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
             _localization = localization;
         }
 
+        /// <inheritdoc />
+        public string Name => _localization.GetLocalizedString("TaskCleanTranscode");
+
+        /// <inheritdoc />
+        public string Description => _localization.GetLocalizedString("TaskCleanTranscodeDescription");
+
+        /// <inheritdoc />
+        public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
+
+        /// <inheritdoc />
+        public string Key => "DeleteTranscodeFiles";
+
+        /// <inheritdoc />
+        public bool IsHidden => false;
+
+        /// <inheritdoc />
+        public bool IsEnabled => true;
+
+        /// <inheritdoc />
+        public bool IsLogged => true;
+
         /// <summary>
         /// Creates the triggers that define when the task will run.
         /// </summary>
         /// <returns>IEnumerable{BaseTaskTrigger}.</returns>
-        public IEnumerable<TaskTriggerInfo> GetDefaultTriggers() => new List<TaskTriggerInfo>();
+        public IEnumerable<TaskTriggerInfo> GetDefaultTriggers()
+        {
+            return new[]
+            {
+                new TaskTriggerInfo
+                {
+                    Type = TaskTriggerInfo.TriggerInterval,
+                    IntervalTicks = TimeSpan.FromHours(24).Ticks
+                }
+            };
+        }
 
         /// <summary>
         /// Returns the task to be executed.
@@ -131,26 +166,5 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
                 _logger.LogError(ex, "Error deleting file {path}", path);
             }
         }
-
-        /// <inheritdoc />
-        public string Name => _localization.GetLocalizedString("TaskCleanTranscode");
-
-        /// <inheritdoc />
-        public string Description => _localization.GetLocalizedString("TaskCleanTranscodeDescription");
-
-        /// <inheritdoc />
-        public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
-
-        /// <inheritdoc />
-        public string Key => "DeleteTranscodeFiles";
-
-        /// <inheritdoc />
-        public bool IsHidden => false;
-
-        /// <inheritdoc />
-        public bool IsEnabled => true;
-
-        /// <inheritdoc />
-        public bool IsLogged => true;
     }
 }

+ 6 - 6
Jellyfin.Api/Controllers/AudioController.cs

@@ -78,7 +78,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -134,7 +134,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext? context,
@@ -186,7 +186,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context ?? EncodingContext.Static,
@@ -243,7 +243,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -299,7 +299,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext? context,
@@ -351,7 +351,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context ?? EncodingContext.Static,

+ 18 - 18
Jellyfin.Api/Controllers/DynamicHlsController.cs

@@ -160,7 +160,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -216,7 +216,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -268,7 +268,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,
@@ -326,7 +326,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -383,7 +383,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -435,7 +435,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,
@@ -492,7 +492,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -546,7 +546,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -598,7 +598,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,
@@ -656,7 +656,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -711,7 +711,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -763,7 +763,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,
@@ -823,7 +823,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -881,7 +881,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -933,7 +933,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,
@@ -994,7 +994,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -1053,7 +1053,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -1105,7 +1105,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,

+ 3 - 3
Jellyfin.Api/Controllers/VideoHlsController.cs

@@ -153,7 +153,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -211,7 +211,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -266,7 +266,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,

+ 6 - 6
Jellyfin.Api/Controllers/VideosController.cs

@@ -320,7 +320,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -376,7 +376,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -430,7 +430,7 @@ namespace Jellyfin.Api.Controllers
                 EnableMpegtsM2TsMode = enableMpegtsM2TsMode ?? true,
                 VideoCodec = videoCodec,
                 SubtitleCodec = subtitleCodec,
-                TranscodeReasons = transcodingReasons,
+                TranscodeReasons = transcodeReasons,
                 AudioStreamIndex = audioStreamIndex,
                 VideoStreamIndex = videoStreamIndex,
                 Context = context,
@@ -576,7 +576,7 @@ namespace Jellyfin.Api.Controllers
         /// <param name="enableMpegtsM2TsMode">Optional. Whether to enable the MpegtsM2Ts mode.</param>
         /// <param name="videoCodec">Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.</param>
         /// <param name="subtitleCodec">Optional. Specify a subtitle codec to encode to.</param>
-        /// <param name="transcodingReasons">Optional. The transcoding reason.</param>
+        /// <param name="transcodeReasons">Optional. The transcoding reason.</param>
         /// <param name="audioStreamIndex">Optional. The index of the audio stream to use. If omitted the first audio stream will be used.</param>
         /// <param name="videoStreamIndex">Optional. The index of the video stream to use. If omitted the first video stream will be used.</param>
         /// <param name="context">Optional. The <see cref="EncodingContext"/>.</param>
@@ -632,7 +632,7 @@ namespace Jellyfin.Api.Controllers
             [FromQuery] bool? enableMpegtsM2TsMode,
             [FromQuery] string? videoCodec,
             [FromQuery] string? subtitleCodec,
-            [FromQuery] string? transcodingReasons,
+            [FromQuery] string? transcodeReasons,
             [FromQuery] int? audioStreamIndex,
             [FromQuery] int? videoStreamIndex,
             [FromQuery] EncodingContext context,
@@ -683,7 +683,7 @@ namespace Jellyfin.Api.Controllers
                 enableMpegtsM2TsMode,
                 videoCodec,
                 subtitleCodec,
-                transcodingReasons,
+                transcodeReasons,
                 audioStreamIndex,
                 videoStreamIndex,
                 context,

+ 5 - 1
MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs

@@ -778,7 +778,11 @@ namespace MediaBrowser.MediaEncoding.Probing
                 }
             }
 
-            if (bitrate == 0 && formatInfo != null && !string.IsNullOrEmpty(formatInfo.BitRate) && stream.Type == MediaStreamType.Video)
+            // The bitrate info of FLAC musics and some videos is included in formatInfo.
+            if (bitrate == 0
+                && formatInfo != null
+                && !string.IsNullOrEmpty(formatInfo.BitRate)
+                && (stream.Type == MediaStreamType.Video || stream.Type == MediaStreamType.Audio))
             {
                 // If the stream info doesn't have a bitrate get the value from the media format info
                 if (int.TryParse(formatInfo.BitRate, NumberStyles.Any, _usCulture, out var value))

+ 1 - 1
tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj

@@ -22,7 +22,7 @@
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
     <PackageReference Include="coverlet.collector" Version="1.3.0" />
-    <PackageReference Include="Moq" Version="4.15.1" />
+    <PackageReference Include="Moq" Version="4.15.2" />
   </ItemGroup>
 
   <!-- Code Analyzers -->

+ 1 - 1
tests/Jellyfin.Networking.Tests/NetworkTesting/Jellyfin.Networking.Tests.csproj

@@ -17,7 +17,7 @@
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
     <PackageReference Include="coverlet.collector" Version="1.3.0" />
-    <PackageReference Include="Moq" Version="4.14.5" />
+    <PackageReference Include="Moq" Version="4.15.2" />
   </ItemGroup>
 
   <!-- Code Analyzers-->

+ 1 - 1
tests/Jellyfin.Server.Implementations.Tests/Jellyfin.Server.Implementations.Tests.csproj

@@ -17,7 +17,7 @@
     <PackageReference Include="AutoFixture" Version="4.14.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.14.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.0" />
-    <PackageReference Include="Moq" Version="4.15.1" />
+    <PackageReference Include="Moq" Version="4.15.2" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
     <PackageReference Include="coverlet.collector" Version="1.3.0" />