c# 实现录屏
录屏,录屏资源销毁要放在线程中执行
public class ScreenVideoRecorder { private Recorder recorder; public ScreenVideoRecorder() { } /// <summary> /// 录屏 /// </summary> /// <param name="recordPath"></param> /// <param name="taskid"></param> /// <param name="qualityLevel">0low 1middle 2high</param> public void CreateRecording(string recordPath, string taskid, int qualityLevel = 0) { if (recorder != null) { EndRecording(); return; } RecorderOptions options = new RecorderOptions { VideoEncoderOptions = new VideoEncoderOptions { Bitrate = 8000 * 1000, Framerate = 10, IsFixedFramerate = true, Quality = 30, IsLowLatencyEnabled = true }, }; switch (qualityLevel) { case 0: options = new RecorderOptions { VideoEncoderOptions = new VideoEncoderOptions { Bitrate = 8000 * 1000, Framerate = 20, IsFixedFramerate = true, Quality = 30, IsLowLatencyEnabled = true }, }; break; case 1: options = new RecorderOptions { VideoEncoderOptions = new VideoEncoderOptions { Bitrate = 8000 * 1000, Framerate = 30, IsFixedFramerate = true, Quality = 50, IsLowLatencyEnabled = true }, }; break; case 2: options = new RecorderOptions { VideoEncoderOptions = new VideoEncoderOptions { Bitrate = 8000 * 1000, Framerate = 50, IsFixedFramerate = true, Quality = 70, IsLowLatencyEnabled = true }, }; break; } string timestamp = DateTime.Now.ToString(" yyyy-MM-dd HH-mm-ss"); string date = DateTime.Now.ToString("yyyy-MM-dd"); string videoPath = Path.Combine(recordPath, date, taskid + timestamp + ".mp4"); if (recorder == null) { recorder = Recorder.CreateRecorder(options); recorder.OnRecordingComplete += Rec_OnRecordingComplete; recorder.OnRecordingFailed += Rec_OnRecordingFailed; recorder.OnStatusChanged += Rec_OnStatusChanged; //Record to a file recorder.Record(videoPath); } } public void EndRecording() { recorder?.Stop(); } private void Rec_OnRecordingComplete(object sender, RecordingCompleteEventArgs e) { //Get the file path if recorded to a file string path = e.FilePath; Task.Run(() => { recorder?.Dispose(); recorder = null; }); } private void Rec_OnRecordingFailed(object sender, RecordingFailedEventArgs e) { string error = e.Error; Task.Run(() => { recorder?.Dispose(); recorder = null; }); } private void Rec_OnStatusChanged(object sender, RecordingStatusEventArgs e) { RecorderStatus status = e.Status; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗