当前位置: 首页 > news >正文

webrtc学习笔记2

音视频采集和播放

打开摄像头并将画面显示到页面

1. 初始化button、video控件
2. 绑定“打开摄像头”响应事件onOpenCamera
3. 如果要打开摄像头则点击 “打开摄像头”按钮,以触发onOpenCamera事件的调用
4. 当触发onOpenCamera调用时
a. 设置约束条件,即是getUserMedia函数的入参
b. getUserMedia有两种情况,一种是正常打开摄像头,使用handleSuccess处理;一种是打开摄像头失败,使
用handleError处理
c. 当正常打开摄像头时,则将getUserMedia返回的stream对象赋值给video控件的srcObject即可将视频显示出
来
<!DOCTYPE html>
<html ><body ><video id="local-video" autoplay playsinline></video><button id="showVideo" >打开摄像头</button><p>通过getUserMedia()获取视频</p></body><script >const constraints = {audio: false,video: true};// 处理打开摄像头成功function handleSuccess(stream) {const video = document.querySelector("#local-video");video.srcObject = stream;}// 异常处理function handleError(error) {console.error("getUserMedia error: " + error);}function onOpenCamera(e) {navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);}document.querySelector("#showVideo").addEventListener("click", onOpenCamera);</script>
</html>

在这里插入图片描述

打开麦克风并在页面播放捕获的声音

1. 初始化button、audio控件
2. 绑定“打开麦克风”响应事件onOpenMicrophone
3. 如果要打开麦克风则点击 “打开麦克风”按钮,以触发onOpenMicrophone事件的调用
4. 当触发onOpenCamera调用时
a. 设置约束条件,即是getUserMedia函数的入参
b. getUserMedia有两种情况,一种是正常打开麦克风,使用handleSuccess处理;一种是打开麦克风失败,使
用handleError处理
c. 当正常打开麦克风时,则将getUserMedia返回的stream对象赋值给audio控件的srcObject即可将声音播放出
来
<!DOCTYPE html><html><body><audio id="local‐audio" autoplay controls>播放麦克风捕获的声音</audio><button id="playAudio">打开麦克风</button><p>通过getUserMedia()获取音频</p></body>  <script>const constraints={audio:true,video:false};//处理打开麦克风成功function handleSuccess(stream){const audio =document.querySelector("#local-audio");audio.srcObject=stream;}// 异常处理function handleError(error){console.error("getUserMedia error: " + error);}function onOpenMicro(e) {navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);}document.querySelector("#playAudio").addEventListener("click", onOpenMicrophone);</script>  </html>

在这里插入图片描述

打开摄像头和麦克风

主要区别是

const constraints = (window.constraints = {audio: true,video: true});
<!DOCTYPE html>
<html><body>//muted消除回声<video id="local‐video" autoplay playsinline muted></video><button id="showVideo">打开音视频</button><div id="errorMsg"></div><p>通过 <code>getUserMedia()</code> 获取音视频.</p><script>const constraints = (window.constraints = {audio: true,video: true});// 处理打开摄像头+麦克风成功function handleSuccess(stream) {const video = document.querySelector("#local‐video");video.srcObject = stream;}function handleError(error) {console.error("getUserMedia error: " + error);}async function onOpenAV(e) {navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);}document.querySelector("#showVideo").addEventListener("click",onOpenAV);</script></body>
</html>

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Dubbo服务自动Web化之路
  • CPU的功能和基本结构
  • 优思学院|六西格玛实施关键:如何整合定性与定量数据
  • 10-使用sentinel流控
  • 免费Excel数据批量转Word工具
  • Affine Transformations仿射变换
  • Android的日志工具Log
  • 负载均衡---相关概念介绍(一)
  • 华为AR1220配置GRE隧道
  • 国外有哪些好用的AI工具?
  • 【MySQL】索引和事务
  • SQLite 创建表
  • Linux | Linux开发工具链全攻略:yum、vim、gcc/g++、GDB、Makefile与git版本控制
  • 解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
  • c++----简单了解string
  • @angular/forms 源码解析之双向绑定
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【译】理解JavaScript:new 关键字
  • 2018一半小结一波
  • android图片蒙层
  • go append函数以及写入
  • JavaScript创建对象的四种方式
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • MySQL QA
  • ng6--错误信息小结(持续更新)
  • React 快速上手 - 07 前端路由 react-router
  • sessionStorage和localStorage
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • tab.js分享及浏览器兼容性问题汇总
  • 编写符合Python风格的对象
  • 前端攻城师
  • 前端学习笔记之观察者模式
  • 通过npm或yarn自动生成vue组件
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 学习笔记:对象,原型和继承(1)
  • 以太坊客户端Geth命令参数详解
  • 正则表达式
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​一些不规范的GTID使用场景
  • # Maven错误Error executing Maven
  • #{}和${}的区别?
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (C#)一个最简单的链表类
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十三)Maven插件解析运行机制
  • (转)大道至简,职场上做人做事做管理
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET 3.0 Framework已经被添加到WindowUpdate