webRtc麦克风摄像头检测
最近在做webRtc相关音视频项目,碰到了很多用户不知道自己设备是否被支持发起webRtc,所以特意总结相关实用方法;
HTML
/*id方便一会把媒体流赋值过去, autoPlay: 自动播放 */
<audio id="devDetectionMicroRef" autoPlay></audio>
/*video建议知道宽高, autoPlay: 自动播放 */
<video id="devDetectionVideoRef" autoPlay width="640" height="480"></video>
检测麦克风相关
/* 全局变量 */
const audioSteam = {current: null
}
// 获取音视频轨道流
handleMicrophoneDetection(){navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {audioSteam.current = stream;// 获取当前采集麦克风名称handleStreamGetMicroName();// 处理播放handleAudioPlay();}).catch(error => {let errorMessage = error + '';if (errorMessage.includes('Permission denied')) {errorMessage = '请开启麦克风权限';} else if (errorMessage.includes('Requested device not found')) {errorMessage = '请检测麦克风是否插入';};console.log('error', errorMessage)});
},
// 处理播放
handleAudioPlay(){const stream = audioSteam.current;const elm: HTMLVideoElement | any = document.getElementById('devDetectionMicroRef');if (elm) {elm.srcObject = stream;}
}
// 获取麦克风名
handleStreamGetMicroName(){if (audioSteam.current) {const audioTrack = audioSteam.current.getAudioTracks()[0];console.log(audioTrack.label);}
}
// 停止麦克采集
stopAudioSteam() {if (audioSteam.current) {audioSteam.current.getTracks().forEach((sender: any) => {sender.stop();});}
}
检测摄像头相关
/*全局变量*/
const videoSteam = {current: null
}
// 摄像头检测
handleCameraDetection() {navigator.mediaDevices.getUserMedia({video: true}).then((stream) => {videoSteam.current = stream;// 获取摄像头名称handleStreamGetCameraName();// 播放handleVideoPlay();}).catch((error) => {let errorMessage = error + '';if (errorMessage.includes('Permission denied')) {errorMessage = '请开启摄像头权限';} else if (errorMessage.includes('Requested device not found')) {errorMessage = '请检测摄像头是否插入';};console.log('error', errorMessage);})
}
// 播放
handleVideoPlay() {const stream = videoSteam.current;const elm: HTMLVideoElement | any = document.getElementById('devDetectionVideoRef');if (elm) {elm.srcObject = stream;}
}
// 根据stream获取摄像头名称
handleStreamGetCameraName() {if (videoSteam.current) {const videoTrack = videoSteam.current.getVideoTracks()[0];setGatherCameraName(videoTrack.label);}
}
// 停止摄像头采集
stopVideoSteam() {if (videoSteam.current) {videoSteam.current.getTracks().forEach((sender: any) => {sender.stop();});}
}
获取默认采集设备
handleDefaultDeviceId(type: number) {switch(type) {case 1: // 获取默认音频设备{navigator.mediaDevices.getUserMedia({audio: true}).then((stream) => {const tracks = stream.getTracks();for (let i in tracks) {// 获取音频默认采集设备idlet deviceId = tracks[i].getSettings().deviceId + '';tracks[i].stop();}}).catch((error) => {console.log('error', error);})}break;case 2: // 获取默认视频设备{navigator.mediaDevices.getUserMedia({video: true}).then((stream) => {const tracks = stream.getTracks();for (let i in tracks) {// 获取视频默认采集设备idlet deviceId = tracks[i].getSettings().deviceId + '';tracks[i].stop();}}).catch((error) => {console.log('error', error);})}break;}
},
相关文章:
webRtc麦克风摄像头检测
最近在做webRtc相关音视频项目,碰到了很多用户不知道自己设备是否被支持发起webRtc,所以特意总结相关实用方法; HTML /*id方便一会把媒体流赋值过去, autoPlay: 自动播放 */ <audio id"devDetectionMicroRef" autoPlay><…...
3703. 括号的匹配 北京师范大学考研上机真题 栈的思想
在算术表达式中,除了加、减、乘、除等运算外,往往还有括号。 包括有大括号 {},中括号 [],小括号 (),尖括号 <> 等。 对于每一对括号,必须先左边括号,然后右边括号;如果有多个…...
SpringCloud中的@EnableDiscoceryClient和@EnableFeignClients注解的作用解析、RPC远程过程调用
目录 EnableDiscoveryClient 服务发现的核心概念 服务注册中心 EnableDiscoveryClient注解的作用 服务心跳健康检查 使用示例 EnableFeignClients Feign简介 EnableFeignClients注解的作用 RPC(Remote Procedure Call) 参考链接 Spring Cloud…...
关于安卓文件复制的杂谈(一)文件复制,文件夹复制
背景 一些很基础的东西,往往用起来,找起来,乱七八糟,所以特此记录 环境 win10,jdk8,as4 备注 不考虑安卓沙箱机制,这里讲解的是思路,示例中,是以应用内部目录进行测试 开发 把一个文件&a…...
Lucene查询语法,适用于 ELk Kibana 查询
Lucene查询语法,适用于 ELk Kibana 查询 Elasticsearch 构建在 Lucene 之上,过滤器语法和 Lucene 相同。本语法可用于 Kibana 界面的检索和 Grafana 看板对接 ES 的检索规则。 Kibana 上的检索语法Grafana 上的检索语法 全文搜索 在搜索栏输入login&…...
蓝桥杯2023年第十四届省赛真题-阶乘求和
一、题目 【问题描述】 令 S 1 ! 2 ! 3 ! . . . 202320232023 ! S 1! 2! 3! ... 202320232023!S1!2!3!...202320232023!,求 S SS 的末尾 9 位数字。 提示:答案首位不为 0。 【答案提交】 这是一道结果填空的题,你只需要算出结果后…...
多租户平台前端存储结构的选择
下图来源于cookie、localStorage 和 sessionStorage的区别及应用实例 既然localstorage无有效期,关闭浏览器还存在,那么用来存储用户的身份信息并不是太合适,先看一下B站中localstorage都存在了啥,原来把我搜索的记录都存在了下来…...
C++11 新特性:常量表达式 constexpr(下)
接上篇文章,继续说说常量表达式 constexpr 在模板编程中的使用场景。 constexpr 用于模板编程 在模板编程中,constexpr 的应用非常广泛,主要是因为它能够在编译时进行计算,这对于模板元编程、编译时断言、模板特化选择等场合尤为…...
大数据开发--02.环境准备
一.准备三台linux虚拟机 1.分别取名node1,node2,node3 2.配置静态ip 这里以node1为例,配置静态ip地址,其他node2.node3一样 配置完成之后别忘记 systemctl restart network 3.在各自的/etc/hosts文件中编辑三个Ip地址 三台都要配置, 4.然…...
选择word中的表格VBA
打开开发工具 选择Visual Basic插入代码 Sub 选择word中的表格() Dim t As Table an MsgBox("即将选择选区内所有表格,若无选区,则选择全文表格。", vbYesNo, "提示") If an - 6 Then Exit Sub Set rg IIf(Selection.Type wdSel…...
开放签开源电子签章白皮书-简版
开放签开源电子签章白皮书-简版 一、摘要: 开放签电子签章团队源自于电子合同SaaS公司,立志于通过开源、开放的模式,结合团队十多年的行业经验,将电子签章产品更简单、更低门槛的推广到各行各业中。让电子签章应用更简单&#x…...
uniapp、vue2.6、H5,利用腾讯TRTC,快速跑通1v1视频功能
多人视频聊天室搭建,官网已有相关demo和案例,需要快速搭建多人聊天室直接进入以下网站: 实时音视频 Web & H5 (Vue2/Vue3)-视频通话(含 UI)-文档中心-腾讯云说明:https://cloud.tencent.com/document/…...
Spring Data访问Elasticsearch----查询方法
Spring Data访问Elasticsearch----查询方法 一、查询lookup策略1.1 声明的查询 二、创建查询三、方法返回类型四、使用Query注解 一、查询lookup策略 Elasticsearch模块支持所有基本的查询构建功能,如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查…...
PyTorch 深度学习(GPT 重译)(四)
第二部分:从现实世界的图像中学习:肺癌的早期检测 第 2 部分的结构与第 1 部分不同;它几乎是一本书中的一本书。我们将以几章的篇幅深入探讨一个单一用例,从第 1 部分学到的基本构建模块开始,构建一个比我们迄今为止看…...
视频无水印批量下载软件|抖音视频提取工具
视频无水印批量下载软件 在当今社交媒体充斥着大量优质视频内容的时代,很多用户都希望能够轻松下载自己喜爱的视频进行收藏或分享。为了满足用户的需求,我们特别推出了一款专业的视频无水印批量下载软件,让您可以方便快捷地获取喜爱的视频内容…...
【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git
目录 编辑 Linux 软件包管理器 yum 软件包: 操作: 拓展:lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…...
小程序中实现轮播图左向堆叠
1、效果图: 轮播图左向堆叠 2、封装的组件: my-swiper.wxml <view><view class"tower-swiper" bindtouchend"TowerEnd"><view class"tower-item" wx:for"{{swiperList}}" wx:key"index&q…...
零基础入门数据挖掘系列之「建模调参」
摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型;如何进行交叉验证;如何调节参数优化等。 建模调参:特征工程也好,数据清洗也罢,都是…...
如何在Mac中删除照片?这里有详细步骤
前言 本文介绍如何从Mac中删除照片,以释放硬盘空间或更好地组织文件和文件夹。 如何使用废纸篓删除Mac上的图片 在Mac上删除图片的最简单方法之一是使用废纸篓功能。学习只需几秒钟。下面是如何删除单个图片以及如何在Mac上删除多个图片,以及一些关键和有用的提示,以使该…...
Qt笔记 事件处理_鼠标事件
什么是事件? 点击鼠标左键,双击鼠标左键,鼠标来回移动,按下键盘按钮,这些都是事件。 那么事件的响应机制是什么样的呢? 首先main函数中有一个QApplication,其作用是创建一个应用程序对象&…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
