public void StartDecoder(FfmpegPackage package) { if (!_ffmpegHeaderInit) { throw new InvalidOperationException("没有初始化FFMPEG视频流包头。"); } var frame = _ffmpegDecoder.Decode(package.Type, package.Pts, package.Data); completeFfmpegDecode(frame); }
public void InputFfmpegPackage(FfmpegPackage package) { _recType = RecType.Ffmpeg; Record <FfmpegPackage> record = new Record <FfmpegPackage>() { Time = DateTime.Now, IsKey = package.Type == 1 || package.Type == 2, Package = package, }; _ffmpegRecQueue.Enqueue(record); clearTimeout(); }
private void _video_FFMPEGFrameEvent(int type, ulong pts, byte[] data) { var package = new FfmpegPackage() { CodecID = _ffmpegCodecId, Width = _ffmpegWidth, Height = _ffmpegHeight, Type = type, Pts = pts, Data = data, }; //_flashback.InputFfmpegPackage(package); //数据通知 if (_notifyFfmpegData != null) { _notifyFfmpegData(package); } if (FfmpegHeader != null) { onFfmpegStreamReceived(new FfmpegStreamEventArgs(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; } } }
public FfmpegStreamEventArgs(FfmpegPackage package) { this.Package = package; }
private void updateFfmpegData(FfmpegPackage package) { _flashback.InputFfmpegPackage(package); }