1. 页面加载自动获取摄像头流显示预览
2. 提供按钮切换前后摄像头
3. 通过设备ID来切换指定摄像头
完整代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
<!DOCTYPE html><html><head> <!-- 设置页面编码和标题 --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Camera App</title> <!-- 一些页面样式 --> <style> #camera { width: 100%; height: 500px; object-fit: cover; } button { font-size: 16px; padding: 8px 16px; } </style></head><body> <!-- 显示摄像头预览的video元素 --> <video id="camera" autoplay playsinline></video> <!-- 按钮来切换前后摄像头 --> <button id="switch">Switch Camera</button> <script> // 获取页面元素 const cameraView = document.getElementById('camera'); const switchButton = document.getElementById('switch'); // 当前使用的设备id let currentDeviceId; // 获取摄像头流的方法 async function getCameraStream() { // 获取所有媒体设备 const devices = await navigator.mediaDevices.enumerateDevices(); // 过滤出视频输入设备(摄像头) const videoDevices = devices.filter(device => device.kind === 'videoinput'); // 默认使用第一个视频设备 currentDeviceId = videoDevices[0].deviceId; // 获取这个设备的流 const stream = await navigator.mediaDevices.getUserMedia({ video: { deviceId: currentDeviceId } }); // 绑定流到video元素 cameraView.srcObject = stream; } // 切换摄像头的方法 async function switchCamera() { // 再次获取媒体设备列表 const devices = await navigator.mediaDevices.enumerateDevices(); // 过滤出视频输入设备 const videoDevices = devices.filter(device => device.kind === 'videoinput'); // 找到第一个与当前不同的设备 for (const device of videoDevices) { if (device.deviceId !== currentDeviceId) { currentDeviceId = device.deviceId; break; } } // 获取这个设备的新流 const stream = await navigator.mediaDevices.getUserMedia({ video: { deviceId: currentDeviceId } }); // 绑定新流到video元素 cameraView.srcObject = stream; } // 页面加载时获取流 getCameraStream(); // 点击按钮切换摄像头 switchButton.addEventListener('click', switchCamera); </script></body></html> |