Upload thumbnails to S3

This commit is contained in:
2023-08-01 23:08:57 +01:00
parent 99ad1dc439
commit d2b56c14f9
20 changed files with 482 additions and 110 deletions

View File

@ -0,0 +1,59 @@
using Microsoft.EntityFrameworkCore;
using NostrStreamer.Database;
using NostrStreamer.Services.StreamManager;
namespace NostrStreamer.Services.Background;
public class BackgroundStreamManager : BackgroundService
{
private readonly ILogger<BackgroundStreamManager> _logger;
private readonly IServiceScopeFactory _scopeFactory;
public BackgroundStreamManager(ILogger<BackgroundStreamManager> logger, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
using var scope = _scopeFactory.CreateScope();
var streamManager = scope.ServiceProvider.GetRequiredService<StreamManagerFactory>();
var db = scope.ServiceProvider.GetRequiredService<StreamerContext>();
var srs = scope.ServiceProvider.GetRequiredService<SrsApi>();
var recentlyEnded = DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(5));
var liveStreams = await db.Streams
.AsNoTracking()
.Where(a => a.State == UserStreamState.Live || a.Ends > recentlyEnded)
.Select(a => a.Id)
.ToListAsync(cancellationToken: stoppingToken);
foreach (var id in liveStreams)
{
var manager = await streamManager.ForStream(id);
var client = await srs.GetStream(manager.GetStream().StreamId);
if (client != default)
{
await manager.UpdateViewers();
}
else
{
await manager.StreamStopped();
}
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to run");
}
await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
}
}
}