webrtc入门:2.使用getDisplayMedia获取屏幕桌面流

本文介绍了如何通过WebRTC的getDisplayMedia方法在浏览器中获取桌面或特定程序的共享流,对比了getUserMedia获取摄像头数据的方法。通过几行简单的JavaScript代码,可以在网页上实现桌面或应用的实时演示,方便快捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在会议系统中,我们有时不仅仅需要摄像头的数据,在一些场景下,需要演示桌面上的程序,同样的webrtc也提供了这个功能,而且都可以从浏览器上直接获取。

前面中,我们通过getUserMedia就可以获取摄像头和麦克风的数据,在webrtc中,获取桌面或者指定某个程序,通过getDisplayMedia可以得到。

main.js

#获取显示桌面数据的video 
const video = document.querySelector('video');

#getUserMedia 参数,这里只获取视频
const constraints = {
  audio: false,
  video: true
};

把桌面的数据展示在video上
function handleSuccess(stream) {
  window.stream = stream;
  video.srcObject = stream;
}

#错误处理
function handleError(error) {
  console.log('navigator.MediaDevices.getUserMedia error: ', error.message, error.name);
}

#获取桌面程序数据并回调

navigator.mediaDevices.getDisplayMedia(constraints).then(handleSuccess).catch(handleError);

选择整个屏幕,或者某个窗口。

在这里插入图片描述
我这里选择的是单个窗口,Android Studio 开始进行播放。

在这里插入图片描述

这里对比一下,在获取摄像头的数据是navigator.mediaDevices.getUserMedia(constraints) 获取桌面的数据是navigator.mediaDevices.getDisplayMedia(constraints),都是从navigator.mediaDevices 出发,也就是navigator.mediaDevices 管理着从哪里获取媒体数据。

从这两章的内容,我们可以看出来,使用浏览器来调用摄像头或者是桌面的数据是非常简单的,只要短短的几句话就可以把摄像头和桌面的数据显示出来,非常的方便。

这节的demo在这里

### 如何解决 Maven 项目中 `org.webrtc:google-webrtc:1.0.32006` 依赖缺失问题 当遇到 `org.webrtc:google-webrtc:1.0.32006` 依赖无法找到的情况时,可以采取以下措施来解决问题。 #### 配置仓库地址 确保项目的构建配置文件正确指定了所需的仓库位置。对于 Gradle 构建工具,在根目录下的 `build.gradle.kts` 文件内添加特定的 Maven 仓库: ```kotlin dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { maven { url = uri("https://raw.githubusercontent.com/alexgreench/google-webrtc/master") } google() mavenCentral() } } ``` 上述设置会优先尝试从指定的 GitHub 地址下载 WebRTC 库,并且还会检查 Google 的官方存储库以及中央 Maven 存储库[^1]。 #### 更新版本号 确认使用的版本号是最新的稳定版。如果当前使用的是较旧或不存在的版本,则可能会导致依赖解析失败。根据最新信息显示,应该使用如下声明方式引入该依赖项: ```groovy implementation 'org.webrtc:google-webrtc:1.0.32006' ``` 此命令适用于 Groovy DSL 编写的 build 脚本;如果是 Kotlin DSL 则应写作 `implementation("org.webrtc:google-webrtc:1.0.32006")`[^4]。 #### 清理缓存并重新同步 有时本地缓存中的数据可能已损坏或是过期,这也会引起依赖加载错误。执行清理操作可以帮助排除此类情况带来的干扰。可以通过 IDE 提供的功能或者命令行运行相应的指令来进行清理工作。例如,在 Android Studio 中可以选择菜单栏里的 “File -> Invalidate Caches / Restart”,也可以通过终端输入 gradlew clean 命令完成同样的目的。 另外需要注意的是,某些情况下即使远程服务器上有资源可用,但如果之前有过查找失败的经历,那么这些记录会被保存到本地磁盘上作为缓存的一部分而阻止后续成功的请求被处理。因此建议删除 `.gradle/caches/modules-2/files-2.1/org.webrtc/google-webrtc/*` 下的相关条目后再重试一次同步过程[^5]。 #### 添加额外的镜像源 考虑到网络连接不稳定等因素可能导致访问默认仓库的速度慢甚至不可达的问题,可以在 settings.xml 或者 buildscript 中增加阿里云或其他国内常用的 Maven 镜像站点链接以提高获取速度和成功率: ```xml <mirrors> <mirror> <id>aliyun</id> <name>Aliyun Maven</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 以上 XML 片段适合于 Apache Maven 用户;而对于采用 Gradle 的开发者来说则需调整为对应的语法结构[^3]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值