43 lines
1.7 KiB
C#
43 lines
1.7 KiB
C#
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Jellyfin.Plugin.SRFPlay.Api.Models;
|
|
using Jellyfin.Plugin.SRFPlay.Configuration;
|
|
|
|
namespace Jellyfin.Plugin.SRFPlay.Services.Interfaces;
|
|
|
|
/// <summary>
|
|
/// Interface for resolving stream URLs from media composition resources.
|
|
/// </summary>
|
|
public interface IStreamUrlResolver
|
|
{
|
|
/// <summary>
|
|
/// Gets the best stream URL from a chapter based on quality preference.
|
|
/// </summary>
|
|
/// <param name="chapter">The chapter containing resources.</param>
|
|
/// <param name="qualityPreference">The quality preference.</param>
|
|
/// <returns>The stream URL, or null if no suitable stream found.</returns>
|
|
string? GetStreamUrl(Chapter chapter, QualityPreference qualityPreference);
|
|
|
|
/// <summary>
|
|
/// Checks if a chapter has non-DRM playable content.
|
|
/// </summary>
|
|
/// <param name="chapter">The chapter to check.</param>
|
|
/// <returns>True if playable content is available.</returns>
|
|
bool HasPlayableContent(Chapter chapter);
|
|
|
|
/// <summary>
|
|
/// Checks if content is expired based on ValidTo date.
|
|
/// </summary>
|
|
/// <param name="chapter">The chapter to check.</param>
|
|
/// <returns>True if the content is expired.</returns>
|
|
bool IsContentExpired(Chapter chapter);
|
|
|
|
/// <summary>
|
|
/// Authenticates a stream URL by fetching an Akamai token.
|
|
/// </summary>
|
|
/// <param name="streamUrl">The unauthenticated stream URL.</param>
|
|
/// <param name="cancellationToken">Cancellation token.</param>
|
|
/// <returns>The authenticated stream URL with token.</returns>
|
|
Task<string> GetAuthenticatedStreamUrlAsync(string streamUrl, CancellationToken cancellationToken = default);
|
|
}
|