Отредактировано - обновление внизу поста
Я создаю веб-приложение для Android с помощью phonegap, и я столкнулся с этой проблемой после инициализации getusermedia, когда я использую кнопку уменьшения/увеличения громкости, регулятор громкости предназначен для вызова, а не для динамика, даже если я этого не сделал. не начинать новую запись ... кроме того, я заметил, что телефон на самом деле думает, что это телефонный звонок, когда приложение работает, например: я запускаю свое приложение, затем я открываю WhatsApp и пытаюсь записать голосовое сообщение, сообщение передается отменен.
Я знаю, что следующий сегмент является проблемой (я прокомментировал его, и проблем не было)
/***recording audio block***/
function audioRecordingInit() {
navigator.getUserMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
if (navigator.getUserMedia) {
console.log('getUserMedia supported.');
var constraints = {audio: true};
var chunks = [];
var onSuccess = function (stream) {
$.globals.mediaRecorder = new MediaRecorder(stream);
$.globals.mediaRecorder.onstop = function(e) {
console.log("data available after MediaRecorder.stop() called.");
var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
chunks = [];
if(!$("#recordBtn").hasClass("private"))
$.globals.lastRecorded.audio.src = window.URL.createObjectURL(blob);
else
$.globals.lastRecordedPrivate.audio.src = window.URL.createObjectURL(blob);
console.log("audio created");
};
$.globals.mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
}
};
var onError = function (err) {
console.log('The following error occured: ' + err);
};
navigator.getUserMedia(constraints, onSuccess, onError);// I think this is the problem
}
else{
console.log('getUserMedia not supported on your browser!');
}
/***end of recording audio block***/
}
эта функция вызывается после готовности устройства
и я добавляю также функции начала записи и остановки записи ниже
function startRecording(event) {
document.getElementById("recordingTime").innerText = "00:00";
$.globals.mediaRecorder.start();
console.log($.globals.mediaRecorder.state);
console.log("recorder started");
$.globals.timerInterval = setInterval(function () {
$.globals.sec += 1;
if ($.globals.sec == 60) {
$.globals.min++;
$.globals.sec = 0;
}
if ($.globals.min < 10) {
if ($.globals.sec < 10)
$.globals.timeText = "0" + $.globals.min + ":0" + $.globals.sec;
else
$.globals.timeText = "0" + $.globals.min + ":" + $.globals.sec;
}
else if ($.globals.sec < 10)
$.globals.timeText = min + ":0" + $.globals.sec;
else
$.globals.timeText = min + ":" + $.globals.sec;
document.getElementById("recordingTime").innerText = $.globals.timeText;
}, 1000);
}
function stopRecording() {
if($(".circleNav").hasClass("recording"))
$(".circleNav").toggleClass("recording");
$.globals.currentState="Recorded";
console.log($.globals.mediaRecorder.state);
if($.globals.mediaRecorder.state=="inactive"){
$.globals.mediaRecorder.start();
}
$.globals.mediaRecorder.stop();
console.log("recorder stopped");
clearInterval($.globals.timerInterval);
}
startRecording начинается, когда touchstarts на кнопку записи stopRecording вызывается, когда touchend на кнопку записи спасибо за вашу помощь
Обновление:
конфликт был с микрофоном потому что стрим всегда был в прямом эфире а не только при записи. теперь он работает нормально, но по-прежнему необходимо отключить кнопку записи во время телефонного звонка, иначе он будет конфликтовать и, возможно, приведет к сбою приложения или отключению микрофона от всего или, возможно, даже отключению его.