using VideoAnalysisCore.Common; using Learn.VideoAnalysis.Controllers.Dto; using Microsoft.AspNetCore.Mvc; using System.Reflection; using VideoAnalysisCore.Enum; using VideoAnalysisCore.Model; using VideoAnalysisCore.AICore.FFMPGE; namespace Learn.VideoAnalysis.Controllers { [ApiController] [Route("[controller]/[action]")] public class ApiController : ControllerBase { private readonly ILogger _logger; public ApiController(ILogger logger) { _logger = logger; } /// /// 音频转换wav_16k /// /// 文件路径 /// [HttpGet(Name = "Audio2WAV16K")] public async Task Audio2WAV16K(string filePath) { await FFMPGEHandle.Audio2WAV16KAsync(filePath); return Ok(); } private string GetClientIpAddress() { // 检查 X-Forwarded-For 请求头 if (HttpContext.Request.Headers.ContainsKey("X-Forwarded-For") && !string.IsNullOrEmpty(HttpContext.Request.Headers["X-Forwarded-For"])) return HttpContext.Request.Headers["X-Forwarded-For"].ToString(); if (HttpContext.Connection.RemoteIpAddress != null) return HttpContext.Connection.RemoteIpAddress.ToString(); throw new Exception("未能获取到客户端ip地址"); } /// /// 测试 插入队列 /// /// /// /// [HttpPost(Name = "TestInsertChannel")] public IActionResult TestInsertChannel(int @enum=1, string msg= "test_0001") { RedisExpand.InsertChannel(@enum.ToEnum().Value , msg); return Ok(); } /// /// 视频处理 /// /// 请求体 /// [HttpPost(Name = "VideoAnalysis")] public IActionResult VideoAnalysis(VideoAnalysisReq req) { if (!ModelState.IsValid) return BadRequest(ModelState); // 自动映射属性到哈希 var task = new VideoTask() { ComeFrom = GetClientIpAddress(), MediaUrl = req.MediaUrl, ApiToken = req.ApiToken, Tag = req.Tag, CallBackUrl = req.CallBackUrl, }; var hashEntries = task.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .ToDictionary(s => s.Name, s => s.GetValue(task)); RedisExpand.Redis.HMSet(RedisExpandKey.Task(task.Id), hashEntries); RedisExpand.InsertChannel(RedisChannelEnum.DownloadFile , task.Id); return Ok(); } } }