当前位置: 首页 > 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>

在这里插入图片描述

http://www.lryc.cn/news/429355.html

相关文章:

  • Simple RPC - 06 从零开始设计一个服务端(上)_注册中心的实现
  • 【深度学习】基于Transformers的大模型推理框架
  • 电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!
  • 【一起学Rust | 框架篇 | Tauri2.0框架】tauri中rust和前端的相互调用(rust调用前端)
  • deque容器
  • Redis远程字典服务器(9)—— 类型补充
  • VMware虚拟机nat无法联通主机
  • 「字符串」详解AC自动机并实现对应的功能 / 手撕数据结构(C++)
  • freecad遭遇网络不同无法安装插件Addon Manager: Unexpected 0 response from server
  • Ruby模板引擎:构建动态视图的艺术
  • HarmonyOS NEXT星河版零基础入门(3)
  • 第二十讲 python中的异常结构-try except-else-finally
  • springer 投稿系统中返修注意点
  • CSS:display和visiblity
  • 43.x86游戏实战-XXX寻找吸怪坐标
  • Redis地理位置相关应用
  • 优化WAN流量:如何通过调整系统设置降低企业网络成本
  • Java-HttpHeaders请求头或响应头
  • Elasticsearch高阶查询
  • 【流媒体】RTMPDump—RTMP_Connect函数(握手、网络连接)
  • 通过https方式访问内网IP
  • flutter 键盘弹出 都会重新Build
  • RedisDistributedLock 分布式锁
  • Java之包装类
  • Linux - 权限
  • 免费图形化nginx管理工具nginxWebUI
  • 编程上的挫折不可怕,可怕的是你畏惧了
  • docker逃逸手法
  • 3 pytest Fixture
  • pinctl 和 gpio子系统驱动