一、前言

上一篇文章已经知道了FFmpeg的录屏命令格式,那么,如何自己开发c#程序,实现录屏功能呢?其实单纯利用c#开发录屏软件,方法有很多:

  • 可以基于Accord(AForge)自行开发,思路就是以一定时间间隔捕获屏幕,再利用Accord实现高效的视频编码等,但是这样做一是稍微复杂了一点,二是不知道怎么利用GPU加速,毕竟占CPU太高的话,影响使用。大神可以自行研究一下。
  • 可以基于FFmpeg.AutoGen开发,这个可以看做是FFmpeg的C#版吧,但是这个东西对.Net Framework4.5以上兼容性不好啊,原作者貌似现在也没解决这个问题,总之就是没研究明白,还浪费了不少时间,先放弃了。
  • 可以基于OpencvSharp,原理与Accord类似,自己实现录屏的捕获桌面、编码等全过程,没试过,不知道效率怎么样,不过以opencv的尿性,应该值得信赖吧。
  • 可以基于ScnLib,这是一家公司开发的录屏SDK,有各种语言实现的版本,能试用(有水印),东西好是真的好,但是也真贵啊,本着程序员自给自足的精神,花钱买它真是羞耻。(土豪忽略)
  • 可以基于FFmpeg.exe,c#程序后台调用这个进程,实现录屏,实际上就是借用FFmpeg.exe来实现录屏,这个方法简单,而且人家FFmpeg做的那么好,干嘛不用呢,节约时间,开干吧。

二、方法

通过调用系统API加载ffmpeg.exe,向其模拟输入命令的的方式进行录屏录音,然后模拟输入q用于暂停录制。具体实现方式如下,直接上代码:

    public class ScreenRecordHelper{#region 模拟控制台信号需要使用的API[DllImport("kernel32.dll")]static extern bool GenerateConsoleCtrlEvent(int dwCtrlEvent, int dwProcessGroupId);[DllImport("kernel32.dll")]static extern bool SetConsoleCtrlHandler(IntPtr handlerRoutine, bool add);[DllImport("kernel32.dll")]static extern bool AttachConsole(int dwProcessId);[DllImport("kernel32.dll")]static extern bool FreeConsole();#endregion//ffmpeg进程static Process ffmpegProcess = new Process();//ffmpeg.exe实体文件路径,建议把ffmpeg.exe及其配套放在自己的Debug目录下static string ffmpegPath = AppDomain.CurrentDomain.BaseDirectory + "bin\\ffmpeg.exe";//static string ffmpegPath = @"C:\Users\awang\Desktop\ScreenRecord\ffmpeg-N-101429-g54e5d21aca-win64-gpl-shared-vulkan\bin\ffmpeg.exe";/// <summary>/// 开始录制/// </summary>/// <param name="outFilePath">录屏文件保存路径</param>public static void Start(string outFilePath){if (File.Exists(outFilePath)){File.Delete(outFilePath);}string arguments = "-f gdigrab -framerate 15 -r 15 -i desktop -pix_fmt yuv420p -f dshow -i audio=" + "\"virtual-audio-capturer\"" + " -vcodec" + " h264_qsv" + " \"" + outFilePath + "\"";/*转码,* 视频录制设备:gdigrab;* 录制对象:整个桌面desktop;* 音频录制方式:dshow;* 音频输入:virtual-audio-capturer;* 视频编码格式:h.264;* 视频帧率:15;* 硬件加速:若N卡加速:h264_nvenc;若集显加速:h264_qsv;若软件编码:libx264;*/ProcessStartInfo startInfo = new ProcessStartInfo(ffmpegPath);startInfo.WindowStyle = ProcessWindowStyle.Normal;startInfo.Arguments = arguments;startInfo.UseShellExecute = false;//不使用操作系统外壳程序启动startInfo.RedirectStandardError = true;//重定向标准错误流startInfo.CreateNoWindow = true;//默认不显示窗口startInfo.RedirectStandardInput = true;//启用模拟该进程控制台输入的开关//startInfo.RedirectStandardOutput = true;ffmpegProcess.ErrorDataReceived += new DataReceivedEventHandler(Output);//把FFmpeg的输出写到StandardError流中ffmpegProcess.StartInfo = startInfo;ffmpegProcess.Start();//启动ffmpegProcess.BeginErrorReadLine();//开始异步读取输出}/// <summary>/// 停止录制/// </summary>public static void Stop(){ffmpegProcess.StandardInput.WriteLine("q");//在这个进程的控制台中模拟输入q,用于停止录制ffmpegProcess.Close();ffmpegProcess.Dispose();}/// <summary>/// 控制台输出信息/// </summary>private static void Output(object sender, DataReceivedEventArgs e){if (!String.IsNullOrEmpty(e.Data)){Console.WriteLine(e.Data.ToString());}}}

搞定 舒服了

FFmpeg下载安装及命令说明见我上一篇:https://blog.csdn.net/awangdea99/article/details/114555743?spm=1001.2014.3001.5501
代码借鉴了:https://blog.csdn.net/HW140701/article/details/84185018

C#基于FFmpeg实现录屏功能相关推荐

  1. QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(一)

    QT软件开发-基于FFMPEG设计录屏与rtsp.rtmp推流软件(支持桌面与摄像头)(一) https://xiaolong.blog.csdn.net/article/details/126954 ...

  2. QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(四)

    QT软件开发-基于FFMPEG设计录屏与rtsp.rtmp推流软件(支持桌面与摄像头)(一) https://xiaolong.blog.csdn.net/article/details/126954 ...

  3. 前端使用html5、ffmpeg实现录屏摄像等功能

    前段时间做一个windows的桌面应用,vue + electron,涉及到录屏和摄像功能,网上相关的文档蛮少的给需要的人一些参考 如果文章描写有误或者还有更好的方法,请留言告诉我,笔芯 (´▽`ʃ♡ ...

  4. html5桌面录制,前端使用html5、ffmpeg实现录屏摄像等功能

    前段时间做一个windows的桌面应用,vue + electron,涉及到录屏和摄像功能,网上相关的文档蛮少的给需要的人一些参考 如果文章描写有误或者还有更好的方法,请留言告诉我,笔芯 (´▽`ʃ♡ ...

  5. android 实现手机录屏功能,基于MediaProjection实现Android移动手机截屏和录屏功能

    Android软件应用经常要求实现截屏和录屏的功能,那么如何实现Android软件截屏和录屏功能呢?本文将介绍基于MediaProjection实现Android移动手机截屏和录屏功能. MediaP ...

  6. 【Springboot】录屏功能实现

    参考链接: 录屏功能实现主要参考 https://gitee.com/devwangrui/java-screen-capture 这里主要贴上修改后的几个代码,其他的就是用上面这位老哥的代码 1.R ...

  7. Airtest新增iOS、Windows录屏功能,真香

    1. 前言 在录屏这块,Airtest之前一直仅支持了Android设备,但Airtest1.2.9的新版录屏功能里,新增了iOS和Windows的录屏支持. 下文我们将详细了解这个新的录屏功能,以及 ...

  8. electron+ffmpeg+VUE3 录屏 推流

    录屏推流 webrtc播放 简化版obs推流 electron+ffmpeg+vue3 原创录屏推流源代码 npm install 安装成功后 npm run dev 就可以跑起来 功能 录屏推流,录 ...

  9. 苹果录屏功能没有声音_其实苹果手机也有录屏功能!简单操作几步,就能轻松开启...

    现在手机中的娱乐方式越来越多了,大家遇到有趣的事情就想分享给朋友,但是一些视频不能直接分享链接,还是挺麻烦的. 不过我们可以通过录屏的方式来进行分享的,其实苹果手机就自带录屏工具,简单操作几步,就能轻 ...

  10. android 手机录屏功能,手机自带录屏功能在哪里找?轻松搞定屏幕录制

    手机的录屏功能如何使用?智能手机发展到现在,除了无线通话功能.讯息发送功能之外,又逐渐发展出拍照功能.上网功能.各类应用交互功能.尤其近几年在手机上看视频成为打发碎片化时间的重要消遣,在手机上录屏的需 ...

最新文章

  1. 怎样删除usb计算机连接网络打印机驱动,惠普激光打印机安装驱动时报“跟这台计算机连接的一个 USB 设备运行不正...
  2. Django学习笔记(5)---ForeignKey
  3. 直播预告 | 清华大学博士生牛艺霖:常识知识获取与常识推理
  4. Markdown 语法简介
  5. Unity的IOS接入新浪微博
  6. python困境_学习 Python 编程的三种困境
  7. Ubuntu 20.04 锐捷客户端安装记录
  8. 单片机矩阵键盘扫描程序c语言,51单片机矩阵键盘扫描程序
  9. pt100铂电阻型号_铂热电阻型号及铂热电阻接线方法
  10. xlwings对excle文档设置条件格式
  11. Elasticsearch:Apache spark 大数据集成
  12. java 直方图_Java直方图
  13. Knowledge based | 如何获取某类肿瘤中所有已被报道的相关突变基因?
  14. 88E1111配置及使用
  15. ❤️ 万字Python MySQL从入门到精通详细教程❤️ 再也不用担心学不会数据库了❤️
  16. 【强化学习论文合集】三十三.2021国际人工智能联合会议论文(IJCAI2021)
  17. 接口请求报错 504 Gateway Time-out
  18. Linux: 目录和文件
  19. Android应用程序未安装错误:Installation error: INSTALL_FAILED_UID_CHANGED
  20. 【数学】点到平面距离推导

热门文章

  1. java万年历制作_【转】用EXCEL制作一份万年历方法
  2. sam-ba_2.15 使用usb Device 连接AT91SAM9261EK开发板
  3. 后缀–ize_动词后加ize的后缀有什么作用
  4. Python的缩进问题unindent does not match any outer indentation level
  5. 苹果修改wifi密码登陆服务器密码,iphone手机修改wifi密码
  6. Java 拾遗补阙 ----- 深入了解父类引用指向子类对象
  7. CTFHUB刷题 密码口令/默认口令
  8. Python入门教程(从小白到高级)(新版)
  9. 统计学的Python实现-005:最大值、最小值、极差
  10. (专升本)Excel(自动填充数据)