You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django应用中用Screen Capture API指定特定应用窗口共享的方法咨询

如何通过Screen Capture API指定共享特定桌面应用窗口

核心限制说明

Screen Capture API出于隐私安全考虑,不允许网页直接指定要共享的特定窗口——必须由用户手动在浏览器提供的选择器中选择目标内容。但我们可以通过参数约束缩小选择范围,或结合其他方案实现近似需求。

方案1:约束选择器仅显示窗口选项

使用getDisplayMedia的displaySurface参数,将可选范围限制为仅桌面窗口,避免用户误选屏幕或浏览器标签页。示例代码(前端JavaScript):

async function startWindowCapture() {
  try {
    // 仅允许选择窗口
    const constraints = {
      video: {
        displaySurface: "window"
      }
    };
    const stream = await navigator.mediaDevices.getDisplayMedia(constraints);
    // 后续处理:将流传递给Django后端或在页面展示
    // 例如:document.getElementById('video').srcObject = stream;
  } catch (error) {
    console.error("窗口捕获失败:", error);
  }
}

调用此方法后,浏览器会弹出仅包含桌面应用窗口的选择器,用户只需点击目标应用即可完成共享。

方案2:自动指定特定窗口(需额外工具)

如果需要无需用户手动选择、直接定位到特定应用窗口,Web原生API无法实现(浏览器无权读取系统窗口列表),需借助以下方式:

  • 桌面框架包装:用Electron、NW.js等框架将你的Django前端页面打包为桌面应用,这类框架可调用系统API获取窗口列表与标识,再通过扩展的Screen Capture能力指定目标窗口。
  • 本地代理程序:开发一个轻量本地程序(如Python、Go编写),与Django前端通过WebSocket或HTTP通信,由本地程序获取系统窗口信息、触发指定窗口的捕获,再将媒体流传递给网页。

参考文档核心内容(翻译)

屏幕捕获API允许用户选择并捕获显示器或其部分内容(如窗口)作为媒体流,可实时展示或保存为文件。API核心是navigator.mediaDevices.getDisplayMedia()方法,该方法返回一个Promise,解析后得到包含捕获媒体流的MediaStream对象。
出于隐私与安全要求,getDisplayMedia()必须由用户交互(如按钮点击)触发,浏览器会向用户展示选择器以确认共享内容。

选择器示例截图

屏幕捕获窗口选择器

内容的提问来源于stack exchange,提问作者Thanh Phú Võ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:02:45