diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-13 21:46:27 -0400 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-13 21:46:27 -0400 |
| commit | a16cdc8e7f37827f6ef370921399cc62886837d2 (patch) | |
| tree | 024e4a0e36192ba900b54b42136715e0dec7c888 /MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs | |
| parent | 00e0e44398c33fb55f69583e17f8f1d98218098a (diff) | |
add some http response headers for dlna
Diffstat (limited to 'MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs')
| -rw-r--r-- | MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index 56bb18752..ef9b48d5a 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.IO; +using System; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; @@ -82,6 +83,70 @@ namespace MediaBrowser.Api.Playback.Progressive } /// <summary> + /// Adds the dlna headers. + /// </summary> + private bool AddDlnaHeaders(StreamState state) + { + var headers = Request.Headers; + + if (!string.IsNullOrEmpty(headers["TimeSeekRange.dlna.org"])) + { + Response.StatusCode = 406; + return false; + } + + var transferMode = headers["transferMode.dlna.org"]; + Response.AddHeader("transferMode.dlna.org", string.IsNullOrEmpty(transferMode) ? "Streaming" : transferMode); + + var contentFeatures = string.Empty; + var extension = GetOutputFileExtension(state); + + if (string.Equals(extension, ".mp3", StringComparison.OrdinalIgnoreCase)) + { + contentFeatures = "DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + } + 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"; + } + 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"; + } + 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"; + } + 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"; + } + 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"; + } + 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"; + } + else if (string.Equals(extension, ".asf", StringComparison.OrdinalIgnoreCase)) + { + contentFeatures = "DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"; + } + else if (string.Equals(extension, ".mkv", StringComparison.OrdinalIgnoreCase)) + { + contentFeatures = "DLNA.ORG_OP=01;DLNA.ORG_CI=0"; + } + + if (!string.IsNullOrEmpty(contentFeatures)) + { + Response.AddHeader("ContentFeatures.DLNA.ORG", contentFeatures); + } + + return true; + } + + /// <summary> /// Gets the type of the transcoding job. /// </summary> /// <value>The type of the transcoding job.</value> @@ -100,6 +165,11 @@ namespace MediaBrowser.Api.Playback.Progressive { var state = GetState(request); + if (!AddDlnaHeaders(state)) + { + return null; + } + if (request.Static) { return ToStaticFileResult(state.Item.Path, isHeadRequest); |
