大数跨境
0
0

来自网络摄像头和麦克风的数据流:使用WebRTC进行视频通话第1步

来自网络摄像头和麦克风的数据流:使用WebRTC进行视频通话第1步 RTE开发者社区
2021-02-26
0
导读:在本系列文章中,我们打算利用 WebRTC 创建一个P2P连接,并允许他们共享数据的视频聊天


WebRTC在2011年实现了浏览器之间的实时通信。这款API能帮你在两个用户之间创建一个P2P连接,并允许他们共享数据,例如视频聊天并共享屏幕。在本系列文章中,我们打算创建一个这样的视频聊天。


创建视频聊天的第一步,是访问用户设备(比如访问网络摄像头和麦克风)以及他们的数据流。在本系列第一篇文章中,我们将访问我们的设备并在浏览器上显示视频(带音频)。最终结果将如下所示:



访问用户音、视频流


首先我们需要访问用户的网络摄像头和麦克风。导航器已经通过 MediaDevices界面访问了媒体设备。


1window.navigator.mediaDevices


我们能获得一个列表,它是通过浏览器在控制台中调用来访问所有设备获得的:


1const devices =等待window.navigator 
2                            .mediaDevices 
3                            .enumerateDevices();


在我的浏览器中,我得到一个由五个设备组成的阵列、一个视频输入和五个音频输入。但我们的目标不是设备本身,而是通过这些设备获得数据流。


媒体内容(如音频和视频),都通过 MediaStream界面呈现出来。要想访问数据流,你需要在 mediaDevices 对象上调用 getUserMedia 函数。我们需提供所需媒体类型(这里是音频和视频)作为参数,还可以提供些约束作为参数,这些约束不仅是媒体类型,还包括我们想要的视频大小、方向等。我们在此处尽量要设置得简单:


1const stream = await window.navigator.mediaDevices.getUserMedia(
2  { 
3    video:true
4    audio:true
5  },
6);


因为你必须允许访问你的设备,所以这将返回一个Promise。在Google Chrome浏览器上,你应该看到一个这样的对话框:



如果你选择允许,你将收到MediaStream对象。如果你的网络摄像头有此功能,那接下来你应该会看到它旁边有点亮光,表示它已经打开了。


我们的MediaStream对象由两条轨道组成,每条对应一种媒体类型。你可以通过调用访问它们


1stream.getAudioTracks(); 
2stream.getVideoTracks();


这些方法会返回轨道数组,并且每条轨道包含一些类型信息(例如音频或视频)、标签、提示以及轨道是否启用、静音等信息。


HTML5视频标签


我们已经通过麦克风和网络摄像头访问了数据流,现在我们只想在浏览器上显示它们来确保其正常运行。以前这会很麻烦,但现在HTML5视频标签能让我们在页面中轻松地构建视频。


 1!DOCTYPE html>
2<html>
3
4<head>
5  <meta charset="UTF-8">
6  <title>VideoChat</title>
7  <script src="index.js"></script>
8  <link rel="stylesheet" href="styles.css">
9</head>
10
11<body>
12  <div>
13    <video id="video" controls autoplay></video>
14  </div>
15  <div>
16    <button id="button">Start Video</button>
17  </div>
18</body>
19
20</html>
 1ody {
2  text-align: center;
3}
4
5video {
6  width500px;
7  height500px;
8  margin20px;
9}
10
11button {
12  padding5px;
13  background-color: seagreen;
14  color: white;
15  border-radius3px;
16  font-weight: bold;
17}


我们有一个带有控件的视频标签(播放、静音和停止按钮)和一个用于启动视频的按钮。单击之前,屏幕如下所示:



让我们看一下JavaScript代码:


 1function () {
2  "use strict";
3
4  document.addEventListener('click'async event => {
5    if (event.target.id === 'button') {
6      const stream = await window.navigator.mediaDevices.getUserMedia({ videotrueaudiotrue });
7      const video = document.getElementById('video');
8      video.srcObject = stream;
9      video.play();
10    }
11  });
12
13})();


当你单击按钮时,我们会创建一个之前创建过的流。你的浏览器只有征得许可才能开始播放视频(此处不能处理用户拒绝播放视频的情况)。流可用后,将其设置为视频标签的源对象,然后启动视频,你应该就可以看到自己并听到自己的声音了。


现在,我们可以从浏览器中访问数据流。然后在想进行视频聊天的用户浏览器之间创建连接。在接下来的文章中,我们将在两个客户端之间创建一个WebSocket连接。


点击【阅读原文】浏览后续文章:


【声明】内容源于网络
0
0
RTE开发者社区
RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
内容 1122
粉丝 0
RTE开发者社区 RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
总阅读653
粉丝0
内容1.1k