Стабильное качество аудио при низком интернете

Daniil_Denisov

New Member
Здравствуйте. У юзера не стабильное качество аудио стрима, постоянно происходят прирывания с промежутком 4-5 секунд.
У юзера низкая скорость интернета на отдачу(24KB/s). При этом юзер стримит видео или десктоп. Вот настройки видео


JavaScript:
 {
      name: streamId,
      display: this.localVideo,
      cacheLocalResources: true,
      receiveVideo: false,
      receiveAudio: false,
      transport: 'UDP',
      constraints: {
        audio: false,
        video: {
          deviceId: videoDeviceId,
          width: 160,
          height: 120,
          minBitrate: 1500,
          maxBitrate: 10000,
          cacheLocalResources: true,
          frameRate: 15,
          videoContentHint: 'motion',
        },
      },
    }
Настройки десктопа -
JavaScript:
{
name: streamId,
      display: this.localVideos[streamId],
      transport: 'UDP',
      constraints: {
        video: {
          withoutExtension: true,
          type: 'screen',
          width: 1024,
          height: 576,
          frameRate: 15,
        },
}

}
Настройки аудио -


JavaScript:
 const config = {
      name: `${streamId}#mixer-${roomId}`,
      display: this.localVideo,
      cacheLocalResources: true,
      receiveVideo: false,
      receiveAudio: false,
      transport: 'UDP',
      constraints: {
        audio: audioDeviceId.deviceId ? audioDeviceId : true,
        video: false,
      },
    }
Для нас в приоритете аудио, чтобы юзера было слышно с наименьшими прерываниями или вообще без них.
Для тестирования решили перейти в зум, там проблем не было с той же скоростью на отдаче.
 

Max

Administrator
Staff member
Добрый день.
Скорее всего, на канале пользователя есть потери. Переключение на TCP транспорт для audio потока должно помочь:
Code:
const config = {
      ...
      transport: 'TCP',
      ...
    }
Кроме того, битрейт для видеопотока у Вас выставлен некорректно: параметры maxBitrate, minBitrate задаются в кбит/с.
Если при канале с настолько низкой пропускной способностью необходимо отдать приоритет публикации аудио, необходимо у обоих видеопотоков опустить нижнюю границу битрейта до 0
Code:
      constraints: {
        audio: false,
        video: {
          ...
          minBitrate: 0,
          ...
        },
      }
Максимальный битрейт можно не ограничивать, на таком канале он все равно не разгонится
Также для аудиопотока нужно понизить битрейт до 20 кбит/с (битрейт аудио задается в бит/с)
Code:
 const config = {
      ...
      constraints: {
        audio: {
             bitrate: 20000
        },
        video: false,
      },
    }
Но при этом нужно учесть, что, если канал клиента 24 кбит/с, то клиент сможет публиковать аудио, но не сможет его играть, т.к. канала не хватит. То же касается и видео.
 
Last edited:

Daniil_Denisov

New Member
Здравствуйте. Мы сделали все настройки, которые вы написали выше. Но все равно не все пакеты приходят, с периодичностью происходят потери звука у аудио стрима. Можно ли как-то сделать гарантированную доставку всех пакетов? Мы протестировали на других сервисах (google meet, zoom) там это решается воспроизведением аудио в ускорении. Во время тестов мы заметили, что клиент отправляет больше чем получает сервер.
 

Max

Administrator
Staff member
Можно ли как-то сделать гарантированную доставку всех пакетов?
Если Вы переключили публикацию аудио на TCP транспорт, как мы рекомендовали выше, это максимум, что можно сделать: TCP обеспечивает гарантированную доставку.
Во время тестов мы заметили, что клиент отправляет больше чем получает сервер.
Это может означать, что битрейт публикации выше, чем пропускная способность канала. В этом случае поможет только полная остановка публикации видео, чтобы освободить канал для аудио, если у этой составляющей должен быть приоритет. Воспроизведение аудио или видео на таком клиенте также необходимо убрать, чтобы максимально освободить канал именно для публикации.
Мы протестировали на других сервисах (google meet, zoom) там это решается воспроизведением аудио в ускорении.
Не факт, что в этих сервисах используется WebRTC в таких случаях.
 
Top