aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/Hls/HlsSegmentResponseFilter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Playback/Hls/HlsSegmentResponseFilter.cs')
-rw-r--r--MediaBrowser.Api/Playback/Hls/HlsSegmentResponseFilter.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/HlsSegmentResponseFilter.cs b/MediaBrowser.Api/Playback/Hls/HlsSegmentResponseFilter.cs
new file mode 100644
index 000000000..44996c99f
--- /dev/null
+++ b/MediaBrowser.Api/Playback/Hls/HlsSegmentResponseFilter.cs
@@ -0,0 +1,53 @@
+using MediaBrowser.Controller;
+using MediaBrowser.Model.Logging;
+using ServiceStack.ServiceHost;
+using ServiceStack.Text.Controller;
+using System;
+using System.IO;
+using System.Linq;
+
+namespace MediaBrowser.Api.Playback.Hls
+{
+ public class HlsSegmentResponseFilter : Attribute, IHasResponseFilter
+ {
+ public ILogger Logger { get; set; }
+ public IServerApplicationPaths ApplicationPaths { get; set; }
+
+ public void ResponseFilter(IHttpRequest req, IHttpResponse res, object response)
+ {
+ var pathInfo = PathInfo.Parse(req.PathInfo);
+ var itemId = pathInfo.GetArgumentValue<string>(1);
+ var playlistId = pathInfo.GetArgumentValue<string>(3);
+
+ OnEndRequest(itemId, playlistId);
+ }
+
+ public IHasResponseFilter Copy()
+ {
+ return this;
+ }
+
+ public int Priority
+ {
+ get { return -1; }
+ }
+
+ /// <summary>
+ /// Called when [end request].
+ /// </summary>
+ /// <param name="itemId">The item id.</param>
+ /// <param name="playlistId">The playlist id.</param>
+ protected void OnEndRequest(string itemId, string playlistId)
+ {
+ Logger.Info("OnEndRequest " + playlistId);
+ var normalizedPlaylistId = playlistId.Replace("-low", string.Empty);
+
+ foreach (var playlist in Directory.EnumerateFiles(ApplicationPaths.EncodedMediaCachePath, "*.m3u8")
+ .Where(i => i.IndexOf(normalizedPlaylistId, StringComparison.OrdinalIgnoreCase) != -1)
+ .ToList())
+ {
+ ApiEntryPoint.Instance.OnTranscodeEndRequest(playlist, TranscodingJobType.Hls);
+ }
+ }
+ }
+}