浏览代码

Allow clients to send audio container override for HLS

This will improve flexibility due to overcome the complex compatibility situation of HLS

Signed-off-by: gnattu <gnattuoc@me.com>
gnattu 1 年之前
父节点
当前提交
a16d3d4887
共有 2 个文件被更改,包括 7 次插入1 次删除
  1. 2 1
      Jellyfin.Api/Controllers/UniversalAudioController.cs
  2. 5 0
      MediaBrowser.Model/Dlna/StreamBuilder.cs

+ 2 - 1
Jellyfin.Api/Controllers/UniversalAudioController.cs

@@ -187,7 +187,8 @@ public class UniversalAudioController : BaseJellyfinApiController
             var supportedHlsContainers = new[] { "ts", "mp4" };
 
             // fallback to mpegts if device reports some weird value unsupported by hls
-            var segmentContainer = Array.Exists(supportedHlsContainers, element => element == transcodingContainer) ? transcodingContainer : "ts";
+            var requestedSegmentContainer = Array.Exists(supportedHlsContainers, element => element == transcodingContainer) ? transcodingContainer : "ts";
+            var segmentContainer = Array.Exists(supportedHlsContainers, element => element == mediaSource.TranscodingContainer) ? mediaSource.TranscodingContainer : requestedSegmentContainer;
             var dynamicHlsRequestDto = new HlsAudioRequestDto
             {
                 Id = itemId,

+ 5 - 0
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -127,6 +127,10 @@ namespace MediaBrowser.Model.Dlna
             if (directPlayMethod is PlayMethod.DirectStream)
             {
                 var remuxContainer = item.TranscodingContainer ?? "ts";
+                var supportedHlsContainers = new[] { "ts", "mp4" };
+                // If the container specified for the profile is an HLS supported container, use that container instead, overriding the preference
+                // The client should be responsible to ensure this container is compatible
+                remuxContainer = Array.Exists(supportedHlsContainers, element => element == directPlayInfo.Profile?.Container) ? directPlayInfo.Profile?.Container : remuxContainer;
                 bool codeIsSupported;
                 if (item.TranscodingSubProtocol == MediaStreamProtocol.hls)
                 {
@@ -152,6 +156,7 @@ namespace MediaBrowser.Model.Dlna
                     playlistItem.Container = remuxContainer;
                     playlistItem.TranscodeReasons = transcodeReasons;
                     playlistItem.SubProtocol = item.TranscodingSubProtocol;
+                    item.TranscodingContainer = remuxContainer;
                     return playlistItem;
                 }