dinesh_redhawk Ответов: 1

Canvas.getcontext останавливает мою веб-камеру для работы на моей веб-странице HTML 5


Я пытаюсь захватить кадр из видео. Ниже приведен мой код.
Если в IAM пытается использовать
var ctx = canvas.getContext('2d');
прямая трансляция с веб-камеры терпит неудачу. Это не работает. Если я прокомментирую
var ctx = canvas.getContext('2d');

тогда веб-камера работает, в чем может быть причина? Я должен использовать
var ctx = canvas.getContext('2d');

иначе моя программа не будет работать.
Пожалуйста, проводите.


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Webscanner.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Display Webcam Stream</title>
    <style>
        #container {
            margin: 0px auto;
            width: 500px;
            height: 375px;
            border: 10px #333 solid;
        }

        #videoElement {
            width: 500px;
            height: 375px;
            background-color: #666;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div id="container">
        <video autoplay="true" id="videoElement"></video>
        <button id="snap">Snap Photo</button>
    </div>
    </form>
    <script>
        var video = document.querySelector("#videoElement");

        var canvas = document.querySelector('canvas');
       // var ctx = canvas.getContext('2d');
        var localMediaStream = null;

        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;

        if (navigator.getUserMedia) {
            navigator.getUserMedia({ video: true }, handleVideo, videoError);
        }
        else
            alert('HTML5 getUserMedia() is not supported on your browser');

        function handleVideo(stream) {
            video.src = window.URL.createObjectURL(stream);
            localMediaStream = stream;
        }

        //function snapshot() {
        //    if (localMediaStream) {
        //        ctx.drawImage(video, 0, 0);
        //        // "image/webp" works in Chrome.
        //        // Other browsers will fall back to image/png.
        //        document.querySelector('img').src = canvas.toDataURL('image/webp');
        //        myVar = setTimeout(snapshot, 2000);
        //    }
        //}
        ////video.addEventListener('click', snapshot, false);

        function videoError(e) {
            // do something
        }

        video.addEventListener('click', snapshot, false);

    </script>
</body>
</html>


Что я уже пробовал:

Если я прокомментирую
var ctx = canvas.getContext('2d');

тогда веб-камера работает, в чем может быть причина?

1 Ответов

Рейтинг:
9

Richard Deeming

документ.querySelector()[^] вернет первый соответствующий элемент в документе. Если совпадающих элементов нет, он вернется null.

Ваш документ не содержит <canvas> элемент, так что document.querySelector('canvas') возвращается null.

Когда вы затем попытаетесь вызвать метод на canvas переменная, вы получите ошибку Javascript:

TypeError: canvas is null

Затем ваш сценарий остановится, и ни один из следующих операторов не будет выполнен.

Чтобы исправить ошибку, вам нужно либо удалить связанные с холстом части вашего скрипта, либо добавить отсутствующие HTML-элементы в документ.

NB: Вы могли бы узнать это для себя гораздо быстрее, открыв инструменты разработчика Вашего браузера. Все современные браузеры включают в себя консоль, которая регистрирует детали любых ошибок скрипта.