Captura.RecorderParams.CreateVideoStream C# (CSharp) Method

CreateVideoStream() public method

public CreateVideoStream ( AviWriter writer ) : IAviVideoStream
writer AviWriter
return IAviVideoStream
        public IAviVideoStream CreateVideoStream(AviWriter writer)
        {
            // Select encoder type based on FOURCC of codec
            if (Codec == KnownFourCCs.Codecs.Uncompressed) return writer.AddUncompressedVideoStream(Width, Height);
            else if (Codec == KnownFourCCs.Codecs.MotionJpeg) return writer.AddMotionJpegVideoStream(Width, Height, Quality);
            else
            {
                return writer.AddMpeg4VideoStream(Width, Height, (double)writer.FramesPerSecond,
                    // It seems that all tested MPEG-4 VfW codecs ignore the quality affecting parameters passed through VfW API
                    // They only respect the settings from their own configuration dialogs, and Mpeg4VideoEncoder currently has no support for this
                    quality: Quality,
                    codec: Codec,
                    // Most of VfW codecs expect single-threaded use, so we wrap this encoder to special wrapper
                    // Thus all calls to the encoder (including its instantiation) will be invoked on a single thread although encoding (and writing) is performed asynchronously
                    forceSingleThreadedAccess: true);
            }
        }
        public IAviAudioStream CreateAudioStream(AviWriter writer)

Usage Example

        void RecordScreen()
        {
            var buffer            = new byte[Params.Width * Params.Height * 4];
            var timeTillNextFrame = TimeSpan.Zero;

            Control.CheckForIllegalCrossThreadCalls = false;

            bool creatingNewFile = false;

            while (!closed)
            {
                creatingNewFile = false;
                var startDate = DateTime.Now;
                using (var writer = Params.CreateAviWriter())
                {
                    var frameInterval = TimeSpan.FromSeconds(1 / (double)writer.FramesPerSecond);
                    var videoStream   = Params.CreateVideoStream(writer);
                    videoStream.Name = "Captura";
                    var timedWriter = new TimedFrameWriter(videoStream, writer, Params);
                    while (!stopThread.WaitOne(timeTillNextFrame) && !creatingNewFile)
                    {
                        var  timestamp = DateTime.Now;
                        bool captured  = Screenshot(buffer);
                        if (captured)
                        {
                            timedWriter.WriteFrame(true, buffer, 0, buffer.Length);
                        }
                        //videoStream.WriteFrame(true, buffer, 0, buffer.Length);
                        timeTillNextFrame = timestamp + frameInterval - DateTime.Now;
                        if (timeTillNextFrame < TimeSpan.Zero)
                        {
                            timeTillNextFrame = TimeSpan.Zero;
                        }
                        if (DateTime.Now.Subtract(startDate).Minutes == 1)
                        {
                            creatingNewFile = true;
                        }
                    }
                    writer.Close();
                    if (!creatingNewFile)
                    {
                        closed = true;
                    }
                    if (Params.YTUpload)
                    {
                        UploadToYouTube(Params.FileName);
                        Params.FileName = DateTime.Now.ToString("out-yyyy-MM-dd_HH-mm-ss.avi");
                    }
                }
            }
        }
All Usage Examples Of Captura.RecorderParams::CreateVideoStream