Navigator.mediadevices.getUserMedia() не имеет доступа к встроенной камере ноутбука

#javascript #webrtc #recordrtc

#javascript #webrtc #запись rtc

Вопрос:

Я разрабатываю веб-приложение для записи видео.

Я попробовал приведенный ниже код, но проблема в том, что он отлично работает с внешней камерой, но во встроенной камере ноутбука с тем же браузером ошибка не найдена.

Я использую Firefox 60.6.1

      if (navigator.mediaDevices.getUserMedia) {       
      navigator.mediaDevices.getUserMedia(constraints)
      .then(function(stream) {
    //load the stream in the video variable
        video.srcObject = stream;
    //load the stream in revokeAccess variable 
        revokeAccess=stream;
    //video playback
        video.play(); 
    /*
    Optional to avoid the dual audio disturbance. Playback audio is muted
    */
    video.muted= true;


    if (MediaRecorder.isTypeSupported('video/webm;codecs=vp9')) {
      var options = {mimeType: 'video/webm;codecs=vp9'};
      console.log("using vp9");
    } else if (MediaRecorder.isTypeSupported('video/webm;codecs=h264')) {
      var options = {mimeType: 'video/webm;codecs=h264'};
      console.log("using h264");
    } else  if (MediaRecorder.isTypeSupported('video/webm;codecs=vp8')) {
      var options = {mimeType: 'video/webm;codecs=vp8',videoBitsPerSecond : 1500000,audioBitsPerSecond : 160000};
      console.log("using vp8");
    }else{
    console.log('isTypeSupported is not supported, using default codecs for browser');
    } 

    //load the stream and type of video in the function
    mediaRecorder = new MediaRecorder(stream,options);
    //handle the data availability
    mediaRecorder.ondataavailable = handleDataAvailable;
    //Start the recording
    mediaRecorder.start(); 

    alert("Started Recording");


    //push the data into chunks(array)
    function handleDataAvailable(event) {
     if (event.data.size > 0) {
       recordedChunks.push(event.data);
        console.log(recordedChunks);
     } else {
      alert(event);
     }
    }
    //disable the Start Recording button
    document.getElementById("startRecording").disabled = true;  
      })
      .catch(function(error) {
    //handle the device not found exception
        alert("Camera not Found !! Please connect camera properly");
        console.log(error);
      });
    }
  

Я хочу, чтобы приложение работало на каждой платформе.

Комментарии:

1. Вы имеете в виду NotFoundError ? Это предполагает, что камера не работает или проблема с драйвером. Работает ли камера в других браузерах или приложениях? Что это за модель?

2. Он переходит в цикл else, не запрашивая разрешения. Камера работает, когда я открываю камеру из опции камеры Windows

3. Работает ли это в других браузерах? Что это за модель?

4. Он работает на настольном Firefox 60.6.1 с внешней камерой, но не работает в Firefox 60.6.1 для ноутбука со встроенной камерой

5. Если вы не можете ответить на мои вопросы, я не могу вам помочь.

Ответ №1:

Привет всем разработчикам, спасибо за вашу поддержку и быстрый ответ.

Я исправил проблемы, используя приведенное ниже добавление адаптера в коде.

 var getUserMedia = navigator.getUserMedia ||
navigator.mozGetUserMedia ||
navigator.webkitGetUserMedia;
  

Ответ №2:

Если вы хотите поддерживать устаревший браузер, проверьте следующее.

https://github.com/webrtcHacks/adapter

Адаптер WebRTC

adapter.js это прокладка для защиты приложений от изменений спецификаций и различий в префиксах. На самом деле стандарты и протоколы, используемые для реализаций WebRTC, очень стабильны, и существует всего несколько имен с префиксами. Для получения полной информации о взаимодействии см. webrtc.org/web-apis/interop .

Этот репозиторий раньше был частью организации WebRTC на github, но переехал. Мы стремимся обновлять старый репозиторий новыми версиями.

Кроме того, вы можете проверить свою аппаратную среду в firefox.

В адресной строке браузера введите следующее

о: поддержка