using Ayay.SerilogLogs;
using Serilog;
namespace SHH.MjpegPlayer
{
///
/// RTMP 推流参数同步服务器
/// 职责:定期将本地图片通道信息同步至流媒体服务器,并获取最新的 RTMP 推流地址。
///
public class RtmpPushServer
{
private static ILogger _sysLog = Log.ForContext("SourceContext", LogModules.Core);
#region Instance
///
/// 获取 RTMP 推流处理器的全局单例实例
///
public static RtmpPushServer Instance { get; } = new RtmpPushServer();
// 私有构造函数防止外部 new
private RtmpPushServer() { }
#endregion
#region Start
///
/// 启动 RTMP 推流任务 (对接新架构 TaskManager)
///
public void Start()
{
// Optimized: 使用 TaskManager.Run 替代旧的线程启动方式,实现任务可视化管理
TaskManager.Run("RtmpPushSync", "Monitor", async (token) =>
{
try
{
_sysLog.Information("RTMP 推流同步任务正在启动...");
// 1. 初始化延迟:稍作延迟,等待系统其他组件初始化完成
await Task.Delay(2000, token);
// 2. 配置校验
if (!MjpegStatics.Cfg.UseRtmpServer)
{
_sysLog.Warning("配置未启用 RTMP 服务,推流任务已跳过");
return;
}
#region 启动连接检测
bool isConnected = false;
while (!isConnected && !token.IsCancellationRequested)
{
try
{
var cfg = MjpegStatics.Cfg;
var testItems = new List