webRtc 的简单学习

学习自 李超的 《从0打造音视频直播系统》

1. 检查当前设备

//判断浏览器是否支持这些 API
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
  console.log("enumerateDevices() not supported.");
  return;
}

// 枚举 cameras and microphones.
navigator.mediaDevices.enumerateDevices()
.then(function(deviceInfos) {
  //打印出每一个设备的信息
  deviceInfos.forEach(function(deviceInfo) {
    console.log(deviceInfo.kind + ": " + deviceInfo.label +
                " id = " + deviceInfo.deviceId);
  });
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
});

设备信息

当前获得的设备信息中的label都为空,是因为需要使用 https ,暂时没有这个条件,就不做测试了
当使用的设备改变之后,会有change事件触发 navigator.mediaDevices.ondevicechange,可以在这个事件当中修改对应的逻辑

2. 获取当前的设备数据流

如下代码所示,通过 navigator.mediaDevices.getUserMedia获取视频流,并分别通过video canvas绘制到了页面上了

<video autoplay playsinline></video>
<canvas width="1024" height="720"></canvas>

var videoplay = document.querySelector('video');
var canvas = document.querySelector('canvas')
var constraints = {
    video : {
        width: 1024,
        height: 720,
    },
    audio : false
}
//采集音视频数据流
navigator
 .mediaDevices
 .getUserMedia(constraints)
 .then((stream) {
    videoplay.srcObject = stream;
    // startRecord(stream)
    setTimeout(() => {
 		canvas.getContext('2d').drawImage(videoplay, 0, 0)
    }, 1000)
 })

2.1 getUserMedia的api参数

getUserMedia的api参数

3. 录制当前的视屏

1. 收集当前的视屏数据

webRtc 有一个 MediaRecorder对象,能对视屏数据进行处理,并且会触发 ondataavailable事件,方便开发者处理对应的数据

var buffer = []; // 变量放外面,方便后面进行播放
function startRecord(stream){
    var mediaRecorder;

    try{
        //创建录制对象
        mediaRecorder = new MediaRecorder(stream, {
            // 录制的文件格式
            mimeType: 'video/webm;codecs=vp8'
        });
    }catch(e){
        console.error('Failed to create MediaRecorder:', e);
        return;
    }

    //当有音视频数据来了之后触发该事件
    mediaRecorder.ondataavailable = function (e) {
        console.log(e.timeStamp)
        if(e && e.data && e.data.size > 0){
            // 对数据进行收集
            buffer.push(e.data);
        }
    };
    //开始录制
    // 这里的参数代表着的是录制的片段,每一段有多长在,
    // 这里写的是10ms,但是经过实际测试,大概是在30ms左右
    mediaRecorder.start(10);
}

2. 对当前的视屏进行回放

当第一步的缓冲数据收集到一定之后,就可以开始尝试播放了

<video id="replay"></video>

function replay() {
    var videorelpay = document.querySelector('#replay');
    // 对当前已经缓存的数据处理成二进制数据
    var blob = new Blob(buffer, {type: 'video/webm'});
    videorelpay.src = window.URL.createObjectURL(blob);
    videorelpay.controls = true;
    videorelpay.play();
}

3. 下载当前已经录制好的视屏

下载视屏的话,就使用了 h5中的 download属性了

function download () {
    var blob = new Blob(buffer, {type: 'video/webm'});
    var url = window.URL.createObjectURL(blob);
    var a = document.createElement('a');
    a.href = url;
    a.style.display = 'none';
    a.download = 'dc.webm';
    a.click();
}

4. 录制当前的屏幕

在mac下测试时,可以共享整个屏幕、某个应用程序的使用、浏览器的某个标签页

//抓取桌面
function shareDesktop(){ 
        //开始捕获桌面数据 
    navigator.mediaDevices
        .getDisplayMedia({video: true}) 
        .then((stream) => { 
            var deskVideo = document.querySelector("video");
            localStream = stream;
            deskVideo.srcObject = stream;
        }) 
        .catch((err) => {
            console.log(err)
        }); 
}

共享的提示信息

接下来想要处理的话,就可以执行 3. 录制当前的视屏 的过程

5. 连接建立的过程

RTCPeerConnection
连接过程图

5.1

RTCPeerConnection建立连接后查看发送、接受情况 chrome://webrtc-internals/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 WebRTC 服务端开发需要具备一定的网络编程和服务器编程基础。以下是几个可以帮助您高效学习 WebRTC 服务端开发的建议: 1. 熟悉网络编程和服务器编程:学习 WebRTC 服务端开发需要先了解网络编程和服务器编程的基本概念和知识,例如 TCP/IP 协议、HTTP 协议、WebSocket 协议等,以及常见的服务器端编程语言和框架。 2. 学习 WebRTC 的基础知识:WebRTC 是一种实时通信技术,需要了解 WebRTC 的基本概念、架构和 API,可以通过官方文档或相关书籍学习。 3. 实践 WebRTC 服务端开发:通过开发实际项目来提高自己的 WebRTC 服务端开发技能。可以参考一些开源项目,例如 Google 的 AppRTC 或 SimpleWebRTC,了解它们的实现原理和代码架构,并尝试自己实现一个简单WebRTC 服务端。 4. 参与在线课程和讨论组:有许多在线课程和讨论组可以帮助您学习 WebRTC 服务端开发。例如 Udemy 上的 WebRTC 课程或 Stack Overflow 上的讨论组等。 5. 探索官方文档和社区资源:WebRTC 社区很活跃,有很多官方文档和社区资源可以帮助您学习 WebRTC 服务端开发。例如 Google 的 WebRTC 官方文档和 GitHub 上的 WebRTC 开源项目等。 总之,学习 WebRTC 服务端开发需要不断地学习和实践,建立起一个稳固的网络和服务器编程基础,以及深入理解 WebRTC 的架构和 API。 ### 回答2: 要高效学习WebRTC服务端开发,可以按照以下几个步骤进行: 1. 学习基础知识:首先了解WebRTC的基本概念、核心协议以及相关技术在服务端开发中的应用。可以通过阅读相关教程、参考书籍或者在线课程来学习。 2. 搭建开发环境:确定使用的开发语言和框架,配置好开发环境,包括安装相应的开发工具和运行时环境。推荐使用常见的语言如Node.js或Java,并选择适合的WebRTC库或框架。 3. 学习示例代码:选择一些经典的WebRTC服务端示例代码,通过阅读和理解代码逻辑,学习WebRTC的主要功能和开发方法。可以在GitHub等代码托管平台上找到一些优秀的示例项目。 4. 实践项目:通过自己的实践项目来深入理解WebRTC服务端开发。可以从简单的项目开始,逐渐增加复杂度,实践中发现问题并解决。可以尝试搭建一对一视频通话系统、多人视频会议系统等。 5. 持续学习和实践:WebRTC技术不断发展和更新,需要持续学习最新的发展动态和技术文档。可以关注相关的技术博客、在线社区和论坛,与其他开发者交流和分享经验。 6. 参与开源项目:如果有条件,可以参与一些开源的WebRTC项目,通过贡献代码和解决问题来提高自己的开发能力。 7. 持续改进和总结:在学习和实践的过程中,不断总结和改进自己的学习方法和技能,提高学习效率和开发质量。 总的来说,高效学习WebRTC服务端开发需要掌握基础知识、实践项目、保持持续学习和参与开源社区,不断提高自己的技术水平。 ### 回答3: 要高效学习WebRTC服务端开发,可以按照以下步骤进行: 第一步,了解WebRTC的基本概念和原理。WebRTC是一种实时通信技术,能够在浏览器之间直接传输音频、视频和数据。学习WebRTC的开发前,需要对它的工作原理有一个清晰的理解。 第二步,学习相关的编程语言和技术。WebRTC服务端开发需要掌握一种或多种编程语言,如JavaScript、Python等。此外,还需要了解网络编程、HTTP、WebSocket等相关技术。 第三步,寻找优质的学习资源。可以参考官方文档、在线教程、视频教程等来学习WebRTC服务端开发。在学习过程中,要注意选择权威、有深度的教程,以便获取更高质量的知识。 第四步,动手实践。通过实际的项目实践来巩固学习。可以尝试搭建一个简单WebRTC服务端,实现基本的音视频传输功能。在实践过程中,会遇到各种问题和挑战,通过解决问题来加深对WebRTC开发的理解。 第五步,多参与交流和讨论。加入一些WebRTC开发者社区或论坛,和其他开发者交流经验、解答问题。在交流和讨论中,可以获取更多的实用经验和技巧,提高学习效果。 最后,要持续学习和保持对新知识和技术的追踪。WebRTC是一个快速发展的领域,新的技术和工具不断涌现。要保持学习的热情,及时了解并学习新的内容,以适应行业的变化和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值