Изменение FocusMode не работает с помощью MediaStream API в Google Chrome - PullRequest
0 голосов
/ 06 декабря 2018

В браузере Google Chrome я смог получить прямую трансляцию с подключенной USB-камеры, используя getUserMedia () API.У меня есть ползунок для изменения значения яркости, и это работает нормально.Я также хочу, чтобы focusMode переключался с непрерывный на ручной (камера всегда запускается с непрерывным focusMode).

У меня есть приведенный ниже код Javascript для изменения FocusMode.

const video_constraints ={};

//Create the following keys for Constraint
video_constraints.video = {};
video_constraints.video.width = {};
video_constraints.video.width.exact = 1920; //set video width
video_constraints.video.height = {};
video_constraints.video.height.exact = 1080; //set video height
video_constraints.video.frameRate = {};
video_constraints.video.frameRate.exact = 60; //set video frame rate

//Start stream
navigator.mediaDevices.getUserMedia(video_constraints).then(handleStreamSuccessCb).catch(handleStreamErrorCb);


function handleStreamSuccessCb()
{
    console.log("Got Stream");
        window.stream = stream;
        videoElement.srcObject = stream;
    getVideoCaps(stream);
}

function getVideoCaps(stream)
{

    var videoTrackArray = stream.getVideoTracks();
    var videoTrack = null;

    for (i=0; i<videoTrackArray.length; i++)
    {
        if (videoTrackArray[i].kind == "video")
        {
            console.log("Video track found");
            videoTrack = videoTrackArray[i];
            break;
        }
    }

    if (videoTrack != null)
    {
        setTimeout(() => {

        const capabilities = videoTrack.getCapabilities()
        console.log("Caps:");
        console.log(capabilities);

        //Brightness:
        if (capabilities.brightness)
        {
            //configure slider settings
            brightnessSliderUI.min = capabilities.brightness.min;
            brightnessSliderUI.max = capabilities.brightness.max;
            brightnessSliderUI.step = capabilities.brightness.step;
            brightnessSliderUI.value = videoTrack.getSettings().brightness;

            //set inital value
            brightnessSliderValueUI.value = brightnessSliderUI.value;

            //slider change listener
            brightnessSliderUI.oninput = function() {
                    brightnessSliderValueUI.value = brightnessSliderUI.value;
                    videoTrack.applyConstraints({advanced : [{brightness: brightnessSliderUI.value}] });
                }

        }
        else
        {
            console.log("brightnessNot supported");
        }


        //Focus Mode
                if (capabilities.focusMode)
                {   
            console.log(videoTrack.getSettings());// By default continuous value is set for focusMode

            focusButtonUI.onclick = function(){
                console.log("focusButton Clicked");

                videoTrack.applyConstraints({advanced : [{focusMode: "manual"}]});
                // I am not able to set focusMode to manual with the above statement
                            console.log(videoTrack.getSettings());

            }
        }
      }, 500);
    }
    else
    {
        showErrorDialog("No Video track found in the stream");
    }
}

С помощью приведенной ниже строки я пытаюсь переключить режим фокусировки:

videoTrack.applyConstraints({advanced : [{focusMode: "manual"}]});

Но этот фокус был все еще в режиме непрерывный .

Можеткто-нибудь скажет, что не так с приведенным выше кодом?Можно ли переключать режим фокусировки, когда предварительный просмотр активен?

...