81 lines
3.0 KiB
C#
81 lines
3.0 KiB
C#
using FreeRedis;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using SqlSugar.IOC;
|
|
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using VideoAnalysisCore.AICore.FFMPGE;
|
|
using VideoAnalysisCore.Common.Expand;
|
|
using VideoAnalysisCore.Model;
|
|
using VideoAnalysisCore.Model.Enum;
|
|
|
|
namespace VideoAnalysisCore.Common
|
|
{
|
|
public static class UploadWorkflowExpand
|
|
{
|
|
public static void AddUploadWorkflow(this IServiceCollection services)
|
|
{
|
|
// 只有在配置启用时才注册
|
|
if (AppCommon.Config.Workflow.Upload.Enabled)
|
|
{
|
|
Console.WriteLine($"{DateTime.Now}=>初始化 视频合并工作流");
|
|
services.AddUploadExpand(); // Register UploadHandle
|
|
services.AddSingleton<UploadWorkflowManager>();
|
|
services.AddSingleton<UploadWorkflowInit>();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class UploadWorkflowInit
|
|
{
|
|
private readonly UploadWorkflowManager _manager;
|
|
private readonly IServiceProvider _serviceProvider;
|
|
|
|
public UploadWorkflowInit(UploadWorkflowManager manager, IServiceProvider serviceProvider)
|
|
{
|
|
_manager = manager;
|
|
_serviceProvider = serviceProvider;
|
|
Init();
|
|
_manager.InitChannel();
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
var SubscribeList = _manager.SubscribeList;
|
|
SubscribeList.Add(RedisUploadChannelEnum.排队中, async (task) => await Task.CompletedTask);
|
|
SubscribeList.Add(RedisUploadChannelEnum.下载文件, async (task) =>
|
|
{
|
|
using var scope = _serviceProvider.CreateScope();
|
|
var downloadService = scope.ServiceProvider.GetRequiredService<DownloadFile>();
|
|
await downloadService.RunTask(task);
|
|
});
|
|
SubscribeList.Add(RedisUploadChannelEnum.合并切片, async (task) =>
|
|
{
|
|
using var scope = _serviceProvider.CreateScope();
|
|
var ffmpegService = scope.ServiceProvider.GetRequiredService<FFMPGEHandle>();
|
|
await ffmpegService.MergeAndSliceAsync(task);
|
|
});
|
|
SubscribeList.Add(RedisUploadChannelEnum.上传视频, async (task) =>
|
|
{
|
|
using var scope = _serviceProvider.CreateScope();
|
|
var uploadService = scope.ServiceProvider.GetRequiredService<UploadHandle>();
|
|
await uploadService.RunAsync(task);
|
|
});
|
|
SubscribeList.Add(RedisUploadChannelEnum.结束任务, _manager.RedisManager.TaskEnd);
|
|
}
|
|
}
|
|
|
|
public class UploadWorkflowManager : WorkflowBase<RedisUploadChannelEnum>
|
|
{
|
|
public UploadWorkflowManager(RedisClient redis, RedisManager redisManager) : base(redis, redisManager)
|
|
{
|
|
}
|
|
|
|
protected override string ChannelKey => RedisExpandKey.UploadChannelKey;
|
|
protected override int Concurrency => AppCommon.Config.Workflow.Upload.Concurrency;
|
|
}
|
|
}
|