diff options
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/Dlna/DlnaServerService.cs | 15 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/BaseStreamingService.cs | 50 |
2 files changed, 22 insertions, 43 deletions
diff --git a/MediaBrowser.Api/Dlna/DlnaServerService.cs b/MediaBrowser.Api/Dlna/DlnaServerService.cs index 097552ab4..0dd7ee7d1 100644 --- a/MediaBrowser.Api/Dlna/DlnaServerService.cs +++ b/MediaBrowser.Api/Dlna/DlnaServerService.cs @@ -1,5 +1,7 @@ -using MediaBrowser.Controller.Dlna; +using System; +using MediaBrowser.Controller.Dlna; using ServiceStack; +using ServiceStack.Text.Controller; using ServiceStack.Web; using System.Collections.Generic; using System.IO; @@ -21,9 +23,12 @@ namespace MediaBrowser.Api.Dlna { } - [Route("/Dlna/control", "POST", Summary = "Processes a control request")] + [Route("/Dlna/{UuId}/control", "POST", Summary = "Processes a control request")] public class ProcessControlRequest : IRequiresRequestStream { + [ApiMember(Name = "UuId", Description = "Server UuId", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UuId { get; set; } + public Stream RequestStream { get; set; } } @@ -66,12 +71,16 @@ namespace MediaBrowser.Api.Dlna private async Task<ControlResponse> PostAsync(ProcessControlRequest request) { + var pathInfo = PathInfo.Parse(Request.PathInfo); + var id = pathInfo.GetArgumentValue<string>(1); + using (var reader = new StreamReader(request.RequestStream)) { return _dlnaManager.ProcessControlRequest(new ControlRequest { Headers = GetRequestHeaders(), - InputXml = await reader.ReadToEndAsync().ConfigureAwait(false) + InputXml = await reader.ReadToEndAsync().ConfigureAwait(false), + TargetServerUuId = id }); } } diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 15cac7e3b..04deea3cf 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -300,7 +300,7 @@ namespace MediaBrowser.Api.Playback case EncodingQuality.HighSpeed: return 2; case EncodingQuality.HighQuality: - return isWebm ? Math.Max((int)((Environment.ProcessorCount -1) / 2) , 2) : 0; + return 2; case EncodingQuality.MaxQuality: return isWebm ? Math.Max(Environment.ProcessorCount - 1, 2) : 0; default: @@ -373,7 +373,6 @@ namespace MediaBrowser.Api.Playback break; case EncodingQuality.MaxQuality: crf = "4"; - //profilescore aready set to 0 break; default: throw new ArgumentException("Unrecognized quality setting"); @@ -381,7 +380,9 @@ namespace MediaBrowser.Api.Playback if (isVc1) { - profileScore = 1; + profileScore ++; + // Max of 2 + profileScore = Math.Min(profileScore, 2); } // http://www.webmproject.org/docs/encoder-parameters/ @@ -1713,33 +1714,19 @@ namespace MediaBrowser.Api.Playback var extension = GetOutputFileExtension(state); // first bit means Time based seek supported, second byte range seek supported (not sure about the order now), so 01 = only byte seek, 10 = time based, 11 = both, 00 = none - var orgOp = ";DLNA.ORG_OP="; - - if (state.RunTimeTicks.HasValue) - { - // Time-based seeking currently only possible when transcoding - orgOp += isStaticallyStreamed ? "0" : "1"; + var orgOp = ";DLNA.ORG_OP=" + DlnaMaps.GetOrgOpValue(state.RunTimeTicks.HasValue, isStaticallyStreamed, state.TranscodeSeekInfo); - // Byte-based seeking only possible when not transcoding - orgOp += isStaticallyStreamed || state.TranscodeSeekInfo == TranscodeSeekInfo.Bytes ? "1" : "0"; - - if (!isStaticallyStreamed) - { - AddTimeSeekResponseHeaders(state, responseHeaders); - } - } - else + if (state.RunTimeTicks.HasValue && !isStaticallyStreamed) { - // No seeking is available if we don't know the content runtime - orgOp += "00"; + AddTimeSeekResponseHeaders(state, responseHeaders); } // 0 = native, 1 = transcoded var orgCi = isStaticallyStreamed ? ";DLNA.ORG_CI=0" : ";DLNA.ORG_CI=1"; - var flagValue = DlnaFlags.DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE | - DlnaFlags.DLNA_ORG_FLAG_BACKGROUND_TRANSFERT_MODE | - DlnaFlags.DLNA_ORG_FLAG_DLNA_V15; + var flagValue = DlnaFlags.StreamingTransferMode | + DlnaFlags.BackgroundTransferMode | + DlnaFlags.DlnaV15; if (isStaticallyStreamed) { @@ -1801,23 +1788,6 @@ namespace MediaBrowser.Api.Playback } } - [Flags] - private enum DlnaFlags - { - DLNA_ORG_FLAG_SENDER_PACED = (1 << 31), - DLNA_ORG_FLAG_TIME_BASED_SEEK = (1 << 30), - DLNA_ORG_FLAG_BYTE_BASED_SEEK = (1 << 29), - DLNA_ORG_FLAG_PLAY_CONTAINER = (1 << 28), - DLNA_ORG_FLAG_S0_INCREASE = (1 << 27), - DLNA_ORG_FLAG_SN_INCREASE = (1 << 26), - DLNA_ORG_FLAG_RTSP_PAUSE = (1 << 25), - DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE = (1 << 24), - DLNA_ORG_FLAG_INTERACTIVE_TRANSFERT_MODE = (1 << 23), - DLNA_ORG_FLAG_BACKGROUND_TRANSFERT_MODE = (1 << 22), - DLNA_ORG_FLAG_CONNECTION_STALL = (1 << 21), - DLNA_ORG_FLAG_DLNA_V15 = (1 << 20), - }; - private void AddTimeSeekResponseHeaders(StreamState state, IDictionary<string, string> responseHeaders) { var runtimeSeconds = TimeSpan.FromTicks(state.RunTimeTicks.Value).TotalSeconds.ToString(UsCulture); |
