#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 вызывается в обоих случаях.