diff options
Diffstat (limited to 'MediaBrowser.Api/Playback')
3 files changed, 48 insertions, 7 deletions
diff --git a/MediaBrowser.Api/Playback/Progressive/AudioService.cs b/MediaBrowser.Api/Playback/Progressive/AudioService.cs index 3581d006e7..b64e1750c8 100644 --- a/MediaBrowser.Api/Playback/Progressive/AudioService.cs +++ b/MediaBrowser.Api/Playback/Progressive/AudioService.cs @@ -15,6 +15,12 @@ namespace MediaBrowser.Api.Playback.Progressive [Route("/Audio/{Id}/stream.flac", "GET")] [Route("/Audio/{Id}/stream.ogg", "GET")] [Route("/Audio/{Id}/stream", "GET")] + [Route("/Audio/{Id}/stream.mp3", "HEAD")] + [Route("/Audio/{Id}/stream.wma", "HEAD")] + [Route("/Audio/{Id}/stream.aac", "HEAD")] + [Route("/Audio/{Id}/stream.flac", "HEAD")] + [Route("/Audio/{Id}/stream.ogg", "HEAD")] + [Route("/Audio/{Id}/stream", "HEAD")] [ServiceStack.ServiceHost.Api(Description = "Gets an audio stream")] public class GetAudioStream : StreamRequest { @@ -38,7 +44,17 @@ namespace MediaBrowser.Api.Playback.Progressive /// <returns>System.Object.</returns> public object Get(GetAudioStream request) { - return ProcessRequest(request); + return ProcessRequest(request, false); + } + + /// <summary> + /// Gets the specified request. + /// </summary> + /// <param name="request">The request.</param> + /// <returns>System.Object.</returns> + public object Head(GetAudioStream request) + { + return ProcessRequest(request, true); } /// <summary> diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index a4acc28450..56bb18752b 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -94,38 +94,46 @@ namespace MediaBrowser.Api.Playback.Progressive /// Processes the request. /// </summary> /// <param name="request">The request.</param> + /// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param> /// <returns>Task.</returns> - protected object ProcessRequest(StreamRequest request) + protected object ProcessRequest(StreamRequest request, bool isHeadRequest) { var state = GetState(request); if (request.Static) { - return ToStaticFileResult(state.Item.Path); + return ToStaticFileResult(state.Item.Path, isHeadRequest); } var outputPath = GetOutputFilePath(state); if (File.Exists(outputPath) && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive)) { - return ToStaticFileResult(outputPath); + return ToStaticFileResult(outputPath, isHeadRequest); } - return GetStreamResult(state).Result; + return GetStreamResult(state, isHeadRequest).Result; } /// <summary> /// Gets the stream result. /// </summary> /// <param name="state">The state.</param> + /// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param> /// <returns>Task{System.Object}.</returns> - private async Task<ProgressiveStreamWriter> GetStreamResult(StreamState state) + private async Task<ProgressiveStreamWriter> GetStreamResult(StreamState state, bool isHeadRequest) { // Use the command line args with a dummy playlist path var outputPath = GetOutputFilePath(state); Response.ContentType = MimeTypes.GetMimeType(outputPath); + // Headers only + if (isHeadRequest) + { + return null; + } + if (!File.Exists(outputPath)) { await StartFFMpeg(state, outputPath).ConfigureAwait(false); diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index cc1c5b1fc5..0e94b7df89 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -23,6 +23,18 @@ namespace MediaBrowser.Api.Playback.Progressive [Route("/Videos/{Id}/stream.avi", "GET")] [Route("/Videos/{Id}/stream.m2ts", "GET")] [Route("/Videos/{Id}/stream", "GET")] + [Route("/Videos/{Id}/stream.ts", "HEAD")] + [Route("/Videos/{Id}/stream.webm", "HEAD")] + [Route("/Videos/{Id}/stream.asf", "HEAD")] + [Route("/Videos/{Id}/stream.wmv", "HEAD")] + [Route("/Videos/{Id}/stream.ogv", "HEAD")] + [Route("/Videos/{Id}/stream.mp4", "HEAD")] + [Route("/Videos/{Id}/stream.m4v", "HEAD")] + [Route("/Videos/{Id}/stream.mkv", "HEAD")] + [Route("/Videos/{Id}/stream.mpeg", "HEAD")] + [Route("/Videos/{Id}/stream.avi", "HEAD")] + [Route("/Videos/{Id}/stream.m2ts", "HEAD")] + [Route("/Videos/{Id}/stream", "HEAD")] [ServiceStack.ServiceHost.Api(Description = "Gets a video stream")] public class GetVideoStream : VideoStreamRequest { @@ -46,9 +58,14 @@ namespace MediaBrowser.Api.Playback.Progressive /// <returns>System.Object.</returns> public object Get(GetVideoStream request) { - return ProcessRequest(request); + return ProcessRequest(request, false); } + public object Head(GetVideoStream request) + { + return ProcessRequest(request, true); + } + /// <summary> /// Gets the command line arguments. /// </summary> |
