Example #1
0
        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);
        }
Example #2
0
        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());
        }
Example #4
0
        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;
                }
            }
        }