webrtc学习笔记2

音视频采集和播放

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

复制代码
1. 初始化button、video控件
2. 绑定"打开摄像头"响应事件onOpenCamera
3. 如果要打开摄像头则点击 "打开摄像头"按钮,以触发onOpenCamera事件的调用
4. 当触发onOpenCamera调用时
a. 设置约束条件,即是getUserMedia函数的入参
b. getUserMedia有两种情况,一种是正常打开摄像头,使用handleSuccess处理;一种是打开摄像头失败,使
用handleError处理
c. 当正常打开摄像头时,则将getUserMedia返回的stream对象赋值给video控件的srcObject即可将视频显示出
来
js 复制代码
<!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即可将声音播放出
来
js 复制代码
<!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>

打开摄像头和麦克风

主要区别是

js 复制代码
const constraints = (window.constraints = {
                audio: true,
                video: true
            });
js 复制代码
<!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>
相关推荐
就叫飞六吧8 分钟前
Java “跨平台”指的是(.class 字节码)跨平台,而不是指 JVM 这个软件本身跨平台
服务器·笔记
进阶小白猿13 分钟前
Java技术八股学习Day13
java·jvm·学习
lowhot19 分钟前
C语言UI框架
c语言·开发语言·笔记·ui
sunfove19 分钟前
数理物理方法笔记:微分算子与拉普拉斯算子介绍
笔记
行业探路者25 分钟前
二维码制作工具使用指南:如何利用电脑摄像头轻松扫描和生成图片二维码
大数据·人工智能·学习·产品运营·软件工程
坏柠25 分钟前
从点亮一颗 LED 开始:ESP32-S3 GPIO 输出的正确学习方式
学习
如果你想拥有什么先让自己配得上拥有29 分钟前
三阶幻方了解-七年级上册
学习·总结
老骥伏枥_H32 分钟前
信息系统项目管理师_第十七章 项目绩效域(中)
笔记
EchoL、43 分钟前
Diffusers库安装
笔记
木木木一44 分钟前
Rust学习记录--C8 常用的集合
开发语言·学习·rust