Не удается получить доступ к веб-камере

(function ($) {

    var webcam = {

    "extern": null, // external select token to support jQuery dialogs
    "append": true, // append object instead of overwriting

    "width": 320,
    "height": 240,

    "mode": "callback", // callback | save | stream

    "swffile": "../Webcam_Plugin/jscam_canvas_only.swf",
    "quality": 85,

    "debug":    function () {},
    "onCapture":    function () {},
    "onTick":   function () {},
    "onSave":   function () {},
    "onLoad":   function () {}
    };

    window["webcam"] = webcam;

    $["fn"]["webcam"] = function(options) {

    if (typeof options === "object") {
        for (var ndx in webcam) {
        if (options[ndx] !== undefined) {
            webcam[ndx] = options[ndx];
        }
        }
    }

    var source = '<object id="XwebcamXobjectX" type="application/x-shockwave-flash" data="'+webcam["swffile"]+'" width="'+webcam["width"]+'" height="'+webcam["height"]+'"><param name="movie" value="'+webcam["swffile"]+'" /><param name="FlashVars" value="mode='+webcam["mode"]+'&amp;quality='+webcam["quality"]+'" /><param name="allowScriptAccess" value="always" /></object>';

    if (null !== webcam["extern"]) {
        $(webcam["extern"])[webcam["append"] ? "append" : "html"](source);
    } else {
        this[webcam["append"] ? "append" : "html"](source);
    }

    var run = 3;
    (_register = function() {
        var cam = document.getElementById('XwebcamXobjectX');

        if (cam && cam["capture"] !== undefined) {

        /* Simple callback methods are not allowed :-/ */
        webcam["capture"] = function(x) {
            try {
            return cam["capture"](x);
            } catch(e) {}
        }
        webcam["save"] = function(x) {
            try {
            return cam["save"](x);
            } catch(e) {}
        }
        webcam["setCamera"] = function(x) {
            try {
            return cam["setCamera"](x);
            } catch(e) {}
        }
        webcam["getCameraList"] = function() {
            try {
            return cam["getCameraList"]();
            } catch(e) {}
        }
        webcam["pauseCamera"] = function() {
            try {
            return cam["pauseCamera"]();
            } catch(e) {}
        }       
        webcam["resumeCamera"] = function() {
            try {
            return cam["resumeCamera"]();
            } catch(e) {}
        }
        webcam["onLoad"]();
        } else if (0 == run) {
        webcam["debug"]("error", "Flash movie not yet registered!");
        } else {
        /* Flash interface not ready yet */
        run--;
        window.setTimeout(_register, 1000 * (4 - run));
        }
    })();
    }

})(jQuery);

Выше показана функция, которую я использовал для доступа к веб-камере системы. Он отлично работает, когда я использую его на локальном хосте, но проблема возникает, когда то же самое помещается на сервер, а затем осуществляется доступ через интрасеть. Я не могу найти причину, чтобы исправить это. Пожалуйста, помогите мне с тем же.

локальный хост

локальный хост

интранет

Первые два изображения — это те, когда я использую свой код на локальном хосте. Он отлично работает, так как я могу получить доступ к веб-камере.

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


person Vibhor Gupta    schedule 28.06.2018    source источник


Ответы (2)


Из соображений безопасности вы должны обслуживать сайт через HTTPS для доступа к камере.

person maettu    schedule 28.06.2018
comment
Не могли бы вы уточнить, о каких типах соображений безопасности может идти речь? Это было бы большим подспорьем. @Maettu - person Vibhor Gupta; 28.06.2018
comment
Это политика Chrome, которая запрещает доступ к микрофону и камере через http. Ваш сайт, вероятно, может работать в другом браузере - person maettu; 28.06.2018
comment
Да, приведенная выше информация соответствовала действительности. Когда http был опробован на Firefox, это действительно сработало. У Google есть некоторые ограничения в отношении сайта интрасети. Таким образом, это как бы не позволяет получить доступ к внутренним аппаратным компонентам как таковым. @maettu - person Vibhor Gupta; 29.06.2018

person    schedule
comment
Пожалуйста, объясните, чем этот код отличается от кода ОП и почему он решает проблему. - person Doj; 09.12.2020