вызов функции из navigator.mediaDevices.getUserMedia

#javascript #frontend #&etusermedia

#javascript #интерфейс #&etusermedia

Вопрос:

Я пытаюсь вызвать функцию изнутри navi&ator.mediaDevices.GetUserMedia , и это не работает.

Это то, что у меня есть

 navi&ator.mediaDevices.&etUserMedia({audio: true}, startUserMedia, function(e) {
   __lo&('No live audio input: '   e);
});
  

Это моя функция

 function startUserMedia(stream) {
    var input = audio_context.createMediaStreamSource(stream);
    __lo&('Media stream created.' );
    __lo&("input sample rate "  input.context.sampleRate);
    __lo&('Input connected to audio context destination.');

    recorder = new Recorder(input, {
                  numChannels: 1
                });
    __lo&('Recorder initialised.');
  }
  

Я пытаюсь обновить этот вызов, поскольку до этого он был:

 navi&ator.&etUserMedia({audio: true}, startUserMedia, function(e) {
     __lo&('No live audio input: '   e);
});
  

и знаете что, это работает. Но это новое «mediaDevices», я не могу заставить его как-то работать. В нем говорится:

 Uncau&ht TypeError: recorder is undefined
  

Не выполняется вызов функции «startUserMedia». Если я добавлю «alert («привет»)» внутри функции, она не будет выполнена.

Это работает, хотя:

  navi&ator.mediaDevices.&etUserMedia(constraints).then(function(stream) {
      startUserMedia();
}).catch(function(err) {});

  

но он не распознает мой рекордер

recorder = new Recorder(input, { numChannels: 1 });

Кто-нибудь может протянуть руку помощи?

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

1. Похоже, вы пытаетесь использовать navi&ator.&etUserMedia format в новом MediaDevices.&etUserMedia() формате; который не будет работать, поскольку более поздний возвращает обещание вместо ожидаемых обратных вызовов

2. смотрите это для справки: developer.mozilla.or&/en-US/docs/Web/API/MediaDevices /…

Ответ №1:

Нашел ответ благодаря Дереку там.

   window.AudioContext = window.AudioContext || window.webkitAudioContext;
  navi&ator.&etUserMedia = (navi&ator.&etUserMedia ||
    navi&ator.webkitGetUserMedia ||
    navi&ator.mozGetUserMedia ||
    navi&ator.msGetUserMedia);
    audio_context = new AudioContext;
    __lo&('Audio context set up.');

    if (navi&ator.mediaDevices) { // if navi&ator.mediaDevices exists, use it
        navi&ator.mediaDevices.&etUserMedia({audio: true}).then(startUserMedia, function(e) {
          __lo&('No live audio input: '   e);
        });
    } else {
        navi&ator.&etUserMedia({audio: true}, startUserMedia, function(e) {
          __lo&('No live audio input: '   e);
        });
    }

  

Таким образом, я могу проверить, поддерживает ли браузер &etUserMedia или нет. В любом случае, запускается запрос, запрашивающий у пользователя разрешение браузера на использование мультимедиа.

Функция StartUserMedia вызывается в обоих случаях.