Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Воспроизведение стерео звука в браузере

Как и для публикации стерео звука в кодеке Opus, для проигрывания в браузере необходимо установить параметры кодека на стороне сервера

Code Block
themeRDark
opus_formats = maxaveragebitrate=64000;stereo=1;sprop-stereo=1;

В этом случае браузер Firefox играет стерео звук без дополнительных настроек.

При проигрывании в браузере потока, захваченного из RTMP, RTSP или VOD источника, как правило. звук транскодируется в кодек Opus. По умолчанию, кодировщик Opus настроен на передачу речи и монофонического аудио. Для проигрывания стерео звук звука в браузере, необходимо повысить битрейт кодирования Opus до 60 кбит/с или выше

Code Block
themeRDark
opus.encoder.bitrate=6000064000

Браузеры на основе Chrome

По умолчанию, из-за бага в движке браузер Chrome играет WebRTC поток со стерео звуком в кодеке Opus как моно. В связи с этим необходимы дополнительные настройки на стороне клиента, в зависимости от того, используется Web SDK или нет.

С использованием Web SDK

В сборке Web SDK SDK 0.5.28.2753.151 добавлена возможно обойти данный баг при помощи настройки добавлена настройка для проигрывания стерео звука

Code Block
languagejs
themeRDark
constraints.audio.stereo=true

...

Code Block
languagejs
themeRDark
    session.createStream({
        name: streamName,
        display: remoteVideo,
        constraints: {
            audio: {
                stereo: true
            }
        }
        ...
    }).play();

...

Без использования Web SDK

Если в проекте используется только Websocket API, необходимо отключить эхоподавление

Code Block
languagejs
themeRDark
session.createStream({
    name: streamName,
    display: remoteVideo,
    constraints: {
        audio: {
            echoCancellation: false,
            googEchoCancellation: false
        },
        ...
    }
    ...
}).play();

Также необходимо изменить параметры кодека Opus в исходящем (offer) SDP, непосредственно после его создания

Code Block
languagejs
themeRDark
        var connection = new RTCPeerConnection(connectionConfig, connectionConstraints);
        ...
        connection.createOffer(constraints).then(function (offer) {
          offer.sdp = offer.sdp.replace('minptime=10', 'minptime=10;stereo=1;sprop-stereo=1');
          connection.setLocalDescription(offer).then(function () {
              ...
          });
        });

Дополнительная задержка при воспроизведении видеопотока

...