抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一、来源

飞机直达

二、优缺点

1、清晰度高

2、占用空间小

3、代码量少、简洁

1、仅支持windows8以上

三、示例代码

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Start.IsEnabled = true;
            Pause.IsEnabled = false;
            Stop.IsEnabled = false;
        }
        private System.Timers.Timer _timer;//定时器
        private int _secondsElapsed;//录制时间
        Recorder _recorder;//核心库
        private void Start_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                FileResult.Text = "";//文件结果
                UpdateProgress();

                string timestamp = "GEWorker流程-" + DateTime.Now.ToString("yyyyMMddHHmmss");
                string videoPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), timestamp + ".mp4");
                _timer = new System.Timers.Timer(1000);
                _timer.AutoReset = true;
                _timer.Enabled = true;
                _timer.Elapsed += new System.Timers.ElapsedEventHandler(delegate
                {
                    _secondsElapsed++;
                    UpdateProgress();
                });
                _timer.Start();

                if (_recorder == null)
                {
                    _recorder = Recorder.CreateRecorder();
                    _recorder.OnRecordingComplete += _recorder_OnRecordingComplete;
                    _recorder.OnRecordingFailed += _recorder_OnRecordingFailed;
                    _recorder.OnStatusChanged += _recorder_OnStatusChanged;
                    _recorder.OnSnapshotSaved += _recorder_OnSnapshotSaved;
                }

                _recorder.Record(videoPath);
                _secondsElapsed = 0;

                Start.IsEnabled = false;
                Pause.IsEnabled = true;
                Stop.IsEnabled = true;
            }
            catch (Exception ex)
            {
                Start.IsEnabled = true;
                Stop.IsEnabled = false;
                Pause.IsEnabled = false;
                MessageBox.Show(ex.Message);
            }
        }

        private void _recorder_OnSnapshotSaved(object sender, SnapshotSavedEventArgs e)
        {
        }

        private void _recorder_OnStatusChanged(object sender, RecordingStatusEventArgs e)
        {
            //状态改变

            App.Current.Dispatcher.Invoke(delegate {

                switch (e.Status)
                {
                    case RecorderStatus.Idle:
                        FileResult.Text = "请开始录制";
                        break;
                    case RecorderStatus.Recording:
                        Start.IsEnabled = false;
                        Pause.IsEnabled = true;
                        Stop.IsEnabled = true;
                        Pause.Content = "暂停";
                        break;
                    case RecorderStatus.Paused:
                        Start.IsEnabled = false;
                        Pause.IsEnabled = true;
                        Stop.IsEnabled = true;
                        Pause.Content = "继续";
                        break;
                    case RecorderStatus.Finishing:
                        Start.IsEnabled = true;
                        Pause.IsEnabled = false;
                        Stop.IsEnabled = false;
                        break;
                    default:
                        break;
                }

            });

        }

        private void _recorder_OnRecordingFailed(object sender, RecordingFailedEventArgs e)
        {
            //录制失败
            App.Current.Dispatcher.Invoke(delegate {
                FileResult.Text = "录制失败";
                Start.IsEnabled = true;
                Pause.IsEnabled = false;
                Pause.Content = "暂停";
                Stop.IsEnabled = false;
                CleanupResources();
            });
        }

        private void _recorder_OnRecordingComplete(object sender, RecordingCompleteEventArgs e)
        {
            //录制完成

            App.Current.Dispatcher.Invoke(delegate {
                string filePath = e.FilePath;
                FileResult.Text = filePath;
                Start.IsEnabled = true;
                Pause.IsEnabled = false;
                Pause.Content = "暂停";
                Stop.IsEnabled = false;
                CleanupResources();
            });

        }

        private void UpdateProgress()
        {
            App.Current.Dispatcher.Invoke(delegate
            {
                TimeStamp.Text = TimeSpan.FromSeconds(_secondsElapsed).ToString();
            });
        }
        private void CleanupResources()
        {
            _timer?.Stop();
            _timer = null;
            _secondsElapsed = 0;
            _recorder?.Dispose();
            _recorder = null;
        }
        private void Stop_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                _recorder.Stop();
                _timer?.Stop();
                _timer = null;
                _secondsElapsed = 0;
                Start.IsEnabled = true;
                Stop.IsEnabled = false;
                Pause.IsEnabled = false;
            }
            catch (Exception ex)
            {
                Start.IsEnabled = false;
                Stop.IsEnabled = true;
                Pause.IsEnabled = true;
                MessageBox.Show(ex.Message);
            }
        }

        private void Pause_Click(object sender, RoutedEventArgs e)
        {
            if (_recorder.Status == RecorderStatus.Paused)
            {
                _recorder.Resume();
                return;
            }
            _recorder.Pause();
        }

        private void SaveAs_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string filepath = FileResult.Text;
                if (string.IsNullOrEmpty(filepath)) throw new Exception("请先录制视频");
                if (!File.Exists(filepath)) throw new Exception("视频不存在");

                SaveFileDialog s = new SaveFileDialog();
                s.Filter = "视频文件|*.mp4";
                s.FileName=Path.GetFileName(filepath);
                s.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                if (s.ShowDialog() == true)
                {
                    string pathFile = s.FileName;
                    File.Copy(filepath, pathFile, true);
                    File.Delete(filepath);
                    MessageBox.Show("保存成功");

                    //using (NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", "GEWorker", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.None))
                    //{
                    //    pipeClient.Connect(2000);
                    //    using (StreamWriter sw = new StreamWriter(pipeClient))
                    //    {
                    //        sw.WriteLine(pathFile);
                    //        sw.Flush();
                    //    }
                    //}
                    //Environment.Exit(0);//强退程序
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void MaterialWindow_Closed(object sender, EventArgs e)
        {
            try
            {
                //using (NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", "GEWorker", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.None))
                //{
                //    pipeClient.Connect(2000);
                //    using (StreamWriter sw = new StreamWriter(pipeClient))
                //    {
                //        sw.WriteLine("");
                //        sw.Flush();
                //    }
                //}
            }
            catch { }
        }
    }