如何检测网络摄像头的宽度和高度?
How can I detect width and height of the webcamera?
如何检测相机的宽度和高度以在 canvas 上使用它并保持比例??
我需要检测相机的宽度和高度,然后在 canvas 上使用它。在新的 canvas 中,我将展示带一些滤镜的实时视频。相机尺寸要和视频一样。
我用来访问相机的代码:
navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || naviagor.msGetUserMedia);
var options = {video: true};
var videoWidth, videoHeight;
var onFail = function(e) {
alert('Failed to get camera');
alert(e);
};
var onSuccess = function(stream) {
if(navigator.mozGetUserMedia) {
video.mozSrcObject = stream;
} else {
var url = window.URL || window.webkitURL;
video.src = url.createObjectURL(stream);
}
// Wait 1000 ms before starting the loop
setTimeout(function(){
//rest of functions ...
//Here I need to use: videoWidth, videoHeight
//that are obtained from the image data of the camera
},1000);
};
navigator.getUserMedia(options, onSuccess, onFail);
您可以使用 video
元素的 videoWidth
和 videoHeight
属性获取宽度和高度:
video.videoWidth
video.videoWidth
有两种方式:Chrome Firefox支持新的track.getSettings()
:
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let {width, height} = stream.getTracks()[0].getSettings();
console.log(`${width}x${height}`); // 640x480
无论流是否连接到任何东西,这都有效。
或者,对于较旧的浏览器,在查看 videoWidth
和 videoHeight
:
之前,将流连接到 video element, and (importantly) wait for metadata to load
video.srcObject = await navigator.mediaDevices.getUserMedia({video: true});
await new Promise(resolve => video.onloadedmetadata = resolve);
console.log(`${video.videoWidth}x${video.videoHeight}` // 640x480
请注意,大多数网络摄像头支持不止一种分辨率。使用 constraints 以获得更高的分辨率:
await navigator.mediaDevices.getUserMedia({video: {width: 9999}}); // 1280x720
这是 working fiddle.
如何检测相机的宽度和高度以在 canvas 上使用它并保持比例??
我需要检测相机的宽度和高度,然后在 canvas 上使用它。在新的 canvas 中,我将展示带一些滤镜的实时视频。相机尺寸要和视频一样。
我用来访问相机的代码:
navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || naviagor.msGetUserMedia);
var options = {video: true};
var videoWidth, videoHeight;
var onFail = function(e) {
alert('Failed to get camera');
alert(e);
};
var onSuccess = function(stream) {
if(navigator.mozGetUserMedia) {
video.mozSrcObject = stream;
} else {
var url = window.URL || window.webkitURL;
video.src = url.createObjectURL(stream);
}
// Wait 1000 ms before starting the loop
setTimeout(function(){
//rest of functions ...
//Here I need to use: videoWidth, videoHeight
//that are obtained from the image data of the camera
},1000);
};
navigator.getUserMedia(options, onSuccess, onFail);
您可以使用 video
元素的 videoWidth
和 videoHeight
属性获取宽度和高度:
video.videoWidth
video.videoWidth
有两种方式:Chrome Firefox支持新的track.getSettings()
:
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let {width, height} = stream.getTracks()[0].getSettings();
console.log(`${width}x${height}`); // 640x480
无论流是否连接到任何东西,这都有效。
或者,对于较旧的浏览器,在查看 videoWidth
和 videoHeight
:
video.srcObject = await navigator.mediaDevices.getUserMedia({video: true});
await new Promise(resolve => video.onloadedmetadata = resolve);
console.log(`${video.videoWidth}x${video.videoHeight}` // 640x480
请注意,大多数网络摄像头支持不止一种分辨率。使用 constraints 以获得更高的分辨率:
await navigator.mediaDevices.getUserMedia({video: {width: 9999}}); // 1280x720
这是 working fiddle.