diff options
Diffstat (limited to 'MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs')
| -rw-r--r-- | MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index 13d103608..52052e16e 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -90,8 +90,9 @@ namespace MediaBrowser.Api.Playback.Progressive /// </summary> /// <param name="state">The state.</param> /// <param name="responseHeaders">The response headers.</param> + /// <param name="isStaticallyStreamed">if set to <c>true</c> [is statically streamed].</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - private void AddDlnaHeaders(StreamState state, IDictionary<string, string> responseHeaders) + private void AddDlnaHeaders(StreamState state, IDictionary<string, string> responseHeaders, bool isStaticallyStreamed) { var timeSeek = RequestContext.GetHeader("TimeSeekRange.dlna.org"); @@ -107,46 +108,56 @@ namespace MediaBrowser.Api.Playback.Progressive var contentFeatures = string.Empty; 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 org_op = isStaticallyStreamed ? ";DLNA.ORG_OP=01" : ";DLNA.ORG_OP=00"; + + // 0 = native, 1 = transcoded + var org_ci = isStaticallyStreamed ? ";DLNA.ORG_CI=0" : ";DLNA.ORG_CI=1"; + + var dlnaflags = ";DLNA.ORG_FLAGS=01500000000000000000000000000000"; + if (string.Equals(extension, ".mp3", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=MP3"; } else if (string.Equals(extension, ".aac", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=AAC_ISO;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=AAC_ISO"; } else if (string.Equals(extension, ".wma", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=WMABASE;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=WMABASE"; } else if (string.Equals(extension, ".avi", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=AVI;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=AVI"; } else if (string.Equals(extension, ".mp4", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=MPEG4_P2_SP_AAC;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=AVC_MP4_BL_L3_SD_AAC"; } else if (string.Equals(extension, ".mpeg", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=MPEG_PS_PAL"; } else if (string.Equals(extension, ".wmv", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_PN=WMVHIGH_BASE;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + contentFeatures = "DLNA.ORG_PN=WMVHIGH_BASE"; } else if (string.Equals(extension, ".asf", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + // ?? + contentFeatures = "DLNA.ORG_PN=WMVHIGH_BASE"; } else if (string.Equals(extension, ".mkv", StringComparison.OrdinalIgnoreCase)) { - contentFeatures = "DLNA.ORG_OP=01;DLNA.ORG_CI=0"; + // ?? + contentFeatures = ""; } if (!string.IsNullOrEmpty(contentFeatures)) { - responseHeaders["ContentFeatures.DLNA.ORG"] = contentFeatures; + responseHeaders["ContentFeatures.DLNA.ORG"] = (contentFeatures + org_op + org_ci + dlnaflags).Trim(';'); } } @@ -176,16 +187,20 @@ namespace MediaBrowser.Api.Playback.Progressive var responseHeaders = new Dictionary<string, string>(); - AddDlnaHeaders(state, responseHeaders); + var outputPath = GetOutputFilePath(state); + var outputPathExists = File.Exists(outputPath); + + var isStatic = request.Static || + (outputPathExists && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive)); + + AddDlnaHeaders(state, responseHeaders, isStatic); if (request.Static) { return ResultFactory.GetStaticFileResult(RequestContext, state.Item.Path, responseHeaders, isHeadRequest); } - var outputPath = GetOutputFilePath(state); - - if (File.Exists(outputPath) && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive)) + if (outputPathExists && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive)) { return ResultFactory.GetStaticFileResult(RequestContext, outputPath, responseHeaders, isHeadRequest); } |
