视频SDK新协议签入

This commit is contained in:
2026-01-15 09:31:57 +08:00
parent 3f8e42e560
commit 81580a8f55
14 changed files with 844 additions and 472 deletions

View File

@@ -99,11 +99,12 @@ namespace SHH.CameraDashboard
Id = "CameraService", // 内部标识
DisplayName = "视频接入服务", // UI显示名称
// 请确保路径正确,建议用相对路径 AppDomain.CurrentDomain.BaseDirectory + "SHH.CameraService.exe"
ExePath = @"E:\Codes2026\Ayay\SHH.CameraService\bin\Debug\net8.0\SHH.CameraService.exe",
ExePath = @"D:\Codes\Codes2026\Ayay\SHH.CameraService\bin\Debug\net8.0\SHH.CameraService.exe",
Arguments = serviceArgs, // ★★★ 核心:注入参数 ★★★
StartupOrder = 1, // 优先级
RestartDelayMs = 2000, // 崩溃后2秒重启
Visible = false // 不显示黑框
Visible = true, // 不显示黑框
EnableLogRedirect = false,
});
// =========================================================

View File

@@ -0,0 +1,74 @@
using Microsoft.AspNetCore.SignalR;
using SHH.Contracts;
using System.Collections.Concurrent;
namespace SHH.CameraDashboard
{
/// <summary>
/// [SignalR 中心]
/// 职责:负责物理链路的维护,将网络消息路由到业务层 (CommandServer)
/// </summary>
public class CameraHub : Hub
{
// 静态映射表InstanceId -> ConnectionId (用于定向发指令)
private static readonly ConcurrentDictionary<string, string> _instanceMapping = new();
// =================================================================
// 1. 注册逻辑 (替代原 CommandServer.HandleRegistration)
// =================================================================
/// <summary>
/// 供 CameraService 调用
/// </summary>
public async Task Register(RegisterPayload payload)
{
string connectionId = Context.ConnectionId;
// 1. 记录映射关系
_instanceMapping[payload.InstanceId] = connectionId;
// 2. 将连接加入组 (按 InstanceId 组队,方便 CommandServer 发指令)
await Groups.AddToGroupAsync(connectionId, payload.InstanceId);
// 3. 回调业务单例处理 UI 逻辑
CommandServer.Instance.HandleClientRegister(payload);
Console.WriteLine($"[Hub] 收到注册: {payload.InstanceId}, 连接ID: {connectionId}");
}
// =================================================================
// 2. 指令回执
// =================================================================
/// <summary>
/// 供 CameraService 执行完指令后调用
/// </summary>
public void ReportCommandResult(CommandResult result)
{
CommandServer.Instance.HandleCommandResult(result);
}
// =================================================================
// 3. 视频流中转
// =================================================================
/// <summary>
/// 供 CameraService 上传图片
/// </summary>
public async Task UploadFrame(VideoPayload payload)
{
// 转发给订阅了该摄像头的组 (例如 Dashboard UI 订阅了该组)
await Clients.Group($"Watch_{payload.CameraId}").SendAsync("OnFrameRecv", payload);
}
// =================================================================
// 生命周期管理
// =================================================================
public override async Task OnDisconnectedAsync(Exception? exception)
{
// 清理映射逻辑可以在这里扩展
await base.OnDisconnectedAsync(exception);
}
}
}

View File

@@ -17,6 +17,7 @@
<ItemGroup>
<Compile Remove="App\WizardControl.xaml.cs" />
<Compile Remove="Invokes\CameraHub.cs" />
</ItemGroup>
<ItemGroup>
@@ -33,7 +34,6 @@
<ItemGroup>
<ProjectReference Include="..\SHH.Contracts\SHH.Contracts.csproj" />
<ProjectReference Include="..\SHH.NetMQ\SHH.NetMQ.csproj" />
<ProjectReference Include="..\SHH.ProcessLaunchers\SHH.ProcessLaunchers.csproj" />
</ItemGroup>