107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
using Ayay.SerilogLogs;
|
||
using Microsoft.AspNetCore.Builder;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using Serilog;
|
||
|
||
namespace SHH.MjpegPlayer
|
||
{
|
||
internal class Program
|
||
{
|
||
private static ILogger _sysLog = Log.ForContext("SourceContext", LogModules.Core);
|
||
|
||
static void Main(string[] args)
|
||
{
|
||
_sysLog.Information("MjpegPlayer 正在初始化...");
|
||
|
||
var builder = WebApplication.CreateBuilder(args);
|
||
|
||
// 1. 注册 gRpc 服务
|
||
builder.Services.AddGrpc(options => {
|
||
options.MaxReceiveMessageSize = 10 * 1024 * 1024; // 针对工业视频流,建议放宽至 10MB
|
||
});
|
||
|
||
// 2. 注册业务单例(如你之前的 Handler)
|
||
builder.Services.AddSingleton<DeviceConfigHandler>();
|
||
builder.Services.AddSingleton<DeviceStatusHandler>();
|
||
|
||
var app = builder.Build();
|
||
|
||
// 3. 映射服务路(将逻辑与端口绑定)
|
||
app.MapGrpcService<GatewayService>();
|
||
|
||
new Thread(StartServer).Start();
|
||
|
||
GrpcServerManager.Start();
|
||
|
||
// 4. 启动监听(代替 Console.ReadLine)
|
||
// 建议端口与 CameraService 配置的 9002 保持一致
|
||
_sysLog.Information("MjpegPlayer gRPC 服务启动于端口 9002");
|
||
app.Run("http://0.0.0.0:9002");
|
||
}
|
||
|
||
|
||
#region StartServer
|
||
|
||
/// <summary>
|
||
/// 开启服务监听
|
||
/// </summary>
|
||
static void StartServer()
|
||
{
|
||
try
|
||
{
|
||
// 加载配置文件
|
||
var cfg = Bootstrapper.LoadConfig();
|
||
|
||
// 检查 IP 与端口
|
||
Bootstrapper.ValidateEnvironment();
|
||
|
||
// 开启 Wcf 服务
|
||
StartWcfServer();
|
||
_sysLog.Information("WCF 推流接口已就绪, 端口: {Port}", cfg.WcfPushImagePort);
|
||
|
||
// 会话开启
|
||
// [修复] 端口循环逻辑:同样改为 <= 以匹配检测逻辑
|
||
for (var i = cfg.SvrMjpegPortBegin; i <= cfg.SvrMjpegPortEnd; i++)
|
||
{
|
||
MjpegServer.Start(i);
|
||
}
|
||
_sysLog.Information("MJPEG 服务池已开启: {Begin} -> {End}", cfg.SvrMjpegPortBegin, cfg.SvrMjpegPortEnd);
|
||
|
||
// 开启 RTMP 服务
|
||
RtmpPushServer.Instance.Start();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//Logs.LogCritical<Program>(ex.Message, ex.StackTrace);
|
||
// 退出应用
|
||
Bootstrapper.ExitApp("应用程序崩溃.");
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
|
||
#region StartWcfServer
|
||
|
||
/// <summary>
|
||
/// 开启 Wcf 服务
|
||
/// </summary>
|
||
private static void StartWcfServer()
|
||
{
|
||
try
|
||
{
|
||
var cfg = MjpegStatics.Cfg;
|
||
Bootstrapper.StartWcfEngine(cfg);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_sysLog.Fatal(ex, "应用程序崩溃.");
|
||
|
||
// 退出应用
|
||
Bootstrapper.ExitApp("应用程序崩溃.");
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
} |