diff options
Diffstat (limited to 'MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs')
| -rw-r--r-- | MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index 90c233e90..3773a2a1c 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -1,11 +1,12 @@ -using System; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; +using System; +using System.Collections.Generic; using System.IO; using System.Threading.Tasks; @@ -16,7 +17,7 @@ namespace MediaBrowser.Api.Playback.Progressive /// </summary> public abstract class BaseProgressiveStreamingService : BaseStreamingService { - protected BaseProgressiveStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager) : + protected BaseProgressiveStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager) : base(appPaths, userManager, libraryManager, isoManager) { } @@ -85,18 +86,21 @@ namespace MediaBrowser.Api.Playback.Progressive /// <summary> /// Adds the dlna headers. /// </summary> - private bool AddDlnaHeaders(StreamState state) + /// <param name="state">The state.</param> + /// <param name="responseHeaders">The response headers.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + private void AddDlnaHeaders(StreamState state, IDictionary<string,string> responseHeaders) { var timeSeek = RequestContext.GetHeader("TimeSeekRange.dlna.org"); if (!string.IsNullOrEmpty(timeSeek)) { - Response.StatusCode = 406; - return false; + ResultFactory.ThrowError(406, "Time seek not supported during encoding.", responseHeaders); + return; } var transferMode = RequestContext.GetHeader("transferMode.dlna.org"); - Response.AddHeader("transferMode.dlna.org", string.IsNullOrEmpty(transferMode) ? "Streaming" : transferMode); + responseHeaders["transferMode.dlna.org"] = string.IsNullOrEmpty(transferMode) ? "Streaming" : transferMode; var contentFeatures = string.Empty; var extension = GetOutputFileExtension(state); @@ -140,10 +144,8 @@ namespace MediaBrowser.Api.Playback.Progressive if (!string.IsNullOrEmpty(contentFeatures)) { - Response.AddHeader("ContentFeatures.DLNA.ORG", contentFeatures); + responseHeaders["ContentFeatures.DLNA.ORG"] = contentFeatures; } - - return true; } /// <summary> @@ -165,45 +167,45 @@ namespace MediaBrowser.Api.Playback.Progressive { var state = GetState(request); - if (!AddDlnaHeaders(state)) - { - return null; - } + var responseHeaders = new Dictionary<string, string>(); + + AddDlnaHeaders(state, responseHeaders); if (request.Static) { - return ToStaticFileResult(state.Item.Path, isHeadRequest); + return ResultFactory.GetStaticFileResult(RequestContext, state.Item.Path, responseHeaders, isHeadRequest); } var outputPath = GetOutputFilePath(state); if (File.Exists(outputPath) && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive)) { - return ToStaticFileResult(outputPath, isHeadRequest); + return ResultFactory.GetStaticFileResult(RequestContext, outputPath, responseHeaders, isHeadRequest); } - Response.AddHeader("Accept-Ranges", "none"); - - return GetStreamResult(state, isHeadRequest).Result; + return GetStreamResult(state, responseHeaders, isHeadRequest).Result; } /// <summary> /// Gets the stream result. /// </summary> /// <param name="state">The state.</param> + /// <param name="responseHeaders">The response headers.</param> /// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param> /// <returns>Task{System.Object}.</returns> - private async Task<ProgressiveStreamWriter> GetStreamResult(StreamState state, bool isHeadRequest) + private async Task<object> GetStreamResult(StreamState state, IDictionary<string,string> responseHeaders, bool isHeadRequest) { // Use the command line args with a dummy playlist path var outputPath = GetOutputFilePath(state); - Response.ContentType = MimeTypes.GetMimeType(outputPath); + var contentType = MimeTypes.GetMimeType(outputPath); // Headers only if (isHeadRequest) { - return null; + responseHeaders["Accept-Ranges"] = "none"; + + return ResultFactory.GetResult(null, contentType, responseHeaders); } if (!File.Exists(outputPath)) @@ -215,7 +217,18 @@ namespace MediaBrowser.Api.Playback.Progressive ApiEntryPoint.Instance.OnTranscodeBeginRequest(outputPath, TranscodingJobType.Progressive); } - return new ProgressiveStreamWriter(outputPath, state, Logger); + var result = new ProgressiveStreamWriter(outputPath, state, Logger); + + result.Options["Accept-Ranges"] = "none"; + result.Options["Content-Type"] = contentType; + + // Add the response headers to the result object + foreach (var item in responseHeaders) + { + result.Options[item.Key] = item.Value; + } + + return result; } /// <summary> |
