У меня webrtc в веб-приложении, настроенном в основном на демо-код. Он работает с использованием setTimeout, чтобы остановить запись. Я хотел бы добавить событие нажатия кнопки, как альтернативный способ остановить запись. Из демонстрационного кода я разорвал нужный бит как новую функцию saveAudioFile (). Он запускается функцией playSequence, передающей объект рекордера, который создается в функции playSequence. Что я хочу знать, так это как альтернативно вызвать функцию saveAudioFile с помощью щелчка мыши (и остановить тайм-аут). Я создал прослушиватель событий для кнопки и щелчка, но у меня возникла проблема с передачей объекта «устройство записи» (который создается в другой функции и находится вне области видимости), без которого функция не будет работать. Это все о обратных вызовах (я думаю), и я до сих пор не обернул голову вокруг них. Что мне нужно сделать, чтобы иметь возможность использовать объект «устройство записи» в функции playSequence, чтобы альтернативно остановить запись щелчком мыши (при сохранении временного отката)?

в северном направлении Запуск функции playSequence через setTimeout преднамеренный — мне нужно, чтобы он запускался через 3 секунды после загрузки страницы. Просто упоминание на случай, если это было причиной путаницы / вопросов.

function saveAudioFile(recorder) { // stop recording recorder.stopRecording(function() { //ajax function to upload audio and save as file- working }); } function playSequence() { navigator.mediaDevices.getUserMedia({ video: false, audio: true }).then(function(camera) { // recording configuration/hints/parameters var recordingHints = { type: 'audio' }; // initiating the recorder var recorder = RecordRTC(camera, recordingHints); // starting recording here recorder.startRecording(); // auto stop recording after 30 seconds var milliSeconds = 10 * 1000; setTimeout(saveAudioFile(recorder) , milliSeconds); }); }); } setTimeout( function(){ playSequence(); }, 3000 ); jQuery('#endrecording').click(function() { saveAudioFile(); }); 

Энди Хикки

новый участник этого сайта. Будьте внимательны, спрашивая разъяснения, комментируя и отвечая. Проверьте наш

Правила поведения

,

Есть ли причина, по которой Вы бы не поместили прослушиватель playSequence функцию playSequence ? Вы не сможете передать объект recorder click слушателю, так как он еще не существует — он будет создан через 3s верно? :)

Плюс эта часть: setTimeout(saveAudioFile(recorder) , milliSeconds);
кажется, это не сработает, не так ли?
При использовании функций с аргументами в качестве обратных вызовов вы либо знаете, с какими аргументами будет вызываться обратный вызов — например, обратные вызовы прослушивателя событий вызываются с конкретным объектом Event — либо вы должны передать анонимную функцию, которая вызывает ваши функции с вашими пользовательскими аргументами.

Не проверял, это первое, что приходит мне в голову:

 function playSequence() { navigator.mediaDevices.getUserMedia({ video: false, audio: true }).then(function(camera) { // recording configuration/hints/parameters var recordingHints = { type: 'audio' }; // initiating the recorder var recorder = RecordRTC(camera, recordingHints); // starting recording here recorder.startRecording(); // auto stop recording after 30 secods var milliSeconds = 30 * 1000; document .getElementById('endrecording') .addEventListener('click', function(){ saveAudioFile(recorder) }; setTimeout( function(){ saveAudioFile(recorder) }, milliSeconds ); }); }