aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs')
-rw-r--r--MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs59
1 files changed, 25 insertions, 34 deletions
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
index 708e85d4d..2837d748e 100644
--- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
@@ -1,5 +1,4 @@
-using System;
-using MediaBrowser.Common.IO;
+using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
@@ -10,9 +9,9 @@ using MediaBrowser.Controller.MediaInfo;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.IO;
+using System;
using System.Collections.Generic;
using System.IO;
-using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
@@ -24,11 +23,13 @@ namespace MediaBrowser.Api.Playback.Progressive
public abstract class BaseProgressiveStreamingService : BaseStreamingService
{
protected readonly IImageProcessor ImageProcessor;
+ protected readonly IHttpClient HttpClient;
- protected BaseProgressiveStreamingService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IImageProcessor imageProcessor)
+ protected BaseProgressiveStreamingService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IImageProcessor imageProcessor, IHttpClient httpClient)
: base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager)
{
ImageProcessor = imageProcessor;
+ HttpClient = httpClient;
}
/// <summary>
@@ -157,7 +158,7 @@ namespace MediaBrowser.Api.Playback.Progressive
// // ??
// contentFeatures = "DLNA.ORG_PN=WMVHIGH_BASE";
//}
-
+
if (!string.IsNullOrEmpty(contentFeatures))
{
@@ -194,7 +195,7 @@ namespace MediaBrowser.Api.Playback.Progressive
if (request.Static && state.IsRemote)
{
AddDlnaHeaders(state, responseHeaders, true);
-
+
return GetStaticRemoteStreamResult(state.MediaPath, responseHeaders, isHeadRequest).Result;
}
@@ -230,44 +231,34 @@ namespace MediaBrowser.Api.Playback.Progressive
{
responseHeaders["Accept-Ranges"] = "none";
- var httpClient = new HttpClient();
-
- using (var message = new HttpRequestMessage(HttpMethod.Get, mediaPath))
+ var response = await HttpClient.GetResponse(new HttpRequestOptions
{
- var useragent = GetUserAgent(mediaPath);
+ Url = mediaPath,
+ UserAgent = GetUserAgent(mediaPath),
+ BufferContent = false
- if (!string.IsNullOrEmpty(useragent))
- {
- message.Headers.Add("User-Agent", useragent);
- }
+ }).ConfigureAwait(false);
- var response = await httpClient.SendAsync(message, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
- response.EnsureSuccessStatusCode();
-
- var contentType = response.Content.Headers.ContentType.MediaType;
-
- // Headers only
- if (isHeadRequest)
+ if (isHeadRequest)
+ {
+ using (response.Content)
{
- response.Dispose();
- httpClient.Dispose();
-
- return ResultFactory.GetResult(null, contentType, responseHeaders);
+ return ResultFactory.GetResult(null, response.ContentType, responseHeaders);
}
+ }
- var result = new StaticRemoteStreamWriter(response, httpClient);
-
- result.Options["Content-Type"] = contentType;
+ var result = new StaticRemoteStreamWriter(response);
- // Add the response headers to the result object
- foreach (var header in responseHeaders)
- {
- result.Options[header.Key] = header.Value;
- }
+ result.Options["Content-Type"] = response.ContentType;
- return result;
+ // Add the response headers to the result object
+ foreach (var header in responseHeaders)
+ {
+ result.Options[header.Key] = header.Value;
}
+
+ return result;
}
/// <summary>