新增 系统配置项[处理任务 下载速度...]

This commit is contained in:
小肥羊 2025-04-03 18:30:24 +08:00
parent 6b9fc167ee
commit 972fba9959
16 changed files with 374 additions and 198 deletions

View File

@ -19,6 +19,24 @@
"ffmpeg.exe"
],
"WindowsBackUpIgnoreList": []
},
{
"Name": "阿里云_代理",
"ServerList": [],
"LinuxServerList": [
{
"UserName": "heyang",
"Pwd": "AAC53130AF118B652BCED77C39B959F9",
"Host": "10.127.127.77:10022",
"NickName": "",
"IIsFireUrl": null,
"DockerFireUrl": "",
"WindowsServiceFireUrl": null,
"LinuxServiceFireUrl": null
}
],
"IgnoreList": [],
"WindowsBackUpIgnoreList": []
}
],
"IIsConfig": {
@ -34,6 +52,15 @@
"DockerEnvName": null,
"DockerVolume": null,
"DockerOther": null
},
{
"EnvName": "阿里云_代理",
"ConfigName": "",
"LinuxEnvParam": null,
"DockerPort": null,
"DockerEnvName": null,
"DockerVolume": null,
"DockerOther": null
}
]
},
@ -50,6 +77,15 @@
"DockerEnvName": null,
"DockerVolume": null,
"DockerOther": null
},
{
"EnvName": "阿里云_代理",
"ConfigName": "",
"LinuxEnvParam": null,
"DockerPort": null,
"DockerEnvName": null,
"DockerVolume": null,
"DockerOther": null
}
]
},
@ -66,17 +102,26 @@
"DockerEnvName": null,
"DockerVolume": null,
"DockerOther": null
},
{
"EnvName": "阿里云_代理",
"ConfigName": "",
"LinuxEnvParam": null,
"DockerPort": null,
"DockerEnvName": null,
"DockerVolume": null,
"DockerOther": null
}
]
},
"DockerConfig": {
"Prot": "9040",
"AspNetCoreEnv": "",
"LastEnvName": "10楼刀片机",
"LastEnvName": "阿里云_代理",
"RemoveDaysFromPublished": "10",
"WorkDir": "/home/hy/",
"WorkDir": "/home/heyang/",
"Volume": "/home/hy/VideoAnalysis/AICore:/app/AICore/_Static;/home/hy/VideoAnalysis/TaskCachedFile:/app/TaskCachedFile",
"Other": "",
"Other": "-e va_args=\"NoTask\" --name videoanalysis",
"EnvPairList": [
{
"EnvName": "10楼刀片机",
@ -85,7 +130,16 @@
"DockerPort": "9040",
"DockerEnvName": "",
"DockerVolume": "/home/hy/VideoAnalysis/AICore:/app/AICore/_Static;/home/hy/VideoAnalysis/TaskCachedFile:/app/TaskCachedFile",
"DockerOther": ""
"DockerOther": "-e va_args=\"NoTask1\""
},
{
"EnvName": "阿里云_代理",
"ConfigName": null,
"LinuxEnvParam": null,
"DockerPort": "9040",
"DockerEnvName": "",
"DockerVolume": "/home/hy/VideoAnalysis/AICore:/app/AICore/_Static;/home/hy/VideoAnalysis/TaskCachedFile:/app/TaskCachedFile",
"DockerOther": "-e va_args=\"NoTask\" --name videoanalysis"
}
]
},

View File

@ -172,6 +172,7 @@ namespace Learn.VideoAnalysis.Controllers
var hashEntries = task.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.ToDictionary(s => s.Name, s => s.GetValue(task));
await videoTaskDB.InsertAsync(task);
RedisExpand.Redis.HMSet(RedisExpandKey.Task(task.Id), hashEntries);
RedisExpand.Redis.LPush(RedisExpandKey.ChannelKey, task.Id);
return Ok(task.Id);

View File

@ -26,31 +26,43 @@ namespace Learn.VideoAnalysis.Controllers.Dto
/// 视频编码
/// </summary>
public string VideoCode { get; set; }
/// <summary>
/// 视频文件名称
/// </summary>
public string VideoName { get; set; }
/// <summary>
/// 内容类型
/// </summary>
public AttachmentsInfoType AttachmentsInfoType { get; set; }
}
public class NodePackageReq
{
/// <summary>
/// 媒体路径
/// 录播结构目录节点编号
/// </summary>
[Required(ErrorMessage = "文件节点ID是必填项")]
[Required(ErrorMessage = "目录节点编号是必填项")]
public long NodeId { get; set; }
/// <summary>
/// 科目类型
/// </summary>
[Required(ErrorMessage = "科目类型是必填项")]
public SubjectEnum SubjectType { get; set; }
/// <summary>
/// 任务类型
/// </summary>
public TaskTypeEnum? TaskType { get; set; }
/// <summary>
/// 学科类型
/// </summary>
public SubjectEnum? SubjectType { get; set; }
[Required(ErrorMessage = "任务类型是必填项")]
public TaskTypeEnum TaskType { get; set; }
/// <summary>
/// 视频列表
/// </summary>
[Required(ErrorMessage = "文件节点ID是必填项")]
[Required(ErrorMessage = "文件数量是必填项")]
public List<StructurePageContentAnalyzeItem> AnalyzeItems { get; set; }
}
/// <summary>
/// 视频处理 请求

View File

@ -79,8 +79,6 @@ namespace Learn.VideoAnalysis.Controllers
public async Task<IActionResult> NodePackage(NodePackageReq req)
{
Console.WriteLine($"{DateTime.Now} 文件包订阅请求 req=" + JsonSerializer.Serialize(req));
if (req is null || req.NodeId == 0)
return BadRequest("无效的提交数据");
if (req.AnalyzeItems is null || req.AnalyzeItems.Count() == 0)
return BadRequest("无效视频列表数据");
var videos = new List<VideoTask>(req.AnalyzeItems.Count);
@ -90,10 +88,14 @@ namespace Learn.VideoAnalysis.Controllers
{
var np = new NodePackageInfo()
{
MaterialId = s.MaterialId,
VideoCode = s.VideoCode,
NodeId = req.NodeId,
AttachmentsInfoType = s.AttachmentsInfoType,
MaterialId = s.MaterialId,
StructurePageContentId = s.StructurePageContentId,
VideoName = s.VideoName,
NodeId = req.NodeId,
TaskType = req.TaskType,
SubjectType = req.SubjectType,
};
nodePackages.Add(np);
if (videoIdArr.Contains(s.VideoCode))
@ -105,7 +107,6 @@ namespace Learn.VideoAnalysis.Controllers
ApiToken = "",
Type = req.TaskType,
Subject = req.SubjectType,
Tag = req.NodeId.ToString(),
TagId = s.VideoCode,
MediaUrl =string.Empty,
MediaName = s.VideoName

View File

@ -14,8 +14,9 @@ COPY sources.list /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y ffmpeg
# 给我们要传的参数一个初始值
ENV va_args=
ENV ASPNETCORE_URLS=http://+:9040
ENTRYPOINT ["dotnet", "Learn.VideoAnalysis.dll"]
ENTRYPOINT dotnet Learn.VideoAnalysis.dll $va_args

View File

@ -0,0 +1,28 @@
using Coravel;
using System.Collections.Generic;
using VideoAnalysisCore.Common;
using VideoAnalysisCore.Job;
namespace Learn.VideoAnalysis.Expand
{
public static class AppConfigExpand
{
public static void AddAppConfig(this ConfigurationManager cm, string[] args)
{
Console.WriteLine($"{DateTime.Now}=>初始化 AppConfig");
cm.GetSection("AppConfig").Bind(AppCommon.Config);
var argList= args.ToList();
var eArgs = Environment.GetEnvironmentVariable("va_args");
if (!string.IsNullOrEmpty(eArgs))
argList.AddRange(eArgs.Split(","));
Console.WriteLine("===========================================");
Console.WriteLine("启动参数如下:");
Console.WriteLine(string.Join(',', args));
Console.WriteLine("===========================================");
if (args.Contains("NoTask"))
AppCommon.Config.TaskSetting.ProcessingTasks = false;
}
}
}

View File

@ -21,7 +21,6 @@ namespace Learn.VideoAnalysis
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
@ -52,11 +51,12 @@ namespace Learn.VideoAnalysis
});
//°ó¶¨ appsetting ÅäÖÃ
builder.Configuration.GetSection("AppConfig").Bind(AppCommon.Config);
//³õʼ»¯ ²å¼þ
builder.Configuration.AddAppConfig(args);
builder.Services.AddSqlSugarExpand();
builder.Services.AddDownloadFileExpand(2);
builder.Services.AddDownloadFileExpand();
builder.Services.AddAlibabaCloudVod();
builder.Services.AddRedisExpand();
builder.Services.AddSpeakerAI();

View File

@ -6,6 +6,10 @@
}
},
"AppConfig": {
"TaskSetting": {
"DownloadSpeed": 8,
"ProcessingTasks": true //?
},
"Subsystem": {
"蓝鲸智库": {
"APIUrl": "https://zyapi.23544.com",

View File

@ -8,6 +8,10 @@
"AllowedHosts": "*",
"AppConfig": {
"ID": 1, //
"TaskSetting": {
"DownloadSpeed": 2,
"ProcessingTasks": true,//?
},
"Admin": {
"Account": "admin",
"Password": "q1w2e3!@#"

View File

@ -319,167 +319,4 @@ namespace VideoAnalysisCore.Common
}
/// <summary>
/// ffmpeg配置
/// </summary>
public class GptConfig
{
/// <summary>
/// 请求 公开的服务地址
/// </summary>
public string Host { get; set; } = string.Empty;
/// <summary>
/// api的密钥
/// </summary>
public string ApiKey { get; set; } = string.Empty;
}
/// <summary>
/// 文本模型 配置
/// </summary>
public class ChatGptConfig
{
/// <summary>
/// KIMI
/// <para></para>
/// </summary>
public GptConfig ChatGpt { get; set; } = new GptConfig();
public GptConfig DeepSeek { get; set; } = new GptConfig();
public GptConfig KIMI { get; set; } = new GptConfig();
public GptConfig aliyun { get; set; } = new GptConfig();
}
/// <summary>
/// ffmpeg配置
/// </summary>
public class FFmpegConfig
{
/// <summary>
/// 音频切片时间段
/// <para>0不切片</para>
/// </summary>
public int TimeSlice { get; set; } = 0;
}
/// <summary>
/// Whisper配置
/// </summary>
public class WhisperConfig
{
/// <summary>
/// 模型名称
/// </summary>
public string ModelName { get; set; } = string.Empty;
}
/// <summary>
/// 管理界面Admin账号
/// </summary>
public class AdminConfig
{
/// <summary>
/// 账号
/// </summary>
public string Account { get; set; } = string.Empty;
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; } = string.Empty;
}
/// <summary>
/// redis配置
/// </summary>
public class RedisConfig
{
/// <summary>
/// redis连接字符串
/// </summary>
public string ConnectionString { get; set; } = string.Empty;
}
public class DBConfig
{
/// <summary>
/// 主库链接
/// </summary>
public string ConnectionString { get; set; }=string.Empty;
/// <summary>
/// 数据库类型
/// </summary>
public IocDbType SqlType { get; set; }
/// <summary>
/// 启动时更新表结构
/// </summary>
public bool UpdateTable { get; set; }
/// <summary>
/// 配置ID
/// </summary>
public long ConfigId { get; set; }
}
/// <summary>
/// 子系统配置
/// </summary>
public class SubsystemInfo
{
public string APIUrl { get; set; } = string.Empty;
public string Token { get; set; } = string.Empty;
}
/// <summary>
/// 子系统配置
/// </summary>
public class SubsystemConfig
{
public SubsystemInfo { get; set; } = new SubsystemInfo();
}
/// <summary>
/// 应用程序配置
/// </summary>
public class AppConfig
{
/// <summary>
/// 程序ID
/// </summary>
public string ID { get; set; } = string.Empty;
/// <summary>
/// Admin
/// </summary>
public AdminConfig Admin { get; set; } = new AdminConfig();
/// <summary>
/// 子系统
/// </summary>
public SubsystemConfig Subsystem { get; set; } = new SubsystemConfig();
/// <summary>
/// redis
/// </summary>
public RedisConfig Redis { get; set; } = new RedisConfig();
/// <summary>
/// Whisper AI
/// </summary>
public WhisperConfig Whisper { get; set; } = new WhisperConfig();
/// <summary>
/// FFmpeg
/// </summary>
public FFmpegConfig FFmpeg { get; set; } = new FFmpegConfig();
/// <summary>
/// ChatGpt
/// </summary>
public ChatGptConfig ChatGpt { get; set; } = new ChatGptConfig();
/// <summary>
/// 阿里云视频点播配置
/// </summary>
public AlibabaCloudVodConfig AlibabaCloudVod { get; set; } = new AlibabaCloudVodConfig();
/// <summary>
/// 数据库配置
/// </summary>
public DBConfig DB { get; set; } = new DBConfig();
/// <summary>
/// 其他数据库配置
/// </summary>
public DBConfig[] OtherDBArr { get; set; } = Array.Empty<DBConfig>();
}
}

View File

@ -0,0 +1,190 @@
using SqlSugar.IOC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VideoAnalysisCore.Common
{
/// <summary>
/// 应用程序配置
/// </summary>
public class AppConfig
{
/// <summary>
/// 程序ID
/// </summary>
public string ID { get; set; } = string.Empty;
/// <summary>
/// Admin
/// </summary>
public AdminConfig Admin { get; set; } = new AdminConfig();
/// <summary>
/// 子系统
/// </summary>
public SubsystemConfig Subsystem { get; set; } = new SubsystemConfig();
/// <summary>
/// redis
/// </summary>
public RedisConfig Redis { get; set; } = new RedisConfig();
/// <summary>
/// Whisper AI
/// </summary>
public WhisperConfig Whisper { get; set; } = new WhisperConfig();
/// <summary>
/// FFmpeg
/// </summary>
public FFmpegConfig FFmpeg { get; set; } = new FFmpegConfig();
/// <summary>
/// ChatGpt
/// </summary>
public ChatGptConfig ChatGpt { get; set; } = new ChatGptConfig();
/// <summary>
/// 阿里云视频点播配置
/// </summary>
public AlibabaCloudVodConfig AlibabaCloudVod { get; set; } = new AlibabaCloudVodConfig();
/// <summary>
/// 数据库配置
/// </summary>
public DBConfig DB { get; set; } = new DBConfig();
/// <summary>
/// 其他数据库配置
/// </summary>
public DBConfig[] OtherDBArr { get; set; } = Array.Empty<DBConfig>();
/// <summary>
/// 系统接收任务设置配置
/// </summary>
public TaskSettingConfig TaskSetting { get; set; } = new TaskSettingConfig();
}
public class TaskSettingConfig
{
/// <summary>
/// 下载速度MB/S
/// </summary>
public int DownloadSpeed { get; set; }
/// <summary>
/// 是否接收任务
/// </summary>
public bool ProcessingTasks { get; set; }
}
/// <summary>
/// ffmpeg配置
/// </summary>
public class GptConfig
{
/// <summary>
/// 请求 公开的服务地址
/// </summary>
public string Host { get; set; } = string.Empty;
/// <summary>
/// api的密钥
/// </summary>
public string ApiKey { get; set; } = string.Empty;
}
/// <summary>
/// 文本模型 配置
/// </summary>
public class ChatGptConfig
{
/// <summary>
/// KIMI
/// <para></para>
/// </summary>
public GptConfig ChatGpt { get; set; } = new GptConfig();
public GptConfig DeepSeek { get; set; } = new GptConfig();
public GptConfig KIMI { get; set; } = new GptConfig();
public GptConfig aliyun { get; set; } = new GptConfig();
}
/// <summary>
/// ffmpeg配置
/// </summary>
public class FFmpegConfig
{
/// <summary>
/// 音频切片时间段
/// <para>0不切片</para>
/// </summary>
public int TimeSlice { get; set; } = 0;
}
/// <summary>
/// Whisper配置
/// </summary>
public class WhisperConfig
{
/// <summary>
/// 模型名称
/// </summary>
public string ModelName { get; set; } = string.Empty;
}
/// <summary>
/// 管理界面Admin账号
/// </summary>
public class AdminConfig
{
/// <summary>
/// 账号
/// </summary>
public string Account { get; set; } = string.Empty;
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; } = string.Empty;
}
/// <summary>
/// redis配置
/// </summary>
public class RedisConfig
{
/// <summary>
/// redis连接字符串
/// </summary>
public string ConnectionString { get; set; } = string.Empty;
}
public class DBConfig
{
/// <summary>
/// 主库链接
/// </summary>
public string ConnectionString { get; set; } = string.Empty;
/// <summary>
/// 数据库类型
/// </summary>
public IocDbType SqlType { get; set; }
/// <summary>
/// 启动时更新表结构
/// </summary>
public bool UpdateTable { get; set; }
/// <summary>
/// 配置ID
/// </summary>
public long ConfigId { get; set; }
}
/// <summary>
/// 子系统配置
/// </summary>
public class SubsystemInfo
{
public string APIUrl { get; set; } = string.Empty;
public string Token { get; set; } = string.Empty;
}
/// <summary>
/// 子系统配置
/// </summary>
public class SubsystemConfig
{
public SubsystemInfo { get; set; } = new SubsystemInfo();
}
}

View File

@ -21,10 +21,10 @@ namespace VideoAnalysisCore.Common
/// <summary>
/// 初始化下载器
/// </summary>
/// <param name="DownloadSpeed">下载速度mb/s 默认8</param>
public static void AddDownloadFileExpand(this IServiceCollection services, int DownloadSpeed)
/// <param name="DownloadSpeed">下载速度mb/s </param>
public static void AddDownloadFileExpand(this IServiceCollection services)
{
DownloadFile.DownloadSpeed = DownloadSpeed;
DownloadFile.DownloadSpeed = AppCommon.Config.TaskSetting.DownloadSpeed;
services.AddTransient<DownloadFile>();
DownloadFile.Opt = new DownloadConfiguration()
@ -34,7 +34,7 @@ namespace VideoAnalysisCore.Common
// 要下载的文件部分数量默认值是1
ChunkCount = 8,
// 下载速度限制为2MB/秒,默认值为零(即无限制)
MaximumBytesPerSecond = 1024 * 1024 * DownloadSpeed,
MaximumBytesPerSecond = 1024 * 1024 * DownloadFile.DownloadSpeed,
// 故障转移时的最大重试次数
MaxTryAgainOnFailover = 5,
// 每50MB后释放内存缓冲区

View File

@ -276,6 +276,8 @@ namespace VideoAnalysisCore.Common
/// </summary>
public static async Task ReceivingTaskAsync()
{
if (!AppCommon.Config.TaskSetting.ProcessingTasks)//是否接收任务
return;
var oldTask = await Redis.GetAsync(RedisExpandKey.IDTask);
if (!string.IsNullOrEmpty(oldTask))
{

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VideoAnalysisCore.Model.Enum
{
public enum AttachmentsInfoType
{
[Description("默认")]
None = 0,
[Description("常规课程")]
RegularClasses = 1,
[Description("教研")]
TeachingResearch = 2,
[Description("PPT")]
PPT = 3,
[Description("复习")]
Review = 4,
[Description("活动")]
Activities = 5,
[Description("班会")]
Meeting = 6,
}
}

View File

@ -25,27 +25,43 @@ namespace VideoAnalysisCore.Model
[DisplayName("编号")]
public long Id { get; set; }
/// <summary>
/// 文件节点Id
/// </summary>
[DisplayName("文件节点Id"), Required]
public long NodeId { get; set; }
/// <summary>
/// 文件节点存储ID
/// </summary>
[DisplayName("文件节点存储ID"), Required]
[SugarColumn(Length = 32)]
public string VideoCode { get; set; }
/// <summary>
/// 视频文件名称
/// </summary>
[SugarColumn(Length = 32)]
public string VideoName { get; set; }
/// <summary>
/// 录播结构目录节点编号
/// </summary>
public long NodeId { get; set; }
/// <summary>
/// 录播内容编号
/// </summary>
public long StructurePageContentId { get; set; }
/// <summary>
/// 素材ID
/// </summary>
public long MaterialId { get; set; }
/// <summary>
/// 内容类型
/// </summary>
public AttachmentsInfoType AttachmentsInfoType { get; set; }
/// <summary>
/// 科目类型
/// </summary>
public SubjectEnum SubjectType { get; set; }
/// <summary>
/// 任务类型
/// </summary>
public TaskTypeEnum TaskType { get; set; }
/// <summary>
/// 完成时间
/// </summary>
[SugarColumn(IsNullable = true)]
@ -56,6 +72,5 @@ namespace VideoAnalysisCore.Model
/// </summary>
[DisplayName("创建时间")]
public DateTime CreateTime { get; set; } =DateTime.Now;
}
}

View File

@ -69,7 +69,7 @@
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="1.10.32" />
<PackageReference Include="SqlSugar.IOC" Version="2.0.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.170" />
<PackageReference Include="UserCenter.Model" Version="1.3.4" />
<PackageReference Include="UserCenter.Model" Version="1.3.5" />
<PackageReference Include="Whisper.net" Version="1.5.0" />
<PackageReference Include="Whisper.net.Runtime" Version="1.5.0" />
<PackageReference Include="xFFmpeg.NET" Version="6.0.0" />