<!DOCTYPE html>
<html>
<head>
<title>Realtime communication with WebRTC</title>
<link rel="stylesheet" href="css/main.css" />
</head>
<body>
<h1>Realtime communication with WebRTC</h1>
<video autoplay playsinline></video>
<script src="js/main.js"></script>
</body>
</html>
javascript代码
'use strict';
// On this codelab, you will be streaming only video (video: true).
const mediaStreamConstraints = {
video: true,
};
// Video element where stream will be placed.
const localVideo = document.querySelector('video');
// Local stream that will be reproduced on the video.
let localStream;
// Handles success by adding the MediaStream to the video element.
function gotLocalMediaStream(mediaStream) {
localStream = mediaStream;
localVideo.srcObject = mediaStream;
}
// Handles error by logging a message to the console with the error message.
function handleLocalMediaStreamError(error) {
console.log('navigator.getUserMedia error: ', error);
}
// Initializes media stream.
navigator.mediaDevices.getUserMedia(mediaStreamConstraints)
.then(gotLocalMediaStream).catch(handleLocalMediaStreamError);
WebRTC - part2(用你的摄像头来传输视频)
这章你会学到
video stream
stream
回放HTML代码
javascript代码
运行一下吧
建立一个本地服务器(可以使用
http-server
或者live-server
),然后在浏览器中打开index.html
,你会看到如下图的样子背后的原理
随着用户调用
getUserMedia()
,浏览器会向用户请求授权来访问系统的摄像头(同一个域名只有在第一次请求摄像头时才会发起请求)。如果授权成功,会返回一个MediaStream
,可以通过媒体元素设置srcObject
来使用。constraints
参数允许你指定需要的媒体类型,在这个案例中,只捕获了视频,因为音频默认是禁用的(也可以通过配置audio: true
打开音频捕获);constraints
参数同样也可以指定额外的参数,例如视频解析度你可以在这里找到所有的constraint类型,但是不是所有的设置都被所有浏览器支持,如果你的设置当前摄像头不支持,那么
getUserMedia()
会reject一个OverconstrainedError
的状态,并且用户不会接收到访问摄像头的授权通知。如果
getUserMedia()
调用成功,那么把通过摄像头返回的视频流设置为一个video标签的源即可播放额外拓展
localStream
为全局变量,所以你可以在控制台中打印出来,看看它的数据格式以及包含的方法。localStream.getVideoTracks()
,看看返回值是什么localStream.getVideoTracks()[0].stop()
,看看会发生什么contraints
对象的值改为{audio: true, video: true}
,看看会发生什么?总结
这一样我们学会了
constraints
完整的代码在git中的
step-01
文件夹下提示
autoplay
属性,不然你只能看到视频的一帧!getUserMedia()
的constraints有很多种配置,看一下demo你会发现有很多有趣的WebRTC案例最佳实践
width
和max-width
。浏览器将会自动计算它的高度