MediaDevices.getUserMedia() 会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、A/D 转换器等等),也可能是其他轨道类型。
它返回一个 Promise 对象,成功后会resolve回调一个 MediaStream 对象。若用户拒绝了使用权限,或者需要的媒体源不可用,promise会reject回调一个 PermissionDeniedError 或者 NotFoundError 。
<body>
<video
controls
muted
loop
width="100%"
>
</video>
<script>
var constraints = { audio: true, video: true };
navigator.mediaDevices
.getUserMedia(constraints)
.then(function (stream) {
var video = document.querySelector("video");
video.srcObject = stream;
//loadedmetadata事件在元数据(metadata)被加载完成后触发。
video.onloadedmetadata = function (e) {
video.play();
};
})
.catch(function (err) {
/* 处理 error */
console.log(err)
});
</script>
</body>
参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia
ps:
获取浏览器支持的流媒体对象
function getUserMediaToPhoto(constraints, success, error) {
if (navigator.mediaDevices.getUserMedia) {
//最新标准API
navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
} else if (navigator.webkitGetUserMedia) {
//webkit核心浏览器
navigator.webkitGetUserMedia(constraints, success, error);
} else if (navigator.mozGetUserMedia) {
//firefox浏览器
navigator.mozGetUserMedia(constraints, success, error);
} else if (navigator.getUserMedia) {
//旧版API
navigator.getUserMedia(constraints, success, error);
}
}
通过此函数,获取当前浏览器支持的getUserMedia 对象
开启浏览器摄像头/语音权限
getUserMediaToPhoto({ video: { width: 480, height: 320 },audio: true }, success, error);