我想显示连接到用户计算机的摄像机列表,当他们选择一个时,用HTML5 <video>
标签显示该摄像机的流媒体视频。
如何获取连接到用户计算机的摄像机列表?
答案 0 :(得分:5)
或许Navigator.getUserMedia()
(在引擎盖下使用WebRTC)是您正在寻找的,但我没有看到任何可以直接告诉您哪些设备可用的设备(设备列表是暴露在您的代码中 - 当您要求访问可用硬件的许可时,它会呈现给用户。)
另请注意浏览器支持:Chrome 21 +,Firefox 20 +,Opera 12+,不支持IE和Safari。
答案 1 :(得分:5)
仅适用于chrome和edge
<script>
navigator.mediaDevices.enumerateDevices().then(function (devices) {
for(var i = 0; i < devices.length; i ++){
var device = devices[i];
if (device.kind === 'videoinput') {
var option = document.createElement('option');
option.value = device.deviceId;
option.text = device.label || 'camera ' + (i + 1);
document.querySelector('select#videoSource').appendChild(option);
}
};
});
</script>
<select id="videoSource"></select>
答案 2 :(得分:3)
试试这个......
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="author" content="Victor Stan">
<meta name="description" content="Get multiple video streams on one page. Adapted from code by Muaz Khan">
<title>Video Camera</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js" ></script>
<style type="text/css" media="screen">
video {
border:1px solid gray;
}
</style>
</head>
<body>
<script>
if (!MediaStreamTrack) document.body.innerHTML = '<h1>Incompatible Browser Detected. Try <strong style="color:red;">Chrome Canary</strong> instead.</h1>';
var videoSources = [];
MediaStreamTrack.getSources(function(media_sources) {
console.log(media_sources);
alert('media_sources : '+media_sources);
media_sources.forEach(function(media_source){
if (media_source.kind === 'video') {
videoSources.push(media_source);
}
});
getMediaSource(videoSources);
});
var get_and_show_media = function(id) {
var constraints = {};
constraints.video = {
optional: [{ sourceId: id}]
};
navigator.webkitGetUserMedia(constraints, function(stream) {
console.log('webkitGetUserMedia');
console.log(constraints);
console.log(stream);
var mediaElement = document.createElement('video');
mediaElement.src = window.URL.createObjectURL(stream);
document.body.appendChild(mediaElement);
mediaElement.controls = true;
mediaElement.play();
}, function (e)
{
alert('Hii');
document.body.appendChild(document.createElement('hr'));
var strong = document.createElement('strong');
strong.innerHTML = JSON.stringify(e);
alert('strong.innerHTML : '+strong.innerHTML);
document.body.appendChild(strong);
});
};
var getMediaSource = function(media) {
console.log(media);
media.forEach(function(media_source) {
if (!media_source) return;
if (media_source.kind === 'video')
{
// add buttons for each media item
var button = $('<input/>', {id: media_source.id, value:media_source.id, type:'submit'});
$("body").append(button);
// show video on click
$(document).on("click", "#"+media_source.id, function(e){
console.log(e);
console.log(media_source.id);
get_and_show_media(media_source.id);
});
}
});
}
</script>
</body>
</html>
答案 3 :(得分:2)
JavaScript无法访问您的相机以返回列表。您需要使用Flash SWF获取相机信息并将其传回您网页的JavaScript。
编辑: 对那些投票的人。这些方法不会给他一个可用摄像头的下拉列表。如果是,请发布链接或代码。在当前日期,获取相机列表(这是他的问题)的唯一方法是使用Flash(或可能是silverlight,但Flash具有更广泛的安装覆盖率)。我已经将我的问题编辑为在获取列表与访问相机方面更具体一些。