private static void InitialiseTestPattern() { _testPattern = new Bitmap(TEST_PATTERN_IMAGE_PATH); FFmpegInit.Initialise(FfmpegLogLevelEnum.AV_LOG_DEBUG); _ffmpegEncoder = new FFmpegVideoEncoder(); Console.WriteLine($"Codec name {_ffmpegEncoder.GetCodecName()}."); _videoFrameConverter = new VideoFrameConverter( _testPattern.Width, _testPattern.Height, AVPixelFormat.AV_PIX_FMT_BGRA, _testPattern.Width, _testPattern.Height, AVPixelFormat.AV_PIX_FMT_YUV420P); }
private static void InitialiseTestPattern() { _testPattern = new Bitmap(TEST_PATTERN_IMAGE_PATH); FFmpegInit.Initialise(FfmpegLogLevelEnum.AV_LOG_DEBUG); //_ffmpegEncoder = new VideoEncoder(AVCodecID.AV_CODEC_ID_VP8, _testPattern.Width, _testPattern.Height, FRAMES_PER_SECOND); _ffmpegEncoder = new VideoEncoder(AVCodecID.AV_CODEC_ID_H264, _testPattern.Width, _testPattern.Height, FRAMES_PER_SECOND); Console.WriteLine($"Codec name {_ffmpegEncoder.GetCodecName()}."); _videoFrameConverter = new VideoFrameConverter( new Size(_testPattern.Width, _testPattern.Height), AVPixelFormat.AV_PIX_FMT_BGRA, new Size(_testPattern.Width, _testPattern.Height), AVPixelFormat.AV_PIX_FMT_YUV420P); }
private static unsafe String GetAvFoundationLogsAboutDevicesList() { String inputFormat = "avfoundation"; AVInputFormat * avInputFormat = ffmpeg.av_find_input_format(inputFormat); AVFormatContext *pFormatCtx = ffmpeg.avformat_alloc_context(); AVDictionary * options = null; ffmpeg.av_dict_set(&options, "list_devices", "true", 0); // We use temporarily a specific callback to log FFmpeg entries FFmpegInit.UseSpecificLogCallback(); ffmpeg.avformat_open_input(&pFormatCtx, null, avInputFormat, &options); // Here nb is < 0 ... But we have anyway an output from av_log which can be parsed ... ffmpeg.avformat_close_input(&pFormatCtx); // We no more need to use temporarily a specific callback to log FFmpeg entries FFmpegInit.UseDefaultLogCallback(); // returns logs return(FFmpegInit.GetStoredLogs()); }
static void Main(string[] args) { VideoCodecsEnum VideoCodec = VideoCodecsEnum.H264; IVideoSource videoSource; // Initialise FFmpeg librairies FFmpegInit.Initialise(FfmpegLogLevelEnum.AV_LOG_FATAL, LIB_PATH); // Get cameras and monitors List <Camera> cameras = FFmpegCameraManager.GetCameraDevices(); List <Monitor> monitors = FFmpegMonitorManager.GetMonitorDevices(); char keyChar = ' '; while (true) { Console.Clear(); if (!(cameras?.Count > 0)) { Console.WriteLine("\nNo Camera found ..."); } if (!(monitors?.Count > 0)) { Console.WriteLine("\nNo Monitor found ..."); } Console.WriteLine("\nWhat do you want to use ?"); if (cameras?.Count > 0) { Console.Write("\n [c] - Camera "); } if (monitors?.Count > 0) { Console.Write("\n [m] - Monitor "); } Console.Write($"\n [f] - File - Path:[{VIDEO_FILE_PATH}]"); Console.WriteLine("\n"); Console.Out.Flush(); var keyConsole = Console.ReadKey(); if (((keyConsole.KeyChar == 'c') && (cameras?.Count > 0)) || ((keyConsole.KeyChar == 'm') && (monitors?.Count > 0)) || (keyConsole.KeyChar == 'f')) { keyChar = keyConsole.KeyChar; break; } } // Do we manage a camera ? if (keyChar == 'c') { int cameraIndex = 0; if (cameras?.Count > 1) { while (true) { Console.Clear(); Console.WriteLine("\nWhich camera do you want to use:"); int index = 0; foreach (Camera camera in cameras) { Console.Write($"\n [{index}] - {camera.Name} "); index++; } Console.WriteLine("\n"); Console.Out.Flush(); var keyConsole = Console.ReadKey(); if (int.TryParse("" + keyConsole.KeyChar, out int keyValue) && keyValue < index && keyValue >= 0) { cameraIndex = keyValue; break; } } } var selectedCamera = cameras[cameraIndex]; SIPSorceryMedia.FFmpeg.FFmpegCameraSource cameraSource = new SIPSorceryMedia.FFmpeg.FFmpegCameraSource(selectedCamera.Path); videoSource = cameraSource as IVideoSource; } // Do we manage a Monitor ? else if (keyChar == 'm') { int monitorIndex = 0; if (monitors?.Count > 1) { while (true) { Console.Clear(); Console.WriteLine("\nWhich Monitor do you want to use:"); int index = 0; foreach (Monitor monitor in monitors) { Console.Write($"\n [{index}] - {monitor.Name} {(monitor.Primary ? " PRIMARY" : "")}"); index++; } Console.WriteLine("\n"); Console.Out.Flush(); var keyConsole = Console.ReadKey(); if (int.TryParse("" + keyConsole.KeyChar, out int keyValue) && keyValue < index && keyValue >= 0) { monitorIndex = keyValue; break; } } } var selectedMonitor = monitors[monitorIndex]; SIPSorceryMedia.FFmpeg.FFmpegScreenSource screenSource = new SIPSorceryMedia.FFmpeg.FFmpegScreenSource(selectedMonitor.Path, selectedMonitor.Rect, 20); videoSource = screenSource as IVideoSource; } // Do we manage a File ? else { SIPSorceryMedia.FFmpeg.FFmpegFileSource fileSource = new SIPSorceryMedia.FFmpeg.FFmpegFileSource(VIDEO_FILE_PATH, false, null, true); videoSource = fileSource as IVideoSource; } // Create object used to display video in Ascii asciiFrame = new AsciiFrame(); videoSource.RestrictFormats(x => x.Codec == VideoCodec); videoSource.SetVideoSourceFormat(videoSource.GetVideoSourceFormats().Find(x => x.Codec == VideoCodec)); videoSource.OnVideoSourceRawSampleFaster += FileSource_OnVideoSourceRawSampleFaster; videoSource.StartVideo(); for (var loop = true; loop;) { var cki = Console.ReadKey(true); switch (cki.Key) { case ConsoleKey.Q: case ConsoleKey.Enter: case ConsoleKey.Escape: Console.CursorVisible = true; loop = false; break; } } }