前端页面展示本电脑的摄像头,并使用js获取摄像头列表

可以通过 JavaScript 使用 navigator.mediaDevices.enumerateDevices() 获取电脑上的摄像头列表。以下是一个示例代码,可以展示摄像头列表并选择进行预览。

HTML + JavaScript 实现摄像头列表展示和预览

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>摄像头列表</title>
</head>
<body><h1>摄像头选择</h1><select id="cameraSelect"></select><button onclick="startCamera()">开始预览</button><video id="videoPreview" autoplay playsinline style="width: 100%; max-width: 600px;"></video><script>const videoElement = document.getElementById('videoPreview');const selectElement = document.getElementById('cameraSelect');// 获取摄像头设备列表async function getCameraDevices() {const devices = await navigator.mediaDevices.enumerateDevices();const videoDevices = devices.filter(device => device.kind === 'videoinput');selectElement.innerHTML = '';  // 清空下拉框videoDevices.forEach((device, index) => {const option = document.createElement('option');option.value = device.deviceId;option.text = device.label || `摄像头 ${index + 1}`;selectElement.appendChild(option);});}// 启动摄像头async function startCamera() {const selectedDeviceId = selectElement.value;const constraints = {video: {deviceId: selectedDeviceId ? { exact: selectedDeviceId } : undefined}};const stream = await navigator.mediaDevices.getUserMedia(constraints);videoElement.srcObject = stream;}// 页面加载时自动获取摄像头window.onload = getCameraDevices;</script>
</body>
</html>

说明

  • 核心方法:
    • navigator.mediaDevices.enumerateDevices():列出所有音视频设备。
    • 过滤出 videoinput 类型的设备即为摄像头。
  • 下拉框动态生成:遍历摄像头设备,将其添加到 <select> 下拉框中。
  • 设备启动:调用 navigator.mediaDevices.getUserMedia(),使用选定摄像头进行视频预览。这个时候会提示访问权限,要点击允许就可以了

注意事项

  1. 浏览器权限:首次访问页面时,浏览器会请求访问摄像头权限。用户拒绝后,设备列表可能为空。
  2. HTTPS要求getUserMedia 只能在 HTTPS 或 localhost 上使用。
  3. 标签问题:某些设备的标签只有在用户授权访问后才能显示。

运行后,你的页面会自动检测并展示摄像头设备列表,选择设备并点击“开始预览”即可看到实时摄像头画面。但是获取到的本机摄像头没有label标签,不确定外接摄像头是否有标签。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派OpenWrt下怎么驱动带USB的摄像头

环境&#xff1a;使用VirtualBox虚拟机下安装的ubuntu22.04 LTS操作系统 安装编译需要的插件&#xff1a; sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ bzip2 ccache cmake cpio curl device-tree-compiler fas…

MIT Cheetah 四足机器人的动力学及算法 (I) —— 简化动力学模型

Title: MIT Cheetah 四足机器人的动力学及算法 Dynamics and Algorithm of the MIT Cheetah’’ Quadruped Robot [1] MIT Cheetah 四足机器人的动力学及算法 (I) —— 简化动力学模型 [2] MIT Cheetah 四足机器人的动力学及算法 (II) —— 刚体模型与前向运动学算法 [3] MIT C…

python版本的Selenium的下载及chrome环境搭建和简单使用

针对Python版本的Selenium下载及Chrome环境搭建和使用&#xff0c;以下将详细阐述具体步骤&#xff1a; 一、Python版本的Selenium下载 安装Python环境&#xff1a; 确保系统上已经安装了Python 3.8及以上版本。可以从[Python官方网站]下载并安装最新版本的Python&#xff0c;…

开源简史与概览

Think 1.论述“自由软件”与“开源软件”的区别与联系&#xff1f; 2.GitHub Trending 是一个能够快速找到有趣的新项目的地方&#xff1b;而 OpenLeaderboard 也是一个能够发现有趣而有影响力项目的地方。尝试从这两个网站中找到感兴趣的若干项目&#xff0c;挖掘并分析出上…

006-Jetpack Compose for Android之传感器数据

需求分析 想要看看手机的传感器数据&#xff0c;看看滤波一下能玩点什么无聊的。先搞个最简单的&#xff0c;手机本身的姿态。 需求&#xff1a;采集手机姿态数据&#xff0c;显示在界面上。 那么我们需要&#xff1a; 一个文本标签类似的控件&#xff0c;显示手机姿态数据…

单元测试入门和mockup

Java 新手入门&#xff1a;Java单元测试利器&#xff0c;Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式&#xff0c;学一下单测思路 这个没有动态代理&#xff0c;所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…

抢先体验:人大金仓数据库管理系统KingbaseES V9 最新版本 CentOS 7.9 部署体验

一、简介 KingbaseES 是中国人大金仓信息技术股份有限公司自主研发的一款通用关系型数据库管理系统&#xff08;RDBMS&#xff09;。 作为国产数据库的杰出代表&#xff0c;它专为中国市场设计&#xff0c;广泛应用于政府、金融、能源、电信等关键行业&#xff0c;以高安全性…

HT-HaiBOX边缘计算盒 智慧工厂方案,智慧医疗方案,智慧加油站方案,智慧安防方案,智慧城市方案;方案定制开发

背景介绍 在当今数字化时代&#xff0c;各个行业对于智能化视频监控设备的需求日益增长。无论是安防监控&#xff0c;还是智慧工厂、智慧城市等领域&#xff0c;都需要高效、智能的设备来保障安全和提高生产效率。然而&#xff0c;传统的视频监控设备存在诸多痛点&#xff1a;…

Unity中实现转盘抽奖效果(一)

实现思路&#xff1a; 旋转转盘的z轴&#xff0c;开始以角加速度加速到角速度最大值&#xff0c;结束的时候&#xff0c;以角加速度减速使角速度减少到0&#xff0c;然后转盘z轴旋转的角度就是加上每秒以角速度数值大小&#xff0c;为了使角度不能一直增大&#xff0c;对360度…

LockSupport的源码实现原理(一)

目录 底层源码分析 线程状态变化 许可证机制 中断处理 底层源码分析 public class LockSupport {// Unsafe实例private static final Unsafe U Unsafe.getUnsafe();// Thread对象中parkBlocker字段的偏移量private static final long PARKBLOCKER U.objectFieldOffset(Thre…

电子应用设计方案80:智能桌椅系统设计

智能桌椅系统设计 一、引言 智能桌椅系统旨在为用户提供更加舒适、便捷和个性化的使用体验&#xff0c;适应不同的工作和学习场景。 二、系统概述 1. 系统目标 - 实现桌椅高度、角度的自动调节&#xff0c;适应不同用户的身体尺寸和使用需求。 - 具备坐姿监测和提醒功能&…

【SpringBoot】深度解析 Spring Boot 拦截器:实现统一功能处理的关键路径

前言 &#x1f31f;&#x1f31f;本期讲解关于拦截器的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不多说…

网络渗透测试实验四:CTF实践

1.实验目的和要求 实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、探测HTTP web服务、目录枚举、提权、图像信息提取、密码破解等相关工具…

计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

2024年度总结:保持正念 延迟满足

总结&#xff1a; 时光荏苒&#xff0c;很快就到了年底&#xff0c;2024年也就悄悄的过去了&#xff0c;回顾这一年&#xff0c;有很多的感触&#xff0c;在此做一个总结&#xff0c;留下自己的脚印 CTF&#xff1a; 要总结的第一件事那当然是CTF&#xff0c;回顾这一年&#…

LeetCode - 初级算法 数组(存在重复元素)

存在重复元素 这篇文章讨论如何判断一个数组中是否存在重复元素。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,如果任一值在数组中出现至少两次,返回 true;如果数组中每个元素互不相同,返回 false。 示例: 输入: nums =…

03-spring-理-DefaultListableBeanFactory

DefaultListableBeanFactory 是 beanFactory的实现 重要 有一些类被注解标注了。但是没有加入到容器。 怎么将标注的类加入到容器&#xff1f; 这个时候使用bean的后置处理器 主要是通过bean后置处理器来处理 被注解标注的类 org.springframework.context.annotation.inter…

绘制三元图、颜色空间图:R语言代码

本文介绍基于R语言中的Ternary包&#xff0c;绘制三元图&#xff08;Ternary Plot&#xff09;的详细方法&#xff1b;其中&#xff0c;我们就以RGB三色分布图为例来具体介绍。 三元图可以从三个不同的角度反映数据的特征&#xff0c;因此在很多领域都得以广泛应用&#xff1b;…

30天开发操作系统 第 10 天 -- 叠加处理

前言 得益于昨天的努力&#xff0c;我们终于可以进行内存管理了。不过仔细一看会注意到&#xff0c;bootpack.c都已经有254行了。笔者感觉这段程序太长了&#xff0c;决定整理一下&#xff0c;分出一部分到memory.c中去。(整理中)…好了&#xff0c;整理完了。现在bootpack.c变…

2024年RAG:回顾与展望

2024年&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术经历了从狂热到理性的蜕变&#xff0c;成为大模型应用领域不可忽视的关键力量。年初&#xff0c;AI的“无所不能”让市场充满乐观情绪&#xff0c;RAG被视为解决复杂问题的万能钥匙&#xff1…