mediaDevices.getUserMedia, начать запись с микрофона после завершения воспроизведения звука, проблема Safari - PullRequest
0 голосов
/ 04 сентября 2018

У меня неясная ситуация.

То, что я хочу, это: воспроизвести аудио и после завершения воспроизведения звука начать запись с микрофона.

Проблема: в FF и Chrome код работает просто отлично. Однако в Safari, когда звук перестает воспроизводиться и запускается функция записи с микрофона, одновременно воспроизводится звук.

Начальный и конечный хуки сделаны с помощью jQuery. Вот оконченная привязка.

var on_audio_stop = function() {
    start_microphone_recording();
}
$( 'audio' ).bind( 'ended', on_audio_stop );

Функция start_microphone_recording вызывает функцию, в которой значок изменяется, а затем вызывается init_recording, и больше ничего, поэтому я не включил этот значок.

Запуск функции микрофона:

function init_recording() {
    AudioContext = window.AudioContext || window.webkitAudioContext;

    context = new AudioContext();

    processor = context.createScriptProcessor( buffer_size, 1, 1 );

    processor.connect( context.destination );

    var handle_success = function ( stream ) {
        global_stream = stream;

        input = context.createMediaStreamSource( stream );

        input.connect( processor );

        processor.onaudioprocess = function ( e ) {
            microphone_process( e );
        };
    };

    navigator.mediaDevices.getUserMedia( constraints ).then( handle_success );
}

Когда в Safari активирован микрофон, выполняется функция привязки «play». Я попытался с pause () и приглушил, но не работает. Также попытался удалить аудио тег и очистить src из аудио тега.

У кого-нибудь есть идеи относительно того, почему Safari делает это и каким может быть решение?


Пример: Я установил 5 аудио MP3 в тэге AUDIO в html, я играю одну за другой, я запускаю функции «init_recording», и Safari будет воспроизводить все 5 аудио MP3 одновременно друг над другом, пока микрофон начал записывать .

1 Ответ

0 голосов
/ 06 сентября 2018

Как оказалось, решение Safari - не устанавливать атрибут src.

Если у вас есть один или несколько встроенных тегов audio, удалите атрибут src из тега audio и, например, установите атрибут данных как data-src. Затем с помощью JS при нажатии воспроизведения добавьте URL к src аудиотега.

В режиме воспроизведения:

audio.pause();
audio.load(); // Load the audio URL that was added to the src tag.
audio.play();

Или вставьте весь тег audio через JS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...