aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs')
-rw-r--r--MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs46
1 files changed, 33 insertions, 13 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index 42fa63fb7..340073e9e 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -20,7 +20,12 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.Playback.Hls
{
+ /// <summary>
+ /// Options is needed for chromecast. Threw Head in there since it's related
+ /// </summary>
[Route("/Videos/{Id}/master.m3u8", "GET", Summary = "Gets a video stream using HTTP live streaming.")]
+ [Route("/Videos/{Id}/master.m3u8", "HEAD", Summary = "Gets a video stream using HTTP live streaming.")]
+ [Route("/Videos/{Id}/master.m3u8", "OPTIONS", Summary = "Gets a video stream using HTTP live streaming.")]
public class GetMasterHlsVideoStream : VideoStreamRequest
{
public bool EnableAdaptiveBitrateStreaming { get; set; }
@@ -61,7 +66,21 @@ namespace MediaBrowser.Api.Playback.Hls
public object Get(GetMasterHlsVideoStream request)
{
- var result = GetAsync(request).Result;
+ var result = GetAsync(request, "GET").Result;
+
+ return result;
+ }
+
+ public object Options(GetMasterHlsVideoStream request)
+ {
+ var result = GetAsync(request, "OPTIONS").Result;
+
+ return result;
+ }
+
+ public object Head(GetMasterHlsVideoStream request)
+ {
+ var result = GetAsync(request, "HEAD").Result;
return result;
}
@@ -70,10 +89,6 @@ namespace MediaBrowser.Api.Playback.Hls
{
var result = GetPlaylistAsync(request, "main").Result;
- // Get the transcoding started
- //var start = GetStartNumber(request);
- //var segment = GetDynamicSegment(request, start.ToString(UsCulture)).Result;
-
return result;
}
@@ -319,7 +334,7 @@ namespace MediaBrowser.Api.Playback.Hls
return job != null && !job.HasExited;
}
- private async Task<object> GetAsync(GetMasterHlsVideoStream request)
+ private async Task<object> GetAsync(GetMasterHlsVideoStream request, string method)
{
var state = await GetState(request, CancellationToken.None).ConfigureAwait(false);
@@ -338,10 +353,15 @@ namespace MediaBrowser.Api.Playback.Hls
throw new ArgumentException("MediaSourceId is required");
}
- var audioBitrate = state.OutputAudioBitrate ?? 0;
- var videoBitrate = state.OutputVideoBitrate ?? 0;
+ var playlistText = string.Empty;
+
+ if (string.Equals(method, "GET", StringComparison.OrdinalIgnoreCase))
+ {
+ var audioBitrate = state.OutputAudioBitrate ?? 0;
+ var videoBitrate = state.OutputVideoBitrate ?? 0;
- var playlistText = GetMasterPlaylistFileText(state, videoBitrate + audioBitrate);
+ playlistText = GetMasterPlaylistFileText(state, videoBitrate + audioBitrate);
+ }
return ResultFactory.GetResult(playlistText, Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
}
@@ -359,14 +379,14 @@ namespace MediaBrowser.Api.Playback.Hls
var playlistUrl = (state.RunTimeTicks ?? 0) > 0 ? "main.m3u8" : "live.m3u8";
playlistUrl += queryString;
- var request = (GetMasterHlsVideoStream) state.Request;
+ var request = (GetMasterHlsVideoStream)state.Request;
var subtitleStreams = state.AllMediaStreams
.Where(i => i.IsTextSubtitleStream)
.ToList();
- var subtitleGroup = subtitleStreams.Count > 0 && request.SubtitleMethod == SubtitleDeliveryMethod.Hls ?
- "subs" :
+ var subtitleGroup = subtitleStreams.Count > 0 && request.SubtitleMethod == SubtitleDeliveryMethod.Hls ?
+ "subs" :
null;
AppendPlaylist(builder, playlistUrl, totalBitrate, subtitleGroup);
@@ -582,7 +602,7 @@ namespace MediaBrowser.Api.Playback.Hls
// Add resolution params, if specified
if (!hasGraphicalSubs)
{
- args += GetOutputSizeParam(state, codec, CancellationToken.None, false);
+ args += GetOutputSizeParam(state, codec, false);
}
// This is for internal graphical subs