diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 62ae61e9a6..d63ea7502d 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -7482,8 +7482,18 @@ namespace MediaBrowser.Controller.MediaEncoding if (Path.GetExtension(outputPath.AsSpan()).Equals(".mp4", StringComparison.OrdinalIgnoreCase) && 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"; + // Use fragmented MP4 for adaptive streaming (HLS/DASH with segments) + // Use faststart for progressive downloads (better seeking and metadata) + if (!string.IsNullOrEmpty(state.Request.SegmentContainer)) + { + // Fragmented MP4 for HLS/DASH + format = " -f mp4 -movflags frag_keyframe+empty_moov+delay_moov"; + } + else + { + // Progressive download - use faststart for proper seeking and duration + format = " -f mp4 -movflags faststart"; + } } var threads = GetNumberOfThreads(state, encodingOptions, videoCodec);