Captura.MainViewModel.StartRecording C# (CSharp) Method

StartRecording() private method

private StartRecording ( ) : void
return void
        void StartRecording()
        {
            var duration = OthersViewModel.Duration;
            var delay = OthersViewModel.StartDelay;

            if (duration != 0 && (delay * 1000 > duration))
            {
                Status = "Delay cannot be greater than Duration";
                SystemSounds.Asterisk.Play();
                return;
            }

            if (OthersViewModel.MinimizeOnStart)
                WindowState = WindowState.Minimized;

            ReadyToRecord = false;

            var noVideo = VideoViewModel.SelectedVideoSourceKind == VideoSourceKind.NoVideo;

            var extension = noVideo
                ? (AudioViewModel.Encode && AudioViewModel.SelectedAudioSource is WaveInDevice ? ".mp3" : ".wav")
                : (VideoViewModel.SelectedCodec.Name == "Gif" ? ".gif" : ".avi");

            _currentFileName = Path.Combine(OutPath, DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + extension);

            Status = delay > 0 ? $"Recording from t = {delay} ms..." : "Recording...";

            _timer.Stop();
            TimeSpan = TimeSpan.Zero;

            WaveFormat wf;
            var audioSource = AudioViewModel.GetAudioSource(VideoViewModel.FrameRate, out wf);

            var imgProvider = GetImageProvider();

            var videoEncoder = GetVideoFileWriter(imgProvider);

            if (_recorder == null)
            {
                if (noVideo)
                    _recorder = new AudioRecorder(audioSource, AudioViewModel.GetAudioFileWriter(_currentFileName, wf));

                else _recorder = new Recorder(videoEncoder, imgProvider, VideoViewModel.FrameRate, audioSource);
            }

            _recorder.RecordingStopped += (s, E) =>
            {
                OnStopped();

                if (E?.Error == null)
                    return;

                Status = "Error";
                MessageBox.Show(E.ToString());
            };

            RecentViewModel.Add(_currentFileName, videoEncoder == null ? RecentItemType.Audio : RecentItemType.Video);

            _recorder.Start(delay);

            _timer.Start();
        }

Usage Example

コード例 #1
0
ファイル: Program.cs プロジェクト: SeanTheBermanator/Captura
        static void Start(MainViewModel ViewModel, StartCmdOptions StartOptions)
        {
            ViewModel.Settings.IncludeCursor = StartOptions.Cursor;

            ViewModel.Settings.Clicks.Display = StartOptions.Clicks;

            ViewModel.Settings.Keystrokes.Display = StartOptions.Keys;

            if (File.Exists(StartOptions.FileName))
            {
                WriteLine("Output File Already Exists");

                return;
            }

            HandleVideoSource(ViewModel, StartOptions);

            HandleVideoEncoder(ViewModel, StartOptions);

            HandleAudioSource(ViewModel, StartOptions);

            HandleWebcam(StartOptions);

            ViewModel.Settings.Video.FrameRate = StartOptions.FrameRate;

            ViewModel.Settings.Audio.Quality = StartOptions.AudioQuality;
            ViewModel.Settings.Video.Quality = StartOptions.VideoQuality;

            if (!ViewModel.RecordCommand.CanExecute(null))
            {
                WriteLine("Nothing to Record");

                return;
            }

            if (StartOptions.Delay > 0)
            {
                Thread.Sleep(StartOptions.Delay);
            }

            if (!ViewModel.StartRecording(StartOptions.FileName))
            {
                return;
            }

            Task.Factory.StartNew(() =>
            {
                Loop(ViewModel, StartOptions);

                ViewModel.StopRecording().Wait();

                Application.Exit();
            });

            // MouseKeyHook requires a Window Handle to register
            Application.Run(new ApplicationContext());
        }
All Usage Examples Of Captura.MainViewModel::StartRecording