private void video_VideoStreamEvent(int frameType, byte[] frameData) { var package = new HikM4Package() { Type = frameType, Data = frameData, }; //_flashback.InputHikM4Package(package); //数据通知 if (_notifyHikm4Data != null) { _notifyHikm4Data(package); } if (frameType == HikM4Decoder.HeaderType) { HikM4Header header = new HikM4Header() { Type = frameType, Data = frameData }; HikM4Header = header; onHikM4HeaderReceived(new HikM4HeaderEventArgs(header)); } else { if (HikM4Header != null) { onHikM4StreamReceived(new HikM4StreamEventArgs(package)); } } }
public void StartDecoder(HikM4Package package) { if (!_hikHeaderInit) { throw new InvalidOperationException("没有初始化海康视频流包头。"); } _hikDecoder.InputData(package.Type, package.Data); }
public void InputHikM4Package(HikM4Package package) { _recType = RecType.Hik; if (HikM4Decoder.HeaderType == package.Type) { _lastHeader = package.Data; } else { if (_lastHeader != null) { Record <HikM4Package> record = new Record <HikM4Package>() { Time = DateTime.Now, IsKey = package.Type == 1, Package = package, Header = _lastHeader, }; _hikRecQueue.Enqueue(record); clearTimeout(); } } }
public HikM4StreamEventArgs(HikM4Package package) { this.Package = package; }
private void streamPipe_StreamDataReceived(object sender, StreamData e) { if (_headerReceived) { switch (_headerType) { case VideoDeviceType.Hikv: { if (HikM4Header != null) { var package = new HikM4Package() { Type = 0, Data = e.Buffer, }; //数据通知 if (_notifyHikm4Data != null) { _notifyHikm4Data(package); } onHikM4StreamReceived(new HikM4StreamEventArgs(package)); //视频流解码 if (_decode) { _hikm4Decoder.InputData(package.Type, package.Data); } } } break; case VideoDeviceType.Ffmpeg: { if (FfmpegHeader != null) { var package = new FfmpegPackage() { CodecID = FfmpegHeader.CodecID, Width = 0, Height = 0, Type = 0, Pts = (ulong)e.Time.Ticks, Data = e.Buffer, }; //数据通知 if (_notifyFfmpegData != null) { _notifyFfmpegData(package); } onFfmpegStreamReceived(new FfmpegStreamEventArgs(package)); //视频流解码 if (_decode) { var frame = _ffmpegDecoder.Decode(package.Type, package.Pts, package.Data); if (frame != null) { VideoFrame vf = new VideoFrame(frame.Width, frame.Height, (long)frame.Pts, frame.Data); onVideoFrameParsed(new VideoFrameEventArgs(vf)); } } } } break; default: break; } } }
private void updateHikm4Data(HikM4Package package) { _flashback.InputHikM4Package(package); }