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(); }
public FFMPegStream(ConvertLiveMediaTask mediaTask) { try { mMediaTask = mediaTask; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
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; } }
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; }
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(); }
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", }); }
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; } }
public static void Write(this ConvertLiveMediaTask task, Bitmap frame) { var buffer = frame.GetBytes(); task.Write(buffer, 0, buffer.Length); }