aboutsummaryrefslogtreecommitdiff
path: root/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs')
-rw-r--r--src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs b/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs
new file mode 100644
index 000000000..8ed4edcea
--- /dev/null
+++ b/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs
@@ -0,0 +1,36 @@
+using System;
+using Jellyfin.MediaEncoding.Hls.Cache;
+using Jellyfin.MediaEncoding.Hls.Extractors;
+using Jellyfin.MediaEncoding.Hls.Playlist;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Jellyfin.MediaEncoding.Hls.Extensions;
+
+/// <summary>
+/// Extensions for the <see cref="IServiceCollection"/> interface.
+/// </summary>
+public static class MediaEncodingHlsServiceCollectionExtensions
+{
+ /// <summary>
+ /// Adds the hls playlist generators to the <see cref="IServiceCollection"/>.
+ /// </summary>
+ /// <param name="serviceCollection">An instance of the <see cref="IServiceCollection"/> interface.</param>
+ /// <returns>The updated service collection.</returns>
+ public static IServiceCollection AddHlsPlaylistGenerator(this IServiceCollection serviceCollection)
+ {
+ serviceCollection.AddSingletonWithDecorator(typeof(FfProbeKeyframeExtractor));
+ serviceCollection.AddSingletonWithDecorator(typeof(MatroskaKeyframeExtractor));
+ serviceCollection.AddSingleton<IDynamicHlsPlaylistGenerator, DynamicHlsPlaylistGenerator>();
+ return serviceCollection;
+ }
+
+ private static void AddSingletonWithDecorator(this IServiceCollection serviceCollection, Type type)
+ {
+ serviceCollection.AddSingleton<IKeyframeExtractor>(serviceProvider =>
+ {
+ var extractor = ActivatorUtilities.CreateInstance(serviceProvider, type);
+ var decorator = ActivatorUtilities.CreateInstance<CacheDecorator>(serviceProvider, extractor);
+ return decorator;
+ });
+ }
+}