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>
相关推荐
兜兜工作室6 分钟前
兜兜消消单词|04.29 每日单词|glove
学习
zhangrelay6 分钟前
三分钟云课实践速通--工程制图基础-3D--FreeCAD
笔记·学习·3d
kobesdu30 分钟前
【ROS2实战笔记-13】Foxglove Studio:ROS可视化工具的另一条路
笔记·机器人·自动驾驶·ros
勤劳的进取家33 分钟前
传输层基础
运维·开发语言·学习·php
Gary Studio36 分钟前
Frameworks学习预览
学习
for_ever_love__36 分钟前
UI学习:单例传值
学习·ui·ios·objective-c
The_superstar637 分钟前
2026.4.28衡山派学习复习笔记
笔记·学习
XD74297163638 分钟前
001. MSP430G2553 入门总述:从零开始学习这颗单片机
单片机·嵌入式硬件·学习·嵌入式·msp430g2553
wuxinyan12340 分钟前
大模型学习之路01:提示工程从入门到精通(第一篇)
人工智能·学习·提示词
for_ever_love__42 分钟前
UI学习:通知传值
学习·ui·ios·objective-c