为什么整个屏幕、窗口和单个选项卡的屏幕录制会导致文件大小明显不同?

问题描述

我正在将屏幕捕获集成到我正在扩展的框架中。我通过 getdisplayMedia 方法请求屏幕的 MediaStream 并使用 RecordRTC library 进行记录。 Firefox 和 Chrome 都允许用户指定要共享的确切内容,例如整个屏幕、特定窗口或单个选项卡(仅限 Chrome)。我注意到这里的选择会显着影响生成的视频文件大小。下面的结果来自 30 秒的录音,其中浏览器窗口填满了整个屏幕。


Chrome:

整个屏幕:3.44 MB

窗口:0.81 MB

标签:0.15 MB


火狐:

整个屏幕:5.23 MB

窗口:3.56 MB


当然,当录制与整个屏幕相对的窗口时,分辨率会稍微变小。就像 firefox 录制一样:整个屏幕 = 2560x1440 和窗口 = 2488x1376,但我认为这不会有太大的不同。

我曾尝试查看 Chromium 源代码(因为它是开源的且基于 Chrome)以找出不同选项之间的区别,但似乎无法弄清楚发生了什么。我的 Google 搜索也没有成功。

有谁知道这些巨大差异的原因是什么?

如果这有所不同,我使用的是 Ubuntu 20.04。

解决方法

这是因为当你记录窗口或标签时,浏览器负责内容的渲染。所以它知道什么时候画了新的东西,什么时候什么都没有画。

您可以在 Chrome 中清楚地看到这一点,他们甚至会在 5 秒后在没有动画的选项卡捕获的 VideoTrack 上触发 mute 事件。

因此,他们知道没有任何新内容被绘制,他们不会将任何内容传递给流,而是创建一个持续时间为长时间的单帧。

然而,在捕获桌面时,他们不再负责渲染,也不知道是否发生了变化:他们必须将每一帧作为新帧传递。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...