more consolidation
This commit is contained in:
@@ -52,6 +52,29 @@ public class StreamProxyController : ControllerBase
|
||||
Response.Headers["Access-Control-Max-Age"] = "86400"; // Cache preflight for 24 hours
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds Cache-Control headers appropriate for the stream type.
|
||||
/// Livestreams need frequent manifest refresh, VOD can be cached longer.
|
||||
/// </summary>
|
||||
/// <param name="itemId">The item ID to check.</param>
|
||||
private void AddManifestCacheHeaders(string itemId)
|
||||
{
|
||||
var metadata = _proxyService.GetStreamMetadata(itemId);
|
||||
var isLiveStream = metadata?.IsLiveStream ?? false;
|
||||
|
||||
if (isLiveStream)
|
||||
{
|
||||
// Livestreams need frequent manifest refresh (segments rotate every ~6-10s)
|
||||
Response.Headers["Cache-Control"] = "max-age=2, must-revalidate";
|
||||
_logger.LogDebug("Setting livestream cache headers for {ItemId}", itemId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// VOD manifests are static, can cache longer
|
||||
Response.Headers["Cache-Control"] = "max-age=3600";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles CORS preflight OPTIONS requests for all proxy endpoints.
|
||||
/// </summary>
|
||||
@@ -120,6 +143,9 @@ public class StreamProxyController : ControllerBase
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
// Set cache headers based on stream type (live vs VOD)
|
||||
AddManifestCacheHeaders(actualItemId);
|
||||
|
||||
_logger.LogDebug("Returning master manifest for item {ItemId} ({Length} bytes)", itemId, manifestContent.Length);
|
||||
return Content(manifestContent, "application/vnd.apple.mpegurl");
|
||||
}
|
||||
@@ -170,6 +196,9 @@ public class StreamProxyController : ControllerBase
|
||||
var baseProxyUrl = $"{scheme}://{Request.Host}/Plugins/SRFPlay/Proxy/{itemId}";
|
||||
var rewrittenContent = RewriteSegmentUrls(manifestContent, baseProxyUrl);
|
||||
|
||||
// Set cache headers based on stream type (live vs VOD)
|
||||
AddManifestCacheHeaders(actualItemId);
|
||||
|
||||
_logger.LogDebug("Returning variant manifest for item {ItemId} ({Length} bytes)", itemId, rewrittenContent.Length);
|
||||
return Content(rewrittenContent, "application/vnd.apple.mpegurl");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user