手机H5自动显示相机画面,并实现前后摄像头切换(默认后置摄像头)

使用<video>标签显示相机画面,并通过调用navigator.mediaDevices.getUserMedia()方法获取用户媒体流,然后通过srcObject属性将媒体流赋值给<video>元素的srcObject属性,即可自动显示相机画面。

通过添加一个按钮,当点击按钮时,通过判断当前相机的facingMode状态(”user”表示前置摄像头,”environment”表示后置摄像头),然后调用navigator.mediaDevices.getUserMedia()方法切换到对应的摄像头,再将获取到的媒体流赋值给<video>元素的srcObject属性,即可实现前后摄像头的切换功能。

完整代码:

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
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Camera H5</title>
</head>
<body>
    <!-- 用于显示相机视频的<video>元素 -->
    <video id="video" autoplay playsinline></video>
    <!-- 用于切换前后摄像头的按钮 -->
    <button id="switchButton">Switch Camera</button>
 
    <script>
        // 获取视频元素和切换按钮元素
        var video = document.getElementById("video");
        var switchButton = document.getElementById("switchButton");
 
        // 获取用户媒体流并显示相机画面
        navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } })
            .then(function (stream) {
                video.srcObject = stream;
            })
            .catch(function (error) {
                console.log("Error accessing camera: " + error);
            });
 
        // 切换前后摄像头
        switchButton.addEventListener("click", function () {
            if (video.srcObject) {
                var videoTracks = video.srcObject.getVideoTracks();
                if (videoTracks.length > 0) {
                    var facingMode = videoTracks[0].getSettings().facingMode;
                    var newFacingMode = (facingMode === "user") ? "environment" : "user";
 
                    navigator.mediaDevices.getUserMedia({ video: { facingMode: newFacingMode } })
                        .then(function (stream) {
                            video.srcObject = stream;
                        })
                        .catch(function (error) {
                            console.log("Error switching camera: " + error);
                        });
                }
            }
        });
    </script>
</body>
</html>

发表评论

邮箱地址不会被公开。 必填项已用*标注