WebRTC getUserMedia: переключение между аудио и видео + аудио потоки - PullRequest
0 голосов
/ 02 мая 2018

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

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

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

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

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

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

Настройка для записи видео с использованием базового 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();

1 Ответ

0 голосов
/ 12 мая 2018

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

...