【js】navigator.mediaDevices.getDisplayMedia实现屏幕共享:

news2024/11/19 18:28:01

文章目录

        • 一、效果图:
        • 二、实现思路:
        • 三、实现代码:


一、效果图:

在这里插入图片描述

二、实现思路:

文档:
【MDN】https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/mediaDevices
web技术分享| WebRTC 实现屏幕共享
面试官:纯前端如何实现录屏并保存视频到本地?

三、实现代码:
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
</head>

<body>
  <div>
    <video id="gum-local" autoplay playsinline muted style="width: 400px;height: 400px;border: 1px solid red;"></video>
    <button id="startButton" disabled>Start</button>
    <div id="errorMsg"></div>
  </div>
  <script>
    const startButton = document.getElementById('startButton');
    if ((navigator.mediaDevices && 'getDisplayMedia' in navigator.mediaDevices)) {
      startButton.disabled = false;
    } else {
      errorMsg('不支持getDisplayMedia');
    }
    startButton.addEventListener('click', () => {
      navigator.mediaDevices.getDisplayMedia({ video: true }).then(handleSuccess, handleError);
    });

    function handleSuccess(stream) {
      startButton.disabled = true;

      // 将共享屏幕内容显示到video里面
      const video = document.querySelector('video');
      video.srcObject = stream;

      // 检测用户已停止共享屏幕,通过浏览器UI共享屏幕。
      stream.getVideoTracks()[0].addEventListener('ended', () => {
        errorMsg('用户已结束共享屏幕');
        startButton.disabled = false;
      });

      // const mime = MediaRecorder.isTypeSupported("video/webm;codecs=h264") ? "video/webm;codecs=h264" : "video/webm";
      // const mediaRecorder = new MediaRecorder(stream, { mimeType: mime });
      // const chunks = [];
      // mediaRecorder.addEventListener("dataavailable", function (e) { chunks.push(e.data); });
      // mediaRecorder.addEventListener("stop", () => {
      //   const blob = new Blob(chunks, { type: chunks[0].type });
      //   const url = URL.createObjectURL(blob);
      //   const a = document.createElement("a");
      //   a.href = url;
      //   a.download = "video.webm";
      //   a.click();
      // });
      // mediaRecorder.start();
    }

    function handleError(error) {
      errorMsg(`getDisplayMedia error: ${error.name}`, error);
    }

    function errorMsg(msg, error) {
      const errorElement = document.querySelector('#errorMsg');
      errorElement.innerHTML += `<p>${msg}</p>`;
      if (typeof error !== 'undefined') {
        console.error(error);
      }
    }
  </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1032055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity中Shader通道ColorMask

文章目录 [TOC](文章目录) 前言一、ColorMask是用来干什么的二、怎么做到和 Unity UI 中的 Shader 一样根据UI层级自动适配Shader中模板测试值1、借鉴Unity官方的 UI Shader 前言 Unity中Shader通道ColorMask 一、ColorMask是用来干什么的 ColorMask RGB | A | 0 | R、G、B、…

无法解析插件 org.apache.maven.plugins:maven-clean-plugin:3.2.0 尝试使用 -U

无法解析插件 org.apache.maven.plugins:maven-clean-plugin:3.2.0 尝试使用 -U 报错如下&#xff1a; 解决方案&#xff1a;在文件夹里面找到报错的文件&#xff0c;删除&#xff0c;然后刷新.pom文件&#xff0c;让maven重新下载即可

共享WIFI项目新时代:代理商如何玩转下半场?

在21世纪的信息化时代&#xff0c;科技的发展日新月异&#xff0c;人们的生活方式也随之发生了翻天覆地的变化。其中&#xff0c;共享经济作为一种新型的经济形态&#xff0c;正在全球范围内迅速发展。共享WiFi作为共享经济的一个重要组成部分&#xff0c;也在下半场的竞争中&a…

最佳开源DEM全国、省、市、县DEM数据分享

数据简介 哥白尼数字高程模型(Copernicus DEM, COP-DEM)由欧洲航天局发布&#xff0c;被行业公认为是目前最佳开源DEM&#xff0c;分辨率有30米和90米两种&#xff0c;该数据来源于WorldDEM&#xff0c;WorldDEM产品是基于0.4弧秒(对应分辨率10-12米)的TanDEM-X DEM处理后得到…

亚马逊,沃尔玛,塔吉特测评补单,撸卡撸货采退高成功率的技巧

做撸的只有在安全稳定的环境下才能不被平台检测&#xff0c;造成被砍单或F号&#xff0c;所以在没有专业团队指导下&#xff0c;建议大家不要轻易尝试&#xff0c;毕竟试错和时间成本才是最大的 亚马逊风控点很多&#xff0c;卖家和工作室想要实现伪装度足够高的环境&#xff…

qt creator创建项目和添加图片资源

目录 一、创建项目 二、放上需要的图片 三、再次打开项目 四、运行项目 一、创建项目 二、放上需要的图片 在创建的项目里新建一个文件夹&#xff0c;里面放上需要的图片 右击项目点击add new 去第一步加的图片的文件夹&#xff0c;把所有图片都加载进来 然后去ui文件里就可…

网络电视机顶盒怎么样?百元价位最佳网络机顶盒排名

网络电视机顶盒无疑是家家户户必备的&#xff0c;用网络机顶盒可以看电视&#xff0c;玩游戏&#xff0c;上网课&#xff0c;K歌&#xff0c;购物等&#xff0c;你认为网络电视机顶盒怎么样&#xff1f;值不值得买&#xff1f;本期我盘点了百元价位段最佳网络机顶盒排名&#x…

基于HTML5架构的综合管廊系统网络结构设计

摘 要&#xff1a;从网络拓扑结构、开放式实时以太网协议、控制层系统配置方面介绍了综合管廊的系统网络架构设计&#xff0c;分析了无线网络特性&#xff0c;阐述了基于HTML5架构所能实现的功能的初步构想&#xff0c;以便于综合管廊运维人员巡检&#xff0c;确保管廊本体安全…

Splashtop 的卓越安全性获得 ISO 27001 认证

在快速发展的数字环境中&#xff0c;实施强有力的安全措施尤为重要。Splashtop 始终优先考虑安全性&#xff0c;一如既往地在远程访问行业坚持以身作则。 我们最近宣布 Splashtop 已获得 ISO/IEC 27001 认证&#xff0c;证明了我们对信息安全、数据保护和合规性最高标准的坚定…

BSV 上用于通用计算的隐私非交互式赏金

如何安全地外包任何计算 我们提出了一种新颖的赏金机制&#xff0c;可以在区块链上安全私密地外包任意计算。解决方案和付款的交换是原子的和无需信任的&#xff1a;赏金发布者获得解决方案而赏金收集者获得奖励&#xff0c;或者两者都不发生。赏金发布者部署一个智能合约&…

CTF--攻防世界-杂项入门第一课

这是第一次接触杂项这个方向&#xff0c;所以就是根据writeup解的题&#xff0c;没有什么自己的思路&#xff0c;只是写一篇文章来记录一下解题过程。 下载题目后拿到一张图片&#xff0c;确实挺迷惑的&#xff0c;不知从何下手&#xff0c;根据大家的思路都是看看有没有隐写&a…

如何提升网站排名优化(百度SEO优化,轻松提升排名)

在当今互联网时代&#xff0c;拥有一个优秀的网站是很重要的。而一个网站如果能够在搜索引擎上的排名很靠前&#xff0c;那么将会带来更多的流量、更多的用户和更多的利润。那么如何提升网站排名优化呢&#xff1f;蘑菇号www.mooogu.cn 百度SEO优化的5个规则 1.关键词选取要合…

嵌入式MCU都有什么高级用法?

嵌入式MCU都有什么高级用法&#xff1f; 您举的几个例子&#xff0c;确实是MCU外设的一些高端玩法。只是不知道您是否想过&#xff0c;既然这些机制是被 人设计出来的&#xff0c;那它就是种标准用法。从微控制器的发展历程来看&#xff0c;许多硬件机制都是有了实际 需求后才…

面的嵌入式基础知识总结

面的嵌入式基础知识总结 做嵌入式系统开发&#xff0c;经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。 这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。 最近很多小伙伴找我&#xff0c;说想要一些嵌入式机学习资料&…

Python的多重继承和MixIn

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 多重继承 继承是面向对象编程的一个重要的方式&#xff0c;因为通过继承&#xff0c;子类就可以扩展父类的功能。 回忆一下Animal类层次的设…

【无公网IP】Windows搭建 WebDAV服务,并内网穿透公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结 自己用Windows Server搭建了家用NAS主机&#xff0c;W…

Flink Batch SQL Improvements on Lakehouse

本文整理自阿里云研发工程师刘大龙&#xff08;风离&#xff09;&#xff0c;在 Streaming Lakehouse Meetup 的分享。内容主要分为三个部分&#xff1a; Flink Batch on Paimon 挑战Flink Batch 核心优化后续规划 点击查看原文视频 & 演讲PPT 一、Flink Batch on Paimon 挑…

MySQL数据库入门到精通3--进阶篇(存储引擎,索引)

1. 存储引擎 1.1 MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为通过认…

selenium自动化测试-获取黄金实时价格

最近黄金比较火爆&#xff0c;想要获取黄金实时价格&#xff0c;方便后续监控预警价格&#xff0c;一般实时刷新的网页数据都是动态加载的&#xff0c;需要用到selenium自动化测试获取动态页面数据。 昨天学会了获取动态网页小说内容&#xff0c;同理也可以获取动态网页的黄金…

头歌平台 | 逻辑函数及其描述工具logisim使用

文章目录 1、根据布尔表达式绘制电路2、根据真值表绘制电路3、根据简化真值表绘制电路4、根据波形图绘制电路5、根据卡诺图绘制电路 1、根据布尔表达式绘制电路 任务描述 本关任务&#xff1a;在Logisim中根据给定的布尔代数表达式&#xff08;FABBCCA&#xff09;绘制逻辑电路…