WebRTC getUserMedia: переключение между аудио и видео + аудио потоками

Мое веб-приложение позволяет пользователям динамически создавать видео и аудио файлы с одной и той же страницы, часто переключаясь между ними.

Каждое действие записи имеет собственный экземпляр и логику, включая собственные потоки MediaStream.

Проблема возникает, когда я инициализирую аудиопоток, а затем пытаюсь инициализировать видеопоток. Запись работает (как видео, так и аудио, ее можно воспроизвести после завершения записи), но сам видеопоток отображается пустым.

Этого не происходит, когда я создаю экземпляр видеопотока без предварительного создания экземпляра аудиопотока - он работает нормально, пока я не попытаюсь записать звук, а затем вернусь, чтобы попытаться записать видео.

Я подтвердил, что при создании видеопотока присутствуют как аудио, так и видеодорожки. Я не могу понять, почему видеодорожка кажется пустой.

Что мне не хватает?

Настройка записи видео с использованием базового API getUserMedia:

// Start stream
var constraints = {
    audio: true,
    video: true
};

navigator.mediaDevices.getUserMedia(constraints)
                  .then(function(mediaStream) { // do stuff with stream }

// Kill stream, both audio and video
mediaStream.getTracks()[0].stop();
mediaStream.getTracks()[1].stop();

Настройка для записи звука. Я использую RecorderJS для записи:

navigator.getUserMedia({ audio: true }, function (stream) { 
    var input = that.audio_context.createMediaStreamSource(stream);
    // Initialize the Recorder Library
          var recorder = new Recorder(input);
    recorder.record();
}

// Stop recording 
this.recorder.stop();
this.audio_stream.getTracks()[0].stop();

person Ladybro    schedule 02.05.2018    source источник


Ответы (1)


Оказывается, моя проблема заключалась НЕ в WebRTC или медиа-потоках, а в том, как я обслуживал поток для элемента <video>. Я избавился от черного потока, удаляя и воссоздавая видеоэлемент каждый раз при запуске потока, а не просто назначая его source потоку.

person Ladybro    schedule 12.05.2018