新增 Mjpegplayer 用来播放 Web 流
This commit is contained in:
107
SHH.MjpegPlayer/Program.cs
Normal file
107
SHH.MjpegPlayer/Program.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user