Пример #1
0
        private void Init()
        {
            _age       = new FaceAge(AppId, AgeKey);
            _gender    = new FaceGender(AppId, GenderKey);
            _traking   = LocatorFactory.GetTrackingLocator(AppId, FtKey, _age, _gender) as FaceTracking;
            _detection = LocatorFactory.GetDetectionLocator(AppId, FdKey) as FaceDetection;
            _recognize = new FaceRecognize(AppId, FrKey);
            _processor = new FaceProcessor(_traking, _recognize);

            //init cache
            if (Directory.Exists(FaceLibraryPath))
            {
                var files = Directory.GetFiles(FaceLibraryPath);
                foreach (var file in files)
                {
                    var info = new FileInfo(file);
                    _cache.Add(info.Name.Replace(info.Extension, ""), File.ReadAllBytes(file));
                }
            }

            stride     = width * pixelSize;
            bufferSize = stride * height;

            _pImage = Marshal.AllocHGlobal(bufferSize);
            _image  = new Bitmap(width, height, stride, PixelFormat.Format24bppRgb, _pImage);

            var ffmpeg = new FFMpegConverter();

            outputStream = new MemoryStream();

            var setting =
                new ConvertSettings
            {
                CustomOutputArgs = "-s 1920x1080", //根据业务需求-r参数可以调整,取决于摄像机的FPS
            };                                     //-s 1920x1080 -q:v 2 -b:v 64k

            //-an -r 15 -pix_fmt bgr24 -updatefirst 1
            //task = ffmpeg.ConvertLiveMedia("rtsp://*****:*****@192.168.1.64:554/h264/ch1/main/av_stream", null,
            //    outputStream, Format.raw_video, setting);

            /*
             * USB摄像头捕获
             * 通过ffmpeg可以捕获USB摄像,如下代码所示。
             * 首先通过:ffmpeg -list_devices true -f dshow -i dummy命令,可以列出系统中存在的USB摄像设备(或通过控制面板的设备管理工具查看设备名称),例如在我电脑中叫USB2.0 PC CAMERA。
             * 然后根据捕获的分辨率,修改视频图形信息,包括width和height,一般像素大小不用修改,如果要参考设备支持的分辨率,可以使用:
             * ffmpeg -list_options true -f dshow -i video="USB2.0 PC CAMERA"命令
             */
            task = ffmpeg.ConvertLiveMedia("video=Logitech HD Webcam C270", "dshow",
                                           outputStream, Format.raw_video, setting);

            task.OutputDataReceived += DataReceived;
            task.Start();

            _renderTask = new Task(Render);
            _renderTask.Start();
        }
Пример #2
0
 public FFMPegStream(ConvertLiveMediaTask mediaTask)
 {
     try
     {
         mMediaTask = mediaTask;
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.ToString());
     }
 }
Пример #3
0
        public void Dispose()
        {
            if (_readingTask != null)
            {
                try
                {
                    _readingTask.Abort();
                }
                catch
                {
                }
                _readingTask = null;
            }

            if (_filereader != null)
            {
                try
                {
                    _filereader.Abort();
                }
                catch
                {
                }
                _filereader = null;
            }

            if (FrameDecoder != null)
            {
                FrameDecoder.ClearBuffer();

                try
                {
                    FrameDecoder.Dispose();
                }
                catch
                {
                }
                FrameDecoder = null;
            }
        }
Пример #4
0
        private void Init()
        {
            _traking   = LocatorFactory.GetTrackingLocator(AppId, FtKey) as FaceTracking;
            _detection = LocatorFactory.GetDetectionLocator(AppId, FdKey) as FaceDetection;
            _recognize = new FaceRecognize(AppId, FrKey);
            _processor = new FaceProcessor(_traking, _recognize);

            //init cache
            if (Directory.Exists(FaceLibraryPath))
            {
                var files = Directory.GetFiles(FaceLibraryPath);
                foreach (var file in files)
                {
                    var info = new FileInfo(file);
                    _cache.Add(info.Name.Replace(info.Extension, ""), File.ReadAllBytes(file));
                }
            }

            _pImage = Marshal.AllocHGlobal(1920 * 1080 * 3);
            _image  = new Bitmap(1920, 1080, 1920 * 3, PixelFormat.Format24bppRgb, _pImage);

            var ffmpeg = new FFMpegConverter();

            outputStream = new MemoryStream();

            var setting =
                new ConvertSettings
            {
                CustomOutputArgs = "-an -r 15 -pix_fmt bgr24 -updatefirst 1" //根据业务需求-r参数可以调整,取决于摄像机的FPS
            };                                                               //-s 1920x1080 -q:v 2 -b:v 64k

            task = ffmpeg.ConvertLiveMedia("rtsp://*****:*****@192.168.1.64:554/h264/ch1/main/av_stream", null,
                                           outputStream, Format.raw_video, setting);

            task.OutputDataReceived += DataReceived;
            task.Start();

            _renderTask = new Task(Render);
            _renderTask.Start();
        }
 public FFMPegStream(ConvertLiveMediaTask mediaTask)
 {
     mMediaTask = mediaTask;
 }
Пример #6
0
        public void Start(bool open = true, string customArgs = "", int?FrameBufferCapacity = null, int?MinimumWorkingFrames = null)
        {
            if (open)
            {
                Open(VideoPath);
            }

            _filereader = new FFMpegConverter();

            if (FrameDecoder != null)
            {
                FrameDecoder.ClearBuffer();
            }

            //Set the format of the output bitmap
            FrameDecoder = new FrameDecoder
                           (
                PlayerOutputWidth,
                PlayerOutputHeight,
                PixelFormat.Format24bppRgb
                           );

            if (FrameBufferCapacity != null)
            {
                FrameDecoder.FrameBufferCapacity = (int)FrameBufferCapacity;
            }

            if (MinimumWorkingFrames != null)
            {
                FrameDecoder.MinimumWorkingFrames = (int)MinimumWorkingFrames;
            }

            BufferInitialized?.Invoke(this, null);

            FrameDecoder.Processor       = Processor;
            FrameDecoder.FrameReady     += OnFrameReady;
            _filereader.LogReceived     += OnLogReceived;
            _filereader.ConvertProgress += _filereader_ConvertProgress;

            //Set conversion settings
            _settings = new ConvertSettings
            {
                VideoFrameSize   = PlayerOutputWidth + "x" + PlayerOutputHeight,
                CustomOutputArgs = " -pix_fmt bgr24 " + customArgs,
            };

            //Set start time
            if (PlayStartTimeInSec > 0)
            {
                //Adjust frame index for seeking
                CurrentFrame = (int)Math.Round(PlayStartTimeInSec * VideoInfo.FPS, 0);

                _settings.Seek = (float?)PlayStartTimeInSec;
            }

            //Set end time (if valid)
            if (PlayEndTimeInSec != null && PlayEndTimeInSec > PlayStartTimeInSec)
            {
                _settings.MaxDuration = (float?)(PlayEndTimeInSec - PlayStartTimeInSec);
            }

            //Setup to convert from the file into the bitmap intercepting stream
            _readingTask = _filereader.ConvertLiveMedia
                           (
                VideoPath,
                null,     // autodetect stream format
                FrameDecoder,
                "rawvideo",
                _settings
                           );

            _readingThread = new Thread(StartDecoding)
            {
                IsBackground = true
            };
            _readingThread.Start();
        }
Пример #7
0
        private void burn_Click(object sender, EventArgs e)
        {
            // Destroy all the writers...
            if (_VideoWriter != null)
            {
                _VideoWriter.Close();
                _VideoWriter.Dispose();
                _VideoWriter = null;
            }

            if (_AudioWriter != null)
            {
                _AudioWriter.Close();
                _AudioWriter.Dispose();
                _AudioWriter = null;
            }

            if (_EncodeTask != null)
            {
                _EncodeTask.Stop();
                _EncodeTask = null;
            }

            if (_EncodedStream != null)
            {
                _EncodedStream.Close();
                _EncodedStream.Dispose();
                _EncodedStream = null;
            }

            // Make the audio a WAV
            var sampleData = File.ReadAllBytes(_RawAudioFile);

            using (var waveStream = new MemoryStream())
            {
                using (var bw = new BinaryWriter(waveStream))
                {
                    var audioSampleRate = (int)_AudioSampleRate;

                    bw.Write(new char[4] {
                        'R', 'I', 'F', 'F'
                    });
                    int fileSize = 36 + sampleData.Length;
                    bw.Write(fileSize);
                    bw.Write(new char[8] {
                        'W', 'A', 'V', 'E', 'f', 'm', 't', ' '
                    });
                    bw.Write((int)16);
                    bw.Write((short)1);
                    bw.Write((short)_AudioChannels);
                    bw.Write(audioSampleRate);
                    bw.Write((int)(audioSampleRate * ((_AudioSampleDepth * _AudioChannels) / 8)));
                    bw.Write((short)((_AudioSampleDepth * _AudioChannels) / 8));
                    bw.Write((short)_AudioSampleDepth);

                    bw.Write(new char[4] {
                        'd', 'a', 't', 'a'
                    });
                    bw.Write(sampleData.Length);

                    bw.Write(sampleData, 0, sampleData.Length);

                    waveStream.Position = 0;

                    File.WriteAllBytes(_WavAudioFile, waveStream.ToArray());
                }
            }

            // Combine them
            _VideoConverter.ConvertMedia(_EncodedVideoFile, "h264", _FinalFile, null, new ConvertSettings()
            {
                CustomOutputArgs = " -i " + _WavAudioFile + " -vcodec libx264 -acodec libmp3lame",
            });
        }
Пример #8
0
        private void stream_Click(object x, EventArgs y)
        {
            // Get the IDeckLinkOutput interface
            var input  = (IDeckLinkInput)_DeckLink;
            var output = (IDeckLinkOutput)_DeckLink;

            if (_Streaming)
            {
                KillStream();
            }
            else
            {
                IDeckLinkDisplayModeIterator displayIterator;
                input.GetDisplayModeIterator(out displayIterator);

                var supportedModes = new List <IDeckLinkDisplayMode>();

                input.SetCallback(this);
                input.SetScreenPreviewCallback(this);

                var flags   = _BMDVideoInputFlags.bmdVideoInputFlagDefault | _BMDVideoInputFlags.bmdVideoInputEnableFormatDetection;
                var format  = _BMDPixelFormat.bmdFormat8BitYUV;
                var display = _BMDDisplayMode.bmdModeHD1080i50;

                _BMDDisplayModeSupport support;
                IDeckLinkDisplayMode   tmp;
                input.DoesSupportVideoMode(display, format, flags, out support, out tmp);

                if (support != _BMDDisplayModeSupport.bmdDisplayModeSupported)
                {
                    throw new Exception("display mode not working: " + support);
                }

                if (writeRaw.Checked)
                {
                    _VideoWriter = new BinaryWriter(File.Open(_RawVideoFile, FileMode.OpenOrCreate));
                    _AudioWriter = new BinaryWriter(File.Open(_RawAudioFile, FileMode.OpenOrCreate));
                }

                if (writeEncoded.Checked)
                {
                    _EncodedStream = new FileStream(_EncodedVideoFile, FileMode.Create, FileAccess.Write);

                    _EncodeTask = _VideoConverter.ConvertLiveMedia(
                        "rawvideo",
                        _EncodedStream,
                        "h264",
                        new ConvertSettings()
                    {
                        CustomInputArgs = " -pix_fmt uyvy422 -video_size 1920x1080 -framerate 25",
                    });

                    _EncodeTask.Start();
                }

                input.EnableVideoInput(display, format, flags);
                input.EnableAudioInput(_AudioSampleRate, _AudioSampleType, _AudioChannels);

                input.StartStreams();

                stream.Text = "Kill";
                _Streaming  = true;
            }
        }
Пример #9
0
        public static void Write(this ConvertLiveMediaTask task, Bitmap frame)
        {
            var buffer = frame.GetBytes();

            task.Write(buffer, 0, buffer.Length);
        }