From c70508b08984d62d3b62d233f6ce4078f2a75bb1 Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 01:56:14 +0000 Subject: [PATCH 1/8] Add movflags to mp4 audio encoding --- .../MediaEncoding/EncodingHelper.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index a844e64433..d08a5116a0 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -5786,6 +5786,22 @@ namespace MediaBrowser.Controller.MediaEncoding } } + // Copy the movflags from GetProgressiveVideoFullCommandLine + // See # for explanation on why this is needed + var mp4ContainerNames = new HashSet { + "mp4", + "m4a", + "m4p", + "m4b", + "m4r", + "m4v", + }; + + if (mp4ContainerNames.Contains(state.OutputContainer.ToLower())) + { + audioTranscodeParams.Add("-movflags frag_keyframe+empty_moov+delay_moov"); + } + var threads = GetNumberOfThreads(state, encodingOptions, null); var inputModifier = GetInputModifier(state, encodingOptions, null); From f2cc0e70693d134d163ab056cd412a151c1055fc Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 02:17:36 +0000 Subject: [PATCH 2/8] Fill in issue/PR comment --- MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index d08a5116a0..33ecaf3bf1 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -5787,7 +5787,7 @@ namespace MediaBrowser.Controller.MediaEncoding } // Copy the movflags from GetProgressiveVideoFullCommandLine - // See # for explanation on why this is needed + // See #9248 and the associated PR for why this is needed var mp4ContainerNames = new HashSet { "mp4", "m4a", From 25ee6375eb46ef98e4ebceee642163a5f4fb6233 Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 02:19:32 +0000 Subject: [PATCH 3/8] Add name to CONTRIBUTORS.md --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index ec3c6fd2af..5884c7376b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -58,6 +58,7 @@ - [HelloWorld017](https://github.com/HelloWorld017) - [ikomhoog](https://github.com/ikomhoog) - [jftuga](https://github.com/jftuga) + - [jmshrv](https://github.com/jmshrv) - [joern-h](https://github.com/joern-h) - [joshuaboniface](https://github.com/joshuaboniface) - [JustAMan](https://github.com/JustAMan) From a3f41bbc0cf2b2009005ef5bb1d449002ff7017c Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 02:29:21 +0000 Subject: [PATCH 4/8] Remove frag_keyframe as it is not relevant for audio --- MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 33ecaf3bf1..21cfac00a4 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -5581,7 +5581,7 @@ namespace MediaBrowser.Controller.MediaEncoding && state.BaseRequest.Context == EncodingContext.Streaming) { // Comparison: https://github.com/jansmolders86/mediacenterjs/blob/master/lib/transcoding/desktop.js - format = " -f mp4 -movflags frag_keyframe+empty_moov+delay_moov"; + format = " -f mp4 -movflags empty_moov+delay_moov"; } var threads = GetNumberOfThreads(state, encodingOptions, videoCodec); From 83ae6fcdb466b2bee17af07ac415f6e5892ff3c7 Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 02:45:24 +0000 Subject: [PATCH 5/8] Fix Braces for multi-line statements should not share line --- MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 21cfac00a4..c335320a75 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -5788,7 +5788,8 @@ namespace MediaBrowser.Controller.MediaEncoding // Copy the movflags from GetProgressiveVideoFullCommandLine // See #9248 and the associated PR for why this is needed - var mp4ContainerNames = new HashSet { + var mp4ContainerNames = new HashSet + { "mp4", "m4a", "m4p", From c9627f8839dbb0956df2fdb6ab8258710d837b11 Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 02:46:14 +0000 Subject: [PATCH 6/8] Fix Use built-in type alias --- MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index c335320a75..e530cba2c5 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -5788,7 +5788,7 @@ namespace MediaBrowser.Controller.MediaEncoding // Copy the movflags from GetProgressiveVideoFullCommandLine // See #9248 and the associated PR for why this is needed - var mp4ContainerNames = new HashSet + var mp4ContainerNames = new HashSet { "mp4", "m4a", From 42b4ef45294833efc2cca381e555a792729889b0 Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 03:59:35 +0000 Subject: [PATCH 7/8] Remove frag_keyframe on audio, not video --- MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index e530cba2c5..d6ab27b037 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -5581,7 +5581,7 @@ namespace MediaBrowser.Controller.MediaEncoding && state.BaseRequest.Context == EncodingContext.Streaming) { // Comparison: https://github.com/jansmolders86/mediacenterjs/blob/master/lib/transcoding/desktop.js - format = " -f mp4 -movflags empty_moov+delay_moov"; + format = " -f mp4 -movflags frag_keyframe+empty_moov+delay_moov"; } var threads = GetNumberOfThreads(state, encodingOptions, videoCodec); @@ -5800,7 +5800,7 @@ namespace MediaBrowser.Controller.MediaEncoding if (mp4ContainerNames.Contains(state.OutputContainer.ToLower())) { - audioTranscodeParams.Add("-movflags frag_keyframe+empty_moov+delay_moov"); + audioTranscodeParams.Add("-movflags empty_moov+delay_moov"); } var threads = GetNumberOfThreads(state, encodingOptions, null); From 4a2245fe1e97c7d450557fd1269be8584a58c478 Mon Sep 17 00:00:00 2001 From: James Harvey <44349936+jmshrv@users.noreply.github.com> Date: Sat, 4 Feb 2023 18:52:35 +0000 Subject: [PATCH 8/8] Move mp4 container names to class and use StringComparer.OrdinalIgnoreCase --- .../MediaEncoding/EncodingHelper.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index d6ab27b037..9b5edabc06 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -61,6 +61,16 @@ namespace MediaBrowser.Controller.MediaEncoding "Main10" }; + private static readonly HashSet _mp4ContainerNames = new(StringComparer.OrdinalIgnoreCase) + { + "mp4", + "m4a", + "m4p", + "m4b", + "m4r", + "m4v", + }; + public EncodingHelper( IApplicationPaths appPaths, IMediaEncoder mediaEncoder, @@ -5788,17 +5798,7 @@ namespace MediaBrowser.Controller.MediaEncoding // Copy the movflags from GetProgressiveVideoFullCommandLine // See #9248 and the associated PR for why this is needed - var mp4ContainerNames = new HashSet - { - "mp4", - "m4a", - "m4p", - "m4b", - "m4r", - "m4v", - }; - - if (mp4ContainerNames.Contains(state.OutputContainer.ToLower())) + if (_mp4ContainerNames.Contains(state.OutputContainer)) { audioTranscodeParams.Add("-movflags empty_moov+delay_moov"); }