protected override Task ExecuteAsync(CancellationToken stoppingToken) { PackageConsumer.OnMessage((Message) => { var merge = JT1078.Protocol.JT1078Serializer.Merge(Message.Data); if (merge != null) { var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(Message.Data.SIM, Message.Data.LogicChannelNumber); var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList(); if (firstHttpSessions.Count > 0) { var flvVideoBuffer = FlvEncoder.EncoderVideoTag(merge, true); HttpSessionManager.SendAVData(firstHttpSessions, flvVideoBuffer, true); } var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList(); if (otherHttpSessions.Count > 0) { var flvVideoBuffer = FlvEncoder.EncoderVideoTag(merge, false); HttpSessionManager.SendAVData(otherHttpSessions, flvVideoBuffer, false); } } }); return(Task.CompletedTask); }
protected override Task ExecuteAsync(CancellationToken stoppingToken) { JT1078MsgConsumer.OnMessage((Message) => { JT1078Package package = JT1078Serializer.Deserialize(Message.Data); if (Logger.IsEnabled(LogLevel.Debug)) { Logger.LogDebug(JsonSerializer.Serialize(HttpSessionManager.GetAll())); Logger.LogDebug($"{package.SIM},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); } try { var merge = JT1078Serializer.Merge(package); if (merge == null) { return; } string key = $"{package.GetKey()}_{ikey}"; if (merge.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧) { memoryCache.Set(key, merge); } var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(package.SIM.TrimStart('0'), package.LogicChannelNumber); var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList(); if (firstHttpSessions.Count > 0) { if (memoryCache.TryGetValue(key, out JT1078Package idata)) { try { var flvVideoBuffer = FlvEncoder.EncoderVideoTag(idata, true); foreach (var session in firstHttpSessions) { HttpSessionManager.SendAVData(session, flvVideoBuffer, true); } } catch (Exception ex) { Logger.LogError(ex, $"{package.SIM},{true},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); } } } var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList(); if (otherHttpSessions.Count > 0) { try { var flvVideoBuffer = FlvEncoder.EncoderVideoTag(merge, false); foreach (var session in otherHttpSessions) { HttpSessionManager.SendAVData(session, flvVideoBuffer, false); } } catch (Exception ex) { Logger.LogError(ex, $"{package.SIM},{false},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); } } } catch (Exception ex) { Logger.LogError(ex, $"{package.SIM},{package.SN},{package.LogicChannelNumber},{package.Label3.DataType.ToString()},{package.Label3.SubpackageType.ToString()},{package.Bodies.ToHexString()}"); } }); return(Task.CompletedTask); }
protected async override Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var data = await messageDispatchDataService.FlvChannel.Reader.ReadAsync(); try { if (Logger.IsEnabled(LogLevel.Debug)) { Logger.LogDebug(JsonSerializer.Serialize(HttpSessionManager.GetAll())); Logger.LogDebug($"{data.SIM},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } string key = $"{data.GetKey()}_{ikey}"; if (data.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧) { memoryCache.Set(key, data); } var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(data.SIM.TrimStart('0'), data.LogicChannelNumber); var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList(); if (firstHttpSessions.Count > 0) { if (memoryCache.TryGetValue(key, out JT1078Package idata)) { try { var flvVideoBuffer = FlvEncoder.EncoderVideoTag(idata, true); foreach (var session in firstHttpSessions) { HttpSessionManager.SendAVData(session, flvVideoBuffer, true); } } catch (Exception ex) { Logger.LogError(ex, $"{data.SIM},{true},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } } } var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList(); if (otherHttpSessions.Count > 0) { try { var flvVideoBuffer = FlvEncoder.EncoderVideoTag(data, false); foreach (var session in otherHttpSessions) { HttpSessionManager.SendAVData(session, flvVideoBuffer, false); } } catch (Exception ex) { Logger.LogError(ex, $"{data.SIM},{false},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } } } catch (Exception ex) { Logger.LogError(ex, $"{data.SIM},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } } await Task.CompletedTask; }
protected async override Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var data = await messageDispatchDataService.FlvChannel.Reader.ReadAsync(); try { var nalus = H264Decoder.ParseNALU(data); if (Logger.IsEnabled(LogLevel.Debug)) { Logger.LogDebug(JsonSerializer.Serialize(HttpSessionManager.GetAll())); Logger.LogDebug($"{data.SIM},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } string key = $"{data.GetKey()}_{ikey}"; if (data.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧) { var moov = FM4Encoder.EncoderMoovBox(nalus.FirstOrDefault(f => f.NALUHeader.NalUnitType == NalUnitType.SPS), nalus.FirstOrDefault(f => f.NALUHeader.NalUnitType == NalUnitType.PPS)); memoryCache.Set(key, moov); } var httpSessions = HttpSessionManager.GetAllBySimAndChannelNo(data.SIM.TrimStart('0'), data.LogicChannelNumber); var firstHttpSessions = httpSessions.Where(w => !w.FirstSend).ToList(); if (firstHttpSessions.Count > 0) { try { var flvVideoBuffer = FM4Encoder.EncoderFtypBox(); memoryCache.TryGetValue(key, out byte[] moovBuffer); foreach (var session in firstHttpSessions) { HttpSessionManager.SendAVData(session, flvVideoBuffer, true); if (moovBuffer != null) { HttpSessionManager.SendAVData(session, moovBuffer, false); } } } catch (Exception ex) { Logger.LogError(ex, $"{data.SIM},{true},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } } var otherHttpSessions = httpSessions.Where(w => w.FirstSend).ToList(); if (otherHttpSessions.Count > 0) { try { if (!avFrameDict.TryGetValue(key, out List <H264NALU> frames)) { frames = new List <H264NALU>(); avFrameDict.TryAdd(key, frames); } foreach (var nalu in nalus) { if (nalu.Slice) { //H264 NALU slice first_mb_in_slice frames.Add(nalu); } else { if (nalus.Count > 0) { var otherBuffer = FM4Encoder.EncoderOtherVideoBox(frames); foreach (var session in otherHttpSessions) { if (otherBuffer != null) { HttpSessionManager.SendAVData(session, otherBuffer, false); } } frames.Clear(); } frames.Add(nalu); } } } catch (Exception ex) { Logger.LogError(ex, $"{data.SIM},{false},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } } } catch (Exception ex) { Logger.LogError(ex, $"{data.SIM},{data.SN},{data.LogicChannelNumber},{data.Label3.DataType.ToString()},{data.Label3.SubpackageType.ToString()},{data.Bodies.ToHexString()}"); } } await Task.CompletedTask; }