Windows冷知识:最小化远程桌面与ffmpeg

Windows冷知识:最小化远程桌面与ffmpeg -- WhiteNight's Site

标签:ffmpeg, Windows, 冷知识

最小化远程桌面会中断ffmpeg的录制

我觉得这个应该算冷知识吧。

前情提要
远程桌面连接至虚拟机,并通过ffmpeg录屏

这里可能不太好理解。

我在用PC A。有一台远程的虚拟机PC B正在执行某些任务。我现在想在PC B上面通过ffmpeg录屏来记录这个任务的执行过程。那么我肯定是通过远程桌面连接到PC B上面,然后在PC B上面执行ffmpeg。

ffmpeg -f gdigrab -i desktop output.mp4

最小化窗口后,ffmpeg终止录制
couldn't get cursor info、does nost contain any stream

你都远程桌面了,那肯定是不想在录制的过程中还一直盯着PC B。正常来说,你肯定是最小化PC B的远程窗口,把它挂后台放那录制然后做其他的事情去。

问题来了,当你切换回去远程桌面的时候,你发现录制失败了。报的错都是些coutldn't get cursor info,not contain any stream之类的错误。ffmpeg也没有输出output.mp4这个文件。

问题出在哪呢?

远程桌面的优化机制
最小化后进入无GUI模式

是的,Windows为了优化,在窗口最小化后窗口会进入无GUI模式。当你重新切换到这个窗口的时候又会让它进入到GUI模式。

这点平时不注意还是很难发现的,毕竟用户从体感上来说就是无缝切换。但还有个问题,这和ffmpeg有什么关系?我们用的是远程桌面,远程桌面关了并不会导致虚拟机关机,也不会关闭虚拟机的显示屏。不过远程连接的时候被连接的物理机会被弹回到登录界面,这点还是我偶然发现的。

解决方案
不点最小化,完事

一般来说平时也很难碰到ffmpeg+远程桌面的场景。如果真碰到了,不点最小化那个按钮就行。我试了几次,发现它的触发机制应该是点击"最小化"按钮之后就会把GUI停掉。

所以你不点它就行了。你可以把窗口拖的很小;也可以不全屏,通过点击窗口外面的部分来聚焦新的窗口,此时远程桌面只是在屏幕上显示的"层级"变了,它的GUI界面还是在正常跑着。

为什么ffmpeg录制会中断
两种想法

讲真这都是推测,我有两种思路。

写者注
俺寻思.....

  • 我们的ffmpeg的源设置为desktop,即桌面。桌面这个最大的GUI界面都没了,那ffmpeg肯定找不到能捕获的源,所以才会中断录制。

但是这个思路不太对劲,就像我们上面说的那样,你改远程桌面的分辨率也好,关闭远程桌面也好,都不会影响到被连接主机的桌面。你通过远程连接在cmd输个指令跑个python,远程连接关闭之后python程序也会跟着停吗?很明显不会。

还有一种思路

  • gdigrab是基于Win32的GDI,即图形显示接口的屏幕捕获设备。如果远程连接最小化,此时物理机处于登录界面,而远程桌面又进入的无GUI模式。那么此时GDI可能处于关闭状态------因为GDI找不到任何一个可用的GUI界面。导致gdigrab捕获着捕获着,发现接口关了,所以ffmpeg录制中断。

我个人觉得后者更合理些。不过我也没看源码,而且可能和RDP的实现原理有关。远程桌面到底是将啥推流给你的,这我也还没仔细看过。以后有时间可能再补充补充,这里就先过了。

相关推荐
Li Ming&4 小时前
Windows Server 2019 操作系统《保姆级安装教程》
windows·信息与通信
陈天伟教授7 小时前
Windows操作技巧 -03
windows
TechExplorer3658 小时前
Windows 隐藏导航窗格【主文件夹】、【图库】、【OneDrive】
windows·onedrive
我一定会有钱8 小时前
官网谷歌浏览器离线安装包一键下载
windows
易点云徐源11 小时前
(已解决)Foxmail打开后2分钟左右崩溃
windows·foxmail
其实防守也摸鱼11 小时前
每天一个知识点——RCE漏洞
运维·服务器·数据库·windows·安全·github·漏洞
江湖人称菠萝包12 小时前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter6-动态链接库
windows·笔记
2601_9623649714 小时前
重装系统后,Windows Hello 为什么要重新录入人脸?
windows·安全·电脑
水饺编程14 小时前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio
三玖诶16 小时前
DeepSeek Launcher:内置 Node.js,为什么首次启动仍需要网络?
windows·开源·deepseek