public static void Start(string fileName,
                                 double scale,
                                 FourCC?codec    = null,
                                 int frameRate   = 25,
                                 int quality     = 25,
                                 Rectangle area  = default(Rectangle),
                                 bool uploadToYT = false)
        {
            if (area == default(Rectangle))
            {
                area = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            }
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            if (rec != null)
            {
                return;
            }
            if (codec == null)
            {
                codec = defaultCodec;
            }
            // Using MotionJpeg as Avi encoder,
            // output to 'out.avi' at 10 Frames per second, 70% quality
            //var rec = new Recorder(new RecorderParams("out.avi", 10, SharpAvi.KnownFourCCs.Codecs.MotionJpeg, 70));
            var recorderParams = new RecorderParams(fileName, scale, frameRate, codec.Value, quality, area, uploadToYT);

            rec = new Recorder(recorderParams);
            rec.StartAsync();
        }
        public void Dispose()
        {
            stopThread.Set();
            while (!closed)
            {
                System.Threading.Thread.Sleep(100);
            }
            screenThread.Join();
            screenThread.Abort();

            // Close writer: the remaining data is written to a file and file is closed
            Params = null;
            //videoStream = null;

            stopThread   = null;
            screenThread = null;
        }
        public Recorder(RecorderParams Params)
        {
            this.Params = Params;
            // Create AVI writer and specify FPS
            writer = Params.CreateAviWriter();
            // Create video stream
            videoStream = Params.CreateVideoStream(writer);
            // Set only name. Other properties were when creating stream,
            // either explicitly by arguments or implicitly by the encoder used
            videoStream.Name = "Captura";

            screenThread = new Thread(RecordScreen)
            {
                Name         = typeof(Recorder).Name + ".RecordScreen",
                IsBackground = true
            };
            screenThread.Start();
        }
 public Recorder(RecorderParams Params)
 {
     this.Params = Params;
     // Create AVI writer and specify FPS
     writer = Params.CreateAviWriter();
     // Create video stream
     videoStream = Params.CreateVideoStream(writer);
     // Set only name. Other properties were when creating stream, 
     // either explicitly by arguments or implicitly by the encoder used
     videoStream.Name = "Captura";
     if (Params.AudioSourceId != -1)
     {
         try
         {
             var waveFormat = Params.WaveFormat;
             audioStream = Params.CreateAudioStream(writer);
             audioStream.Name = "Voice";
             audioSource = new WaveInEvent
             {
                 DeviceNumber = Params.AudioSourceId,
                 WaveFormat = waveFormat,
                 // Buffer size to store duration of 1 frame
                 BufferMilliseconds = (int)Math.Ceiling(1000 / writer.FramesPerSecond),
                 NumberOfBuffers = 3,
             };
             audioSource.DataAvailable += AudioDataAvailable;
         }
         catch { }
     }
     screenThread = new Thread(RecordScreen)
     {
         Name = typeof(Recorder).Name + ".RecordScreen",
         IsBackground = true
     };
     if (audioSource != null)
     {
         videoFrameWritten.Set();
         audioBlockWritten.Reset();
         audioSource.StartRecording();
     }
     screenThread.Start();
 }
示例#5
0
        public Recorder(RecorderParams Params)
        {
            this.Params = Params;

            if (Params.CaptureVideo)
            {
                // Create AVI writer and specify FPS
                writer = Params.CreateAviWriter();

                // Create video stream
                videoStream = Params.CreateVideoStream(writer);
                // Set only name. Other properties were when creating stream,
                // either explicitly by arguments or implicitly by the encoder used
                videoStream.Name = "Captura";
            }

            try
            {
                int AudioSourceId = int.Parse(Params.AudioSourceId);

                if (AudioSourceId != -1)
                {
                    if (Params.CaptureVideo)
                    {
                        audioStream = Params.CreateAudioStream(writer);
                        audioStream.Name = "Voice";
                    }

                    audioSource = new WaveInEvent
                    {
                        DeviceNumber = AudioSourceId,
                        WaveFormat = Params.WaveFormat,
                        // Buffer size to store duration of 1 frame
                        BufferMilliseconds = (int)Math.Ceiling(1000 / writer.FramesPerSecond),
                        NumberOfBuffers = 3,
                    };
                }
            }
            catch
            {
                var dev = Params.LoopbackDevice;

                SilencePlayer = new WasapiOut(dev, AudioClientShareMode.Shared, false, 100);

                SilencePlayer.Init(new SilenceProvider(Params.WaveFormat));

                SilencePlayer.Play();

                if (Params.CaptureVideo)
                {
                    audioStream = Params.CreateAudioStream(writer);
                    audioStream.Name = "Loopback";
                }

                audioSource = new WasapiLoopbackCapture(dev) { ShareMode = AudioClientShareMode.Shared };
            }

            if (Params.CaptureVideo)
            {
                screenThread = new Thread(RecordScreen)
                {
                    Name = typeof(Recorder).Name + ".RecordScreen",
                    IsBackground = true
                };
            }
            else WaveWriter = Params.CreateWaveWriter();

            if (Params.CaptureVideo) screenThread.Start();

            if (audioSource != null)
            {
                audioSource.DataAvailable += AudioDataAvailable;

                if (Params.CaptureVideo)
                {
                    videoFrameWritten.Set();
                    audioBlockWritten.Reset();
                }

                audioSource.StartRecording();
            }
        }
        public Recorder(RecorderParams Params)
        {
            this.Params = Params;

            // Create AVI writer and specify FPS
        }