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.cs39
1 files changed, 27 insertions, 12 deletions
diff --git a/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs b/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs
index 327898366..8ed4edcea 100644
--- a/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs
+++ b/src/Jellyfin.MediaEncoding.Hls/Extensions/MediaEncodingHlsServiceCollectionExtensions.cs
@@ -1,21 +1,36 @@
-using Jellyfin.MediaEncoding.Hls.Playlist;
+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
+namespace Jellyfin.MediaEncoding.Hls.Extensions;
+
+/// <summary>
+/// Extensions for the <see cref="IServiceCollection"/> interface.
+/// </summary>
+public static class MediaEncodingHlsServiceCollectionExtensions
{
/// <summary>
- /// Extensions for the <see cref="IServiceCollection"/> interface.
+ /// Adds the hls playlist generators to the <see cref="IServiceCollection"/>.
/// </summary>
- public static class MediaEncodingHlsServiceCollectionExtensions
+ /// <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)
{
- /// <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.AddSingleton<IKeyframeExtractor>(serviceProvider =>
{
- return serviceCollection.AddSingleton<IDynamicHlsPlaylistGenerator, DynamicHlsPlaylistGenerator>();
- }
+ var extractor = ActivatorUtilities.CreateInstance(serviceProvider, type);
+ var decorator = ActivatorUtilities.CreateInstance<CacheDecorator>(serviceProvider, extractor);
+ return decorator;
+ });
}
}