コード例 #1
0
        public void StartDecoder(FfmpegPackage package)
        {
            if (!_ffmpegHeaderInit)
            {
                throw new InvalidOperationException("没有初始化FFMPEG视频流包头。");
            }
            var frame = _ffmpegDecoder.Decode(package.Type, package.Pts, package.Data);

            completeFfmpegDecode(frame);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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;
                }
            }
        }
コード例 #5
0
 public FfmpegStreamEventArgs(FfmpegPackage package)
 {
     this.Package = package;
 }
コード例 #6
0
 private void updateFfmpegData(FfmpegPackage package)
 {
     _flashback.InputFfmpegPackage(package);
 }