From 03e2bc7198b28d8ebcd902e771a0a622b6410719 Mon Sep 17 00:00:00 2001 From: 7illusions Date: Mon, 7 Apr 2014 12:29:37 +0200 Subject: [PATCH] Fixes DirectStreaming for Microsoft players --- .../HttpServer/RangeRequestWriter.cs | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs b/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs index 312e718e15..08e9403aa8 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/RangeRequestWriter.cs @@ -64,7 +64,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer { throw new ArgumentNullException("contentType"); } - + RangeHeader = rangeHeader; SourceStream = source; IsHeadRequest = isHeadRequest; @@ -98,11 +98,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer RangeStart = requestedRange.Key; RangeLength = 1 + RangeEnd - RangeStart; - + // Content-Length is the length of what we're serving, not the original content Options["Content-Length"] = RangeLength.ToString(UsCulture); Options["Content-Range"] = string.Format("bytes {0}-{1}/{2}", RangeStart, RangeEnd, TotalContentLength); - + if (RangeStart > 0) { SourceStream.Position = RangeStart; @@ -178,19 +178,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer using (var source = SourceStream) { - // If the requested range is "0-", we can optimize by just doing a stream copy - if (RangeEnd == TotalContentLength - 1) - { - await source.CopyToAsync(responseStream).ConfigureAwait(false); - } - else - { - // Read the bytes we need - var buffer = new byte[Convert.ToInt32(RangeLength)]; - await source.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); - - await responseStream.WriteAsync(buffer, 0, Convert.ToInt32(RangeLength)).ConfigureAwait(false); - } + //Since we've already set the postion of the sourcestream, just copy the remains to the output + await source.CopyToAsync(responseStream).ConfigureAwait(false); } }