capturedsurfacecontrol 不适用于 html5,因为它是 android 13(api 33)原生 sdk 类,属 java/kotlin 层,与 web 标准无关;html5 录屏仅通过 getdisplaymedia() 等受限 api 实现“只读式捕获”,无法直接控制底层 surface。

HTML5 本身不支持 CapturedSurfaceControl,这个类并不存在于 Web 标准或任何主流浏览器的 API 中。
为什么 CapturedSurfaceControl 不适用于 HTML5
CapturedSurfaceControl 是 Android 平台(自 API 33 / Android 13 起)提供的原生系统 API,用于在屏幕录制(MediaProjection)过程中动态控制捕获表面的行为,例如调整分辨率、帧率、旋转或暂停/恢复画面流。它属于 Java/Kotlin 层的 Android SDK,运行在 Android 系统服务与应用进程之间,完全脱离 Web 环境。
浏览器(如 Chrome、Edge)在 Android 上进行录屏时,底层确实可能调用 MediaProjection,但 Web API(如 getDisplayMedia())仅暴露了受控的、安全沙箱内的接口,**不提供对底层 Surface 或录制会话的直接控制权**。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
HTML5 录屏可用的实际控制方式
在 Web 端,你只能通过标准媒体捕获 API 和约束(Constraints)间接影响画面输出,且受限于浏览器实现和操作系统策略:
-
选择源类型:用
navigator.mediaDevices.getDisplayMedia({ video: true })请求屏幕、窗口或标签页,但无法指定具体 Surface 或控制其渲染状态。 -
设置媒体约束:可传入
video约束对象,例如:
{ width: { ideal: 1920 }, height: { ideal: 1080 }, frameRate: { max: 30 } }
浏览器会尽力满足,但不保证生效,也不能动态修改已开始的流。 -
暂停/恢复轨道:可通过
track.enabled = false暂停视频轨道(视觉上黑屏,但录制仍在继续传输空帧),这不是真正“控制 Surface”,而是控制媒体轨道输出。 -
后期处理:用
CanvasRenderingContext2D或WebGL捕获video元素帧,再绘制/缩放/滤镜,但这属于客户端渲染,不影响原始录制流。
若需深度控制,需绕过纯 Web 方案
真正的 Surface 级控制必须脱离浏览器沙箱:
-
开发 Android 原生 App:使用
MediaProjection+CapturedSurfaceControl,通过VirtualDisplay将画面输出到 Surface,再用MediaCodec编码或共享给其他组件。 -
混合方案(WebView + 原生桥接):在 Android App 内嵌 WebView,通过 JSBridge 向网页暴露有限的控制能力(如“请求降低分辨率”),由原生层执行
CapturedSurfaceControl.setResolution()等操作。 - 桌面端替代思路:在 Electron 或 Tauri 应用中,调用系统录屏 API(如 Windows Graphics Capture / macOS Screen Capture Kit),再通过 IPC 暴露控制接口给前端。
不复杂但容易忽略:Web 录屏是“只读式捕获”,安全模型决定了它不会开放底层 Surface 控制权。需要精细控制,就得离开浏览器,走进原生或混合开发。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










