Your ROOT_URL in app.ini is https://git.cloudchain.link/ but you are visiting https://dash.bss.nz/open-source-mirrors/jellyfin/commit/6395f4889d18bf4b12567ca7c28e9d5a22506e73?style=split&whitespace=show-all You should set ROOT_URL correctly, otherwise the web may not work correctly.

Update unit test for StreamBuilder to reflect current server and clients

Signed-off-by: gnattu <gnattuoc@me.com>
pull/12639/head
gnattu 6 months ago
parent 3c64e1d33f
commit 6395f4889d

@ -22,37 +22,41 @@ namespace Jellyfin.Model.Tests
[Theory] [Theory]
// Chrome // Chrome
[InlineData("Chrome", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("Chrome", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Chrome", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450 [InlineData("Chrome", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioIsExternal, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")] [InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode")] [InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")]
[InlineData("Chrome", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")] [InlineData("Chrome", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")]
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported, "Remux")] // #6450 [InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Chrome", "mp4-h264-hi10p-aac-5000k", PlayMethod.DirectPlay)]
// Firefox // Firefox
[InlineData("Firefox", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("Firefox", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Firefox", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Firefox", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450 [InlineData("Firefox", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Firefox", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450 [InlineData("Firefox", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioIsExternal, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #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", "HLS.mp4")]
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode")] [InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode", "HLS.mp4")]
[InlineData("Firefox", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")] [InlineData("Firefox", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode", "HLS.mp4")]
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported, "Remux")] // #6450 [InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Firefox", "mp4-h264-hi10p-aac-5000k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported | TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode", "HLS.mp4")] // TODO: investigate why firefox profile has everything unsupported
// Safari // Safari
[InlineData("SafariNext", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Remux", "HLS.mp4")] // #6450 [InlineData("SafariNext", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecTagNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("SafariNext", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450 [InlineData("SafariNext", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecTagNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("SafariNext", "mp4-hevc-ac3-aacExt-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450 [InlineData("SafariNext", "mp4-hevc-ac3-aacExt-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecTagNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("SafariNext", "mp4-h264-hi10p-aac-5000k", PlayMethod.Transcode, TranscodeReason.VideoProfileNotSupported, "Remux", "HLS.mp4")]
// AndroidPixel // AndroidPixel
[InlineData("AndroidPixel", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("AndroidPixel", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("AndroidPixel", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("AndroidPixel", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450
@ -62,21 +66,21 @@ namespace Jellyfin.Model.Tests
[InlineData("AndroidPixel", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.ContainerBitrateExceedsLimit, "Transcode")] [InlineData("AndroidPixel", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.ContainerBitrateExceedsLimit, "Transcode")]
// Yatse // Yatse
[InlineData("Yatse", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("Yatse", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("Yatse", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Yatse", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Yatse", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450 [InlineData("Yatse", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
[InlineData("Yatse", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Yatse", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Yatse", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("Yatse", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
[InlineData("Yatse", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450 [InlineData("Yatse", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
// RokuSSPlus // RokuSSPlus
[InlineData("RokuSSPlus", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("RokuSSPlus", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("RokuSSPlus", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 should be DirectPlay [InlineData("RokuSSPlus", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 should be DirectPlay
[InlineData("RokuSSPlus", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("RokuSSPlus", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("RokuSSPlus", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
[InlineData("RokuSSPlus", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("RokuSSPlus", "mp4-hevc-ac3-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-ac3-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
// JellyfinMediaPlayer // JellyfinMediaPlayer
[InlineData("JellyfinMediaPlayer", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("JellyfinMediaPlayer", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("JellyfinMediaPlayer", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("JellyfinMediaPlayer", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
@ -86,18 +90,6 @@ namespace Jellyfin.Model.Tests
[InlineData("JellyfinMediaPlayer", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("JellyfinMediaPlayer", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("JellyfinMediaPlayer", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("JellyfinMediaPlayer", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("JellyfinMediaPlayer", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("JellyfinMediaPlayer", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] // #6450
// Chrome-NoHLS
[InlineData("Chrome-NoHLS", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #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-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "http")]
[InlineData("Chrome-NoHLS", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode", "http")]
[InlineData("Chrome-NoHLS", "mp4-hevc-ac3-aacDef-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode", "http")]
[InlineData("Chrome-NoHLS", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported, "Remux")] // #6450
[InlineData("Chrome-NoHLS", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome-NoHLS", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// TranscodeMedia // TranscodeMedia
[InlineData("TranscodeMedia", "mp4-h264-aac-vtt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "Remux", "HLS.mp4")] [InlineData("TranscodeMedia", "mp4-h264-aac-vtt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "Remux", "HLS.mp4")]
[InlineData("TranscodeMedia", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "DirectStream", "HLS.mp4")] [InlineData("TranscodeMedia", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "DirectStream", "HLS.mp4")]
@ -147,7 +139,7 @@ namespace Jellyfin.Model.Tests
[InlineData("AndroidTVExoPlayer", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("AndroidTVExoPlayer", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("AndroidTVExoPlayer", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("AndroidTVExoPlayer", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("AndroidTVExoPlayer", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("AndroidTVExoPlayer", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("AndroidTVExoPlayer", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("AndroidTVExoPlayer", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow vp9
// Tizen 3 Stereo // Tizen 3 Stereo
[InlineData("Tizen3-stereo", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)]
@ -155,7 +147,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Tizen3-stereo", "mp4-h264-dts-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-h264-dts-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-hevc-truehd-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Tizen3-stereo", "mp4-hevc-truehd-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Tizen3-stereo", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)]
@ -163,10 +155,10 @@ namespace Jellyfin.Model.Tests
[InlineData("Tizen4-4K-5.1", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-h264-dts-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Tizen4-4K-5.1", "mp4-h264-dts-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-truehd-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Tizen4-4K-5.1", "mp4-hevc-truehd-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Tizen4-4K-5.1", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)]
@ -179,24 +171,24 @@ namespace Jellyfin.Model.Tests
[Theory] [Theory]
// Chrome // Chrome
[InlineData("Chrome", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("Chrome", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Chrome", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 <BUG: this is direct played> [InlineData("Chrome", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450 <BUG: this is direct played>
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")] [InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode")] [InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")]
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported, "Remux")] // #6450 [InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #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", "HLS.mp4")] // #6450
// Firefox // Firefox
[InlineData("Firefox", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("Firefox", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("Firefox", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Firefox", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #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", "HLS.mp4")]
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode")] [InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioCodecNotSupported, "Transcode", "HLS.mp4")]
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported, "Remux")] // #6450 [InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.ContainerNotSupported | TranscodeReason.AudioCodecNotSupported, "DirectStream", "HLS.mp4")] // #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
// Safari // Safari
[InlineData("SafariNext", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] // #6450
@ -204,9 +196,10 @@ namespace Jellyfin.Model.Tests
[InlineData("SafariNext", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("SafariNext", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("SafariNext", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Remux", "HLS.mp4")] // #6450 [InlineData("SafariNext", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecTagNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("SafariNext", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450 [InlineData("SafariNext", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecTagNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450
[InlineData("SafariNext", "mp4-hevc-ac3-aacExt-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450 [InlineData("SafariNext", "mp4-hevc-ac3-aacExt-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecTagNotSupported | TranscodeReason.AudioChannelsNotSupported, "DirectStream", "HLS.mp4")] // #6450
// AndroidPixel // AndroidPixel
[InlineData("AndroidPixel", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("AndroidPixel", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay)] // #6450
[InlineData("AndroidPixel", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay)] // #6450 [InlineData("AndroidPixel", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectPlay)] // #6450
@ -215,19 +208,19 @@ namespace Jellyfin.Model.Tests
[InlineData("AndroidPixel", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.ContainerBitrateExceedsLimit, "Transcode")] [InlineData("AndroidPixel", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.ContainerBitrateExceedsLimit, "Transcode")]
// Yatse // Yatse
[InlineData("Yatse", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("Yatse", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("Yatse", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Yatse", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Yatse", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Yatse", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Yatse", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Yatse", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Yatse", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("Yatse", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
// RokuSSPlus // RokuSSPlus
[InlineData("RokuSSPlus", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-h264-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("RokuSSPlus", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 should be DirectPlay [InlineData("RokuSSPlus", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450 should be DirectPlay
[InlineData("RokuSSPlus", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-h264-ac3-aacDef-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("RokuSSPlus", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-h264-ac3-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("RokuSSPlus", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("RokuSSPlus", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
[InlineData("RokuSSPlus", "mp4-hevc-ac3-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-ac3-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
// JellyfinMediaPlayer // JellyfinMediaPlayer
[InlineData("JellyfinMediaPlayer", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("JellyfinMediaPlayer", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("JellyfinMediaPlayer", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("JellyfinMediaPlayer", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
@ -245,7 +238,7 @@ namespace Jellyfin.Model.Tests
[InlineData("AndroidTVExoPlayer", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("AndroidTVExoPlayer", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("AndroidTVExoPlayer", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("AndroidTVExoPlayer", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("AndroidTVExoPlayer", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("AndroidTVExoPlayer", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("AndroidTVExoPlayer", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("AndroidTVExoPlayer", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow vp9
// Tizen 3 Stereo // Tizen 3 Stereo
[InlineData("Tizen3-stereo", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)]
@ -253,7 +246,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Tizen3-stereo", "mp4-h264-dts-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-h264-dts-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mp4-hevc-truehd-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Tizen3-stereo", "mp4-hevc-truehd-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Tizen3-stereo", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen3-stereo", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen3-stereo", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)]
@ -261,10 +254,10 @@ namespace Jellyfin.Model.Tests
[InlineData("Tizen4-4K-5.1", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-h264-aac-vtt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-h264-dts-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Tizen4-4K-5.1", "mp4-h264-dts-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-hevc-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-truehd-srt-15200k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] [InlineData("Tizen4-4K-5.1", "mp4-hevc-truehd-srt-15200k", PlayMethod.Transcode, TranscodeReason.AudioCodecNotSupported)]
[InlineData("Tizen4-4K-5.1", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectPlay)]
[InlineData("Tizen4-4K-5.1", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)] [InlineData("Tizen4-4K-5.1", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay)]
@ -281,34 +274,34 @@ namespace Jellyfin.Model.Tests
[Theory] [Theory]
// 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.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Chrome", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")]
[InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioIsExternal)] // #6450 [InlineData("Chrome", "mp4-h264-ac3-aacExt-srt-2600k", PlayMethod.Transcode, TranscodeReason.AudioIsExternal, "DirectStream", "HLS.mp4")] // #6450
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")] [InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")]
// 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.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")] // #6450
[InlineData("Firefox", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Firefox", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux", "HLS.mp4")]
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode")] [InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported | TranscodeReason.SecondaryAudioNotSupported, "Transcode", "HLS.mp4")]
// 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.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450
[InlineData("Yatse", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Yatse", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
[InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] // #6450 [InlineData("Yatse", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Transcode")] // Full transcode because profile only has ts which does not allow hevc
// RokuSSPlus // RokuSSPlus
[InlineData("RokuSSPlus", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
[InlineData("RokuSSPlus", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450 [InlineData("RokuSSPlus", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// no streams // no streams
[InlineData("Chrome", "no-streams", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")] // #6450 [InlineData("Chrome", "no-streams", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "HLS.mp4")] // #6450
// AndroidTV // AndroidTV
[InlineData("AndroidTVExoPlayer", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] [InlineData("AndroidTVExoPlayer", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")]
[InlineData("AndroidTVExoPlayer", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] [InlineData("AndroidTVExoPlayer", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")]
// Tizen 3 Stereo // Tizen 3 Stereo
[InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
[InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Tizen3-stereo", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
[InlineData("Tizen3-stereo", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Tizen3-stereo", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
// Tizen 4 4K 5.1 // Tizen 4 4K 5.1
[InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
[InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Tizen4-4K-5.1", "mp4-h264-ac3-aac-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
[InlineData("Tizen4-4K-5.1", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.DirectStream, TranscodeReason.SecondaryAudioNotSupported, "Remux")] [InlineData("Tizen4-4K-5.1", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.SecondaryAudioNotSupported, "Remux")]
// TranscodeMedia // TranscodeMedia
[InlineData("TranscodeMedia", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "Remux", "HLS.mp4")] [InlineData("TranscodeMedia", "mp4-h264-ac3-aac-srt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "Remux", "HLS.mp4")]
[InlineData("TranscodeMedia", "mp4-h264-ac3-aac-mp3-srt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "Remux", "HLS.ts")] [InlineData("TranscodeMedia", "mp4-h264-ac3-aac-mp3-srt-2600k", PlayMethod.Transcode, TranscodeReason.DirectPlayError, "Remux", "HLS.ts")]
@ -331,7 +324,7 @@ namespace Jellyfin.Model.Tests
{ {
if (string.IsNullOrEmpty(transcodeProtocol)) if (string.IsNullOrEmpty(transcodeProtocol))
{ {
transcodeProtocol = playMethod == PlayMethod.DirectStream ? "http" : "HLS.ts"; transcodeProtocol = "HLS.ts";
} }
var builder = GetStreamBuilder(); var builder = GetStreamBuilder();
@ -380,7 +373,7 @@ namespace Jellyfin.Model.Tests
Assert.Equal(streamInfo.Container, uri.Extension); Assert.Equal(streamInfo.Container, uri.Extension);
} }
} }
else if (playMethod == PlayMethod.DirectStream || playMethod == PlayMethod.Transcode) else if (playMethod == PlayMethod.Transcode)
{ {
Assert.NotNull(streamInfo.Container); Assert.NotNull(streamInfo.Container);
Assert.NotEmpty(streamInfo.VideoCodecs); Assert.NotEmpty(streamInfo.VideoCodecs);
@ -550,6 +543,7 @@ namespace Jellyfin.Model.Tests
Profile = dp, Profile = dp,
AllowAudioStreamCopy = true, AllowAudioStreamCopy = true,
AllowVideoStreamCopy = true, AllowVideoStreamCopy = true,
EnableDirectStream = false // This is disabled in server
}; };
} }

@ -16,324 +16,200 @@
"DirectPlayProfiles": [ "DirectPlayProfiles": [
{ {
"Container": "webm", "Container": "webm",
"AudioCodec": "vorbis,opus",
"VideoCodec": "vp8,vp9,av1",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "vp8,vp9,av1",
"AudioCodec": "vorbis,opus"
}, },
{ {
"Container": "mp4,m4v", "Container": "mp4,m4v",
"AudioCodec": "aac,mp3,opus,flac,alac,vorbis",
"VideoCodec": "h264,vp8,vp9,av1",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "h264,hevc,vp9,av1",
"AudioCodec": "aac,mp3,mp2,opus,flac,vorbis"
}, },
{ {
"Container": "mov", "Container": "mov",
"AudioCodec": "aac,mp3,opus,flac,alac,vorbis",
"VideoCodec": "h264",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "h264",
"AudioCodec": "aac,mp3,mp2,opus,flac,vorbis"
}, },
{ {
"Container": "opus", "Container": "opus",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webm", "Container": "webm",
"AudioCodec": "opus", "AudioCodec": "opus",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile" },
{
"Container": "ts",
"AudioCodec": "mp3",
"Type": "Audio"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4a", "Container": "m4a",
"AudioCodec": "aac", "AudioCodec": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4b", "Container": "m4b",
"AudioCodec": "aac", "AudioCodec": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "flac", "Container": "flac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
},
{
"Container": "alac",
"Type": "Audio",
"$type": "DirectPlayProfile"
},
{
"Container": "m4a",
"AudioCodec": "alac",
"Type": "Audio",
"$type": "DirectPlayProfile"
},
{
"Container": "m4b",
"AudioCodec": "alac",
"Type": "Audio",
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webma", "Container": "webma",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webm", "Container": "webm",
"AudioCodec": "webma", "AudioCodec": "webma",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "ogg", "Container": "ogg",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile" },
{
"Container": "hls",
"Type": "Video",
"VideoCodec": "av1,hevc,h264,vp9",
"AudioCodec": "aac,mp2,opus,flac"
},
{
"Container": "hls",
"Type": "Video",
"VideoCodec": "h264",
"AudioCodec": "aac,mp3,mp2"
} }
], ],
"TranscodingProfiles": [ "TranscodingProfiles": [
{ {
"Container": "ts", "Container": "mp4",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "hls",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "hls",
"MaxAudioChannels": "6", "MaxAudioChannels": "2",
"MinSegments": 2, "MinSegments": "2",
"SegmentLength": 0,
"BreakOnNonKeyFrames": true, "BreakOnNonKeyFrames": true,
"$type": "TranscodingProfile" "EnableAudioVbrEncoding": true
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "mp3", "AudioCodec": "mp3",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "opus", "Container": "opus",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "opus", "AudioCodec": "opus",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "wav", "AudioCodec": "wav",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "opus", "Container": "opus",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "opus", "AudioCodec": "opus",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "mp3", "AudioCodec": "mp3",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "wav", "AudioCodec": "wav",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "2"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
},
{
"Container": "ts",
"Type": "Video",
"VideoCodec": "h264",
"AudioCodec": "aac,mp3",
"Protocol": "hls",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming",
"EnableSubtitlesInManifest": false,
"MaxAudioChannels": "6",
"MinSegments": 2,
"SegmentLength": 0,
"BreakOnNonKeyFrames": true,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "webm", "Container": "mp4",
"Type": "Video", "Type": "Video",
"VideoCodec": "vp8,vp9,av1,vpx", "AudioCodec": "aac,mp2,opus,flac",
"AudioCodec": "vorbis,opus", "VideoCodec": "av1,hevc,h264,vp9",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "hls",
"MaxAudioChannels": "6", "MaxAudioChannels": "2",
"MinSegments": 0, "MinSegments": "2",
"SegmentLength": 0, "BreakOnNonKeyFrames": true
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp4", "Container": "ts",
"Type": "Video", "Type": "Video",
"AudioCodec": "aac,mp3,mp2",
"VideoCodec": "h264", "VideoCodec": "h264",
"AudioCodec": "aac,mp3,opus,flac,alac,vorbis", "Context": "Streaming",
"Protocol": "http", "Protocol": "hls",
"EstimateContentLength": false, "MaxAudioChannels": "2",
"EnableMpegtsM2TsMode": false, "MinSegments": "2",
"TranscodeSeekInfo": "Auto", "BreakOnNonKeyFrames": true
"CopyTimestamps": false,
"Context": "Static",
"EnableSubtitlesInManifest": false,
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
} }
], ],
"ContainerProfiles": [],
"CodecProfiles": [ "CodecProfiles": [
{ {
"Type": "VideoAudio", "Type": "VideoAudio",
"Codec": "aac",
"Conditions": [ "Conditions": [
{ {
"Condition": "Equals", "Condition": "Equals",
"Property": "IsSecondaryAudio", "Property": "IsSecondaryAudio",
"Value": "false", "Value": "false",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
} }
], ]
"Codec": "aac",
"$type": "CodecProfile"
}, },
{ {
"Type": "VideoAudio", "Type": "VideoAudio",
@ -342,107 +218,144 @@
"Condition": "Equals", "Condition": "Equals",
"Property": "IsSecondaryAudio", "Property": "IsSecondaryAudio",
"Value": "false", "Value": "false",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
} }
], ]
"$type": "CodecProfile"
}, },
{ {
"Type": "Video", "Type": "Video",
"Codec": "h264",
"Conditions": [ "Conditions": [
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsAnamorphic", "Property": "IsAnamorphic",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "EqualsAny", "Condition": "EqualsAny",
"Property": "VideoProfile", "Property": "VideoProfile",
"Value": "high|main|baseline|constrained baseline|high 10", "Value": "high|main|baseline|constrained baseline|high 10",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition" },
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR",
"IsRequired": false
}, },
{ {
"Condition": "LessThanEqual", "Condition": "LessThanEqual",
"Property": "VideoLevel", "Property": "VideoLevel",
"Value": "52", "Value": "52",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsInterlaced", "Property": "IsInterlaced",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
} }
], ]
"Codec": "h264",
"$type": "CodecProfile"
}, },
{ {
"Type": "Video", "Type": "Video",
"Codec": "hevc",
"Conditions": [ "Conditions": [
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsAnamorphic", "Property": "IsAnamorphic",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "EqualsAny", "Condition": "EqualsAny",
"Property": "VideoProfile", "Property": "VideoProfile",
"Value": "main", "Value": "main|main 10",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition" },
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR|HDR10|HLG",
"IsRequired": false
}, },
{ {
"Condition": "LessThanEqual", "Condition": "LessThanEqual",
"Property": "VideoLevel", "Property": "VideoLevel",
"Value": "120", "Value": "183",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsInterlaced", "Property": "IsInterlaced",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
} }
], ]
"Codec": "hevc", },
"$type": "CodecProfile"
}
],
"ResponseProfiles": [
{ {
"Container": "m4v",
"Type": "Video", "Type": "Video",
"MimeType": "video/mp4", "Codec": "vp9",
"$type": "ResponseProfile" "Conditions": [
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR|HDR10|HLG",
"IsRequired": false
}
]
},
{
"Type": "Video",
"Codec": "av1",
"Conditions": [
{
"Condition": "NotEquals",
"Property": "IsAnamorphic",
"Value": "true",
"IsRequired": false
},
{
"Condition": "EqualsAny",
"Property": "VideoProfile",
"Value": "main",
"IsRequired": false
},
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR|HDR10|HLG",
"IsRequired": false
},
{
"Condition": "LessThanEqual",
"Property": "VideoLevel",
"Value": "19",
"IsRequired": false
}
]
} }
], ],
"SubtitleProfiles": [ "SubtitleProfiles": [
{ {
"Format": "vtt", "Format": "vtt",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
}, },
{ {
"Format": "ass", "Format": "ass",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
}, },
{ {
"Format": "ssa", "Format": "ssa",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
} }
], ],
"$type": "DeviceProfile" "ResponseProfiles": [
{
"Type": "Video",
"Container": "m4v",
"MimeType": "video/mp4"
}
]
} }

@ -15,426 +15,357 @@
"IgnoreTranscodeByteRangeRequests": false, "IgnoreTranscodeByteRangeRequests": false,
"DirectPlayProfiles": [ "DirectPlayProfiles": [
{ {
"Container": "webm",
"AudioCodec": "vorbis,opus", "AudioCodec": "vorbis,opus",
"VideoCodec": "vp8,vp9,av1", "Container": "webm",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "vp8,vp9,av1"
}, },
{ {
"AudioCodec": "aac,mp3,mp2,opus,flac,vorbis",
"Container": "mp4,m4v", "Container": "mp4,m4v",
"AudioCodec": "aac,mp3,opus,flac,alac,vorbis",
"VideoCodec": "h264,vp8,vp9,av1",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "h264,vp9,av1"
}, },
{ {
"Container": "opus", "Container": "opus",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webm",
"AudioCodec": "opus", "AudioCodec": "opus",
"Type": "Audio", "Container": "webm",
"$type": "DirectPlayProfile" "Type": "Audio"
},
{
"AudioCodec": "mp3",
"Container": "ts",
"Type": "Audio"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4a",
"AudioCodec": "aac", "AudioCodec": "aac",
"Type": "Audio", "Container": "m4a",
"$type": "DirectPlayProfile" "Type": "Audio"
}, },
{ {
"Container": "m4b",
"AudioCodec": "aac", "AudioCodec": "aac",
"Type": "Audio", "Container": "m4b",
"$type": "DirectPlayProfile" "Type": "Audio"
}, },
{ {
"Container": "flac", "Container": "flac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
},
{
"Container": "alac",
"Type": "Audio",
"$type": "DirectPlayProfile"
},
{
"Container": "m4a",
"AudioCodec": "alac",
"Type": "Audio",
"$type": "DirectPlayProfile"
},
{
"Container": "m4b",
"AudioCodec": "alac",
"Type": "Audio",
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webma", "Container": "webma",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webm",
"AudioCodec": "webma", "AudioCodec": "webma",
"Type": "Audio", "Container": "webm",
"$type": "DirectPlayProfile" "Type": "Audio"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "ogg", "Container": "ogg",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile" },
{
"AudioCodec": "aac,mp2,opus,flac",
"Container": "hls",
"Type": "Video",
"VideoCodec": "av1,h264,vp9"
},
{
"AudioCodec": "aac,mp3,mp2",
"Container": "hls",
"Type": "Video",
"VideoCodec": "h264"
} }
], ],
"TranscodingProfiles": [ "TranscodingProfiles": [
{ {
"Container": "ts",
"Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "hls",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming",
"EnableSubtitlesInManifest": false,
"MaxAudioChannels": "6",
"MinSegments": 2,
"SegmentLength": 0,
"BreakOnNonKeyFrames": true, "BreakOnNonKeyFrames": true,
"$type": "TranscodingProfile" "Container": "mp4",
"Context": "Streaming",
"EnableAudioVbrEncoding": true,
"MaxAudioChannels": "2",
"MinSegments": "2",
"Protocol": "hls",
"Type": "Audio"
}, },
{ {
"Container": "aac",
"Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "http", "Container": "aac",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp3",
"Type": "Audio",
"AudioCodec": "mp3", "AudioCodec": "mp3",
"Protocol": "http", "Container": "mp3",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "opus",
"Type": "Audio",
"AudioCodec": "opus", "AudioCodec": "opus",
"Protocol": "http", "Container": "opus",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "wav",
"Type": "Audio",
"AudioCodec": "wav", "AudioCodec": "wav",
"Protocol": "http", "Container": "wav",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "opus",
"Type": "Audio",
"AudioCodec": "opus", "AudioCodec": "opus",
"Protocol": "http", "Container": "opus",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp3",
"Type": "Audio",
"AudioCodec": "mp3", "AudioCodec": "mp3",
"Protocol": "http", "Container": "mp3",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "aac",
"Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "http", "Container": "aac",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "wav",
"Type": "Audio",
"AudioCodec": "wav", "AudioCodec": "wav",
"Protocol": "http", "Container": "wav",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "Protocol": "http",
"MinSegments": 0, "Type": "Audio"
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "ts", "AudioCodec": "aac,mp2,opus,flac",
"Type": "Video",
"VideoCodec": "h264",
"AudioCodec": "aac,mp3",
"Protocol": "hls",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming",
"EnableSubtitlesInManifest": false,
"MaxAudioChannels": "6",
"MinSegments": 2,
"SegmentLength": 0,
"BreakOnNonKeyFrames": true, "BreakOnNonKeyFrames": true,
"$type": "TranscodingProfile" "Container": "mp4",
},
{
"Container": "webm",
"Type": "Video",
"VideoCodec": "vp8,vp9,av1,vpx",
"AudioCodec": "vorbis,opus",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "MaxAudioChannels": "2",
"MaxAudioChannels": "6", "MinSegments": "2",
"MinSegments": 0, "Protocol": "hls",
"SegmentLength": 0, "Type": "Video",
"BreakOnNonKeyFrames": false, "VideoCodec": "av1,h264,vp9"
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp4", "AudioCodec": "aac,mp3,mp2",
"BreakOnNonKeyFrames": true,
"Container": "ts",
"Context": "Streaming",
"MaxAudioChannels": "2",
"MinSegments": "2",
"Protocol": "hls",
"Type": "Video", "Type": "Video",
"VideoCodec": "h264", "VideoCodec": "h264"
"AudioCodec": "aac,mp3,opus,flac,alac,vorbis",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static",
"EnableSubtitlesInManifest": false,
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
} }
], ],
"CodecProfiles": [ "CodecProfiles": [
{ {
"Type": "VideoAudio", "Codec": "aac",
"Conditions": [ "Conditions": [
{ {
"Condition": "Equals", "Condition": "Equals",
"IsRequired": false,
"Property": "IsSecondaryAudio", "Property": "IsSecondaryAudio",
"Value": "false", "Value": "false"
}
],
"Type": "VideoAudio"
},
{
"Conditions": [
{
"Condition": "LessThanEqual",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "AudioChannels",
"Value": "2"
} }
], ],
"Codec": "aac", "Type": "Audio"
"$type": "CodecProfile"
}, },
{ {
"Type": "VideoAudio",
"Conditions": [ "Conditions": [
{
"Condition": "LessThanEqual",
"IsRequired": false,
"Property": "AudioChannels",
"Value": "2"
},
{ {
"Condition": "Equals", "Condition": "Equals",
"Property": "IsSecondaryAudio",
"Value": "false",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "IsSecondaryAudio",
"Value": "false"
} }
], ],
"$type": "CodecProfile" "Type": "VideoAudio"
}, },
{ {
"Type": "Video", "Codec": "h264",
"Conditions": [ "Conditions": [
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsAnamorphic",
"Value": "true",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "IsAnamorphic",
"Value": "true"
}, },
{ {
"Condition": "EqualsAny", "Condition": "EqualsAny",
"IsRequired": false,
"Property": "VideoProfile", "Property": "VideoProfile",
"Value": "high|main|baseline|constrained baseline", "Value": "high|main|baseline|constrained baseline"
},
{
"Condition": "EqualsAny",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "VideoRangeType",
"Value": "SDR"
}, },
{ {
"Condition": "LessThanEqual", "Condition": "LessThanEqual",
"Property": "VideoLevel",
"Value": "52",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "VideoLevel",
"Value": "52"
}, },
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsInterlaced",
"Value": "true",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "IsInterlaced",
"Value": "true"
} }
], ],
"Codec": "h264", "Type": "Video"
"$type": "CodecProfile"
}, },
{ {
"Type": "Video", "Codec": "hevc",
"Conditions": [ "Conditions": [
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsAnamorphic",
"Value": "true",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "IsAnamorphic",
"Value": "true"
}, },
{ {
"Condition": "EqualsAny", "Condition": "EqualsAny",
"IsRequired": false,
"Property": "VideoProfile", "Property": "VideoProfile",
"Value": "main", "Value": "main"
},
{
"Condition": "EqualsAny",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "VideoRangeType",
"Value": "SDR"
}, },
{ {
"Condition": "LessThanEqual", "Condition": "LessThanEqual",
"Property": "VideoLevel",
"Value": "120",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "VideoLevel",
"Value": "120"
}, },
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"IsRequired": false,
"Property": "IsInterlaced", "Property": "IsInterlaced",
"Value": "true", "Value": "true"
}
],
"Type": "Video"
},
{
"Codec": "vp9",
"Conditions": [
{
"Condition": "EqualsAny",
"IsRequired": false, "IsRequired": false,
"$type": "ProfileCondition" "Property": "VideoRangeType",
"Value": "SDR"
} }
], ],
"Codec": "hevc", "Type": "Video"
"$type": "CodecProfile" },
{
"Codec": "av1",
"Conditions": [
{
"Condition": "NotEquals",
"IsRequired": false,
"Property": "IsAnamorphic",
"Value": "true"
},
{
"Condition": "EqualsAny",
"IsRequired": false,
"Property": "VideoProfile",
"Value": "main"
},
{
"Condition": "EqualsAny",
"IsRequired": false,
"Property": "VideoRangeType",
"Value": "SDR"
},
{
"Condition": "LessThanEqual",
"IsRequired": false,
"Property": "VideoLevel",
"Value": "19"
}
],
"Type": "Video"
} }
], ],
"ResponseProfiles": [ "ResponseProfiles": [
{ {
"Container": "m4v", "Container": "m4v",
"Type": "Video",
"MimeType": "video/mp4", "MimeType": "video/mp4",
"$type": "ResponseProfile" "Type": "Video"
} }
], ],
"SubtitleProfiles": [ "SubtitleProfiles": [
{ {
"Format": "vtt", "Format": "vtt",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
}, },
{ {
"Format": "ass", "Format": "ass",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
}, },
{ {
"Format": "ssa", "Format": "ssa",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
} }
], ],
"$type": "DeviceProfile" "$type": "DeviceProfile"

@ -16,211 +16,160 @@
"DirectPlayProfiles": [ "DirectPlayProfiles": [
{ {
"Container": "webm", "Container": "webm",
"AudioCodec": "vorbis",
"VideoCodec": "vp8,vp9",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "vp8",
"AudioCodec": "vorbis,opus"
}, },
{ {
"Container": "mp4,m4v", "Container": "mp4,m4v",
"AudioCodec": "aac,mp3,ac3,eac3,flac,alac,vorbis",
"VideoCodec": "h264,vp8,vp9",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "h264,hevc,vp9",
"AudioCodec": "aac,ac3,eac3,opus,flac,alac"
}, },
{ {
"Container": "mov", "Container": "mov",
"AudioCodec": "aac,mp3,ac3,eac3,flac,alac,vorbis",
"VideoCodec": "h264",
"Type": "Video", "Type": "Video",
"$type": "DirectPlayProfile" "VideoCodec": "h264",
"AudioCodec": "aac,ac3,eac3,opus,flac,alac"
},
{
"Container": "ts",
"AudioCodec": "mp3",
"Type": "Audio"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4a", "Container": "m4a",
"AudioCodec": "aac", "AudioCodec": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4b", "Container": "m4b",
"AudioCodec": "aac", "AudioCodec": "aac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "flac", "Container": "mp4",
"Type": "Audio", "AudioCodec": "flac",
"$type": "DirectPlayProfile" "Type": "Audio"
}, },
{ {
"Container": "alac", "Container": "alac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4a", "Container": "m4a",
"AudioCodec": "alac", "AudioCodec": "alac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "m4b", "Container": "m4b",
"AudioCodec": "alac", "AudioCodec": "alac",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webma", "Container": "webma",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "webm", "Container": "webm",
"AudioCodec": "webma", "AudioCodec": "webma",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio"
"$type": "DirectPlayProfile" },
{
"Container": "mp4",
"AudioCodec": "opus",
"Type": "Audio"
},
{
"Container": "hls",
"Type": "Video",
"VideoCodec": "hevc,h264,vp9",
"AudioCodec": "aac,ac3,eac3,opus,flac,alac"
},
{
"Container": "hls",
"Type": "Video",
"VideoCodec": "h264",
"AudioCodec": "aac,mp3,ac3,eac3"
} }
], ],
"TranscodingProfiles": [ "TranscodingProfiles": [
{ {
"Container": "aac", "Container": "mp4",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "hls",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "hls",
"MaxAudioChannels": "6", "MaxAudioChannels": "6",
"MinSegments": 2, "MinSegments": "2",
"SegmentLength": 0,
"BreakOnNonKeyFrames": true, "BreakOnNonKeyFrames": true,
"$type": "TranscodingProfile" "EnableAudioVbrEncoding": true
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "6"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "mp3", "AudioCodec": "mp3",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "6"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "wav", "AudioCodec": "wav",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Streaming", "Context": "Streaming",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "6"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp3", "Container": "mp3",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "mp3", "AudioCodec": "mp3",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "6"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "aac", "Container": "aac",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "aac", "AudioCodec": "aac",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "6"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "wav", "Container": "wav",
"Type": "Audio", "Type": "Audio",
"AudioCodec": "wav", "AudioCodec": "wav",
"Protocol": "http",
"EstimateContentLength": false,
"EnableMpegtsM2TsMode": false,
"TranscodeSeekInfo": "Auto",
"CopyTimestamps": false,
"Context": "Static", "Context": "Static",
"EnableSubtitlesInManifest": false, "Protocol": "http",
"MaxAudioChannels": "6", "MaxAudioChannels": "6"
"MinSegments": 0,
"SegmentLength": 0,
"BreakOnNonKeyFrames": false,
"$type": "TranscodingProfile"
}, },
{ {
"Container": "mp4", "Container": "mp4",
"Type": "Video", "Type": "Video",
"AudioCodec": "aac,ac3,eac3,flac,alac", "AudioCodec": "aac,ac3,eac3,opus,flac,alac",
"VideoCodec": "hevc,h264", "VideoCodec": "hevc,h264,vp9",
"Context": "Streaming", "Context": "Streaming",
"Protocol": "hls", "Protocol": "hls",
"MaxAudioChannels": "2", "MaxAudioChannels": "2",
@ -237,121 +186,170 @@
"MaxAudioChannels": "2", "MaxAudioChannels": "2",
"MinSegments": "2", "MinSegments": "2",
"BreakOnNonKeyFrames": true "BreakOnNonKeyFrames": true
},
{
"Container": "webm",
"Type": "Video",
"AudioCodec": "vorbis",
"VideoCodec": "vp8,vpx",
"Context": "Streaming",
"Protocol": "http",
"MaxAudioChannels": "2"
},
{
"Container": "mp4",
"Type": "Video",
"AudioCodec": "aac,mp3,ac3,eac3,flac,alac,vorbis",
"VideoCodec": "h264",
"Context": "Static",
"Protocol": "http"
} }
], ],
"ContainerProfiles": [],
"CodecProfiles": [ "CodecProfiles": [
{ {
"Type": "Video", "Type": "Video",
"Container": "hls",
"SubContainer": "mp4",
"Codec": "h264",
"Conditions": [
{
"Condition": "EqualsAny",
"Property": "VideoProfile",
"Value": "high|main|baseline|constrained baseline|high 10",
"IsRequired": false
}
]
},
{
"Type": "Video",
"Codec": "h264",
"Conditions": [ "Conditions": [
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsAnamorphic", "Property": "IsAnamorphic",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "EqualsAny", "Condition": "EqualsAny",
"Property": "VideoProfile", "Property": "VideoProfile",
"Value": "high|main|baseline|constrained baseline", "Value": "high|main|baseline|constrained baseline",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition" },
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR",
"IsRequired": false
}, },
{ {
"Condition": "LessThanEqual", "Condition": "LessThanEqual",
"Property": "VideoLevel", "Property": "VideoLevel",
"Value": "52", "Value": "52",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsInterlaced", "Property": "IsInterlaced",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
} }
], ]
"Codec": "h264",
"$type": "CodecProfile"
}, },
{ {
"Type": "Video", "Type": "Video",
"Codec": "hevc",
"Conditions": [ "Conditions": [
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsAnamorphic", "Property": "IsAnamorphic",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "EqualsAny", "Condition": "EqualsAny",
"Property": "VideoProfile", "Property": "VideoProfile",
"Value": "main|main 10", "Value": "main|main 10",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition" },
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR|HDR10|HLG|DOVI|DOVIWithHDR10|DOVIWithHLG|DOVIWithSDR",
"IsRequired": false
}, },
{ {
"Condition": "LessThanEqual", "Condition": "LessThanEqual",
"Property": "VideoLevel", "Property": "VideoLevel",
"Value": "183", "Value": "183",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition"
}, },
{ {
"Condition": "NotEquals", "Condition": "NotEquals",
"Property": "IsInterlaced", "Property": "IsInterlaced",
"Value": "true", "Value": "true",
"IsRequired": false, "IsRequired": false
"$type": "ProfileCondition" },
{
"Condition": "EqualsAny",
"Property": "VideoCodecTag",
"Value": "hvc1|dvh1",
"IsRequired": true
},
{
"Condition": "LessThanEqual",
"Property": "VideoFramerate",
"Value": "60",
"IsRequired": true
} }
], ]
"Codec": "hevc", },
"$type": "CodecProfile" {
} "Type": "Video",
], "Codec": "vp9",
"ResponseProfiles": [ "Conditions": [
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR|HDR10|HLG",
"IsRequired": false
}
]
},
{ {
"Container": "m4v",
"Type": "Video", "Type": "Video",
"MimeType": "video/mp4", "Codec": "av1",
"$type": "ResponseProfile" "Conditions": [
{
"Condition": "NotEquals",
"Property": "IsAnamorphic",
"Value": "true",
"IsRequired": false
},
{
"Condition": "EqualsAny",
"Property": "VideoProfile",
"Value": "main",
"IsRequired": false
},
{
"Condition": "EqualsAny",
"Property": "VideoRangeType",
"Value": "SDR|HDR10|HLG",
"IsRequired": false
},
{
"Condition": "LessThanEqual",
"Property": "VideoLevel",
"Value": "15",
"IsRequired": false
}
]
} }
], ],
"SubtitleProfiles": [ "SubtitleProfiles": [
{ {
"Format": "vtt", "Format": "vtt",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
}, },
{ {
"Format": "ass", "Format": "ass",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
}, },
{ {
"Format": "ssa", "Format": "ssa",
"Method": "External", "Method": "External"
"$type": "SubtitleProfile"
} }
], ],
"$type": "DeviceProfile" "ResponseProfiles": [
{
"Type": "Video",
"Container": "m4v",
"MimeType": "video/mp4"
}
]
} }

@ -0,0 +1,86 @@
{
"Protocol": "File",
"Id": "a6e78000340509437325708e41b9e3bb",
"Path": "/Media/hi10p.mp4",
"Type": "Default",
"Container": "mov",
"Size": 58211635,
"Name": "MyVideo-hi10p",
"IsRemote": false,
"ETag": "8ad487e37ce9578122bbd8c42be2a392",
"RunTimeTicks": 920115000,
"SupportsTranscoding": true,
"SupportsDirectStream": true,
"SupportsDirectPlay": true,
"VideoType": "VideoFile",
"MediaStreams": [
{
"Codec": "h264",
"CodecTag": "avc1",
"Language": "und",
"TimeBase": "1/16000",
"VideoRange": "SDR",
"VideoRangeType": "SDR",
"AudioSpatialFormat": "None",
"DisplayTitle": "720p H264 SDR",
"NalLengthSize": "4",
"IsInterlaced": false,
"IsAVC": true,
"BitRate": 4820299,
"BitDepth": 10,
"RefFrames": 1,
"IsDefault": true,
"IsForced": false,
"IsHearingImpaired": false,
"Height": 720,
"Width": 1280,
"AverageFrameRate": 24.007952,
"RealFrameRate": 23.976025,
"ReferenceFrameRate": 24.007952,
"Profile": "High 10",
"Type": "Video",
"AspectRatio": "16:9",
"Index": 0,
"IsExternal": false,
"IsTextSubtitleStream": false,
"SupportsExternalStream": false,
"PixelFormat": "yuv420p10le",
"Level": 51,
"IsAnamorphic": false
},
{
"Codec": "aac",
"CodecTag": "mp4a",
"Language": "und",
"TimeBase": "1/48000",
"VideoRange": "Unknown",
"VideoRangeType": "Unknown",
"AudioSpatialFormat": "None",
"LocalizedDefault": "Default",
"LocalizedExternal": "External",
"DisplayTitle": "AAC - Stereo - Default",
"IsInterlaced": false,
"IsAVC": false,
"ChannelLayout": "stereo",
"BitRate": 257358,
"Channels": 2,
"SampleRate": 48000,
"IsDefault": true,
"IsForced": false,
"IsHearingImpaired": false,
"Profile": "LC",
"Type": "Audio",
"Index": 1,
"IsExternal": false,
"IsTextSubtitleStream": false,
"SupportsExternalStream": false,
"Level": 0
}
],
"MediaAttachments": [],
"Formats": [],
"Bitrate": 5061248,
"DefaultAudioStreamIndex": 1,
"DefaultSubtitleStreamIndex": -1,
"HasSegments": false
}
Loading…
Cancel
Save