Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

При публикации WebRTC видеопотоков качество получаемой картинки зависит от канала передачи медиаданных между клиентом и сервером, особенно это касается потоков высокого разрешения (HD, FullHD, 4K). Для того, чтобы контролировать канал и вовремя оповещать публикующего клиента о снижении пропускной способности, в сборке 5.2.398 добавлена возможность контроля качества канала при помощи WebSDK.

На стороне клиента периодически сравнивается битрейт публикации с битрейтом на стороне сервера. При устойчивом их расхождении диагностируется снижение пропускной способности канала. пики и резкие изменения сглаживаются фильтром Калмана.

Настройка сервера

Передача текущего битрейта, получаемого сервером, на клиента для последующего сравнения включается настройкой в файле flashphoner.properties

incoming_bitrate_stat_send_interval=1

Настройка задает интервал отправки значений битрейта в секундах. Рекомендуется отправлять битрейт один раз в секунду.

Отображение качества канала на клиенте

Рассмотрим отображение качества канала и графиков изменения клиентского и серверного битрейтов на клиенте на примере Media Devices

1. Подготовка к отображению графика code

function publish() {
    ...
    $("#bitrateChart").show();
    var canvas = document.getElementById('bitrateChart');
    var ctx = canvas.getContext('2d');

    if (!bitrateComparisonChart) {
        bitrateComparisonChart = new ComparisonChart(ctx);
    } else {
        bitrateComparisonChart.clearBitrateChart();
    }
    ...

2. Инициализация времени получения последнего значения битрейта code

    publishStream = session.createStream({
    ...
    }).on(STREAM_STATUS.PUBLISHING, function (stream) {
        lastConnectionQualityUpdateTimestamp = new Date().valueOf();
        ...
    })

3. Получение оценки качества канала и значений битрейта, отображение графиков

CONNECTION_QUALITY.UPDATE code

    publishStream = session.createStream({
    ...
    }).on(CONNECTION_QUALITY.UPDATE, function (quality, clientFiltered, serverFiltered) {
        var timestamp = new Date().valueOf();
        lastConnectionQualityUpdateTimestamp = timestamp;
        bitrateComparisonChart.updateChart(clientFiltered, serverFiltered);
        connectionQuality = quality;
    });
    publishStream.publish();

4. Установка качества канала в UNKNOWN, если событие CONNECTION_QUALITY.UPDATE не приходит code

function loadStats() {
    if (publishStream) {
                    ...
                    if(new Date().valueOf() - CONNECTION_QUALITY_UPDATE_TIMEOUT_MS > lastConnectionQualityUpdateTimestamp) {
                        connectionQuality = CONNECTION_QUALITY.UNKNOWN;
                    }
                    ...

5. Отображение качества канала code

function loadStats() {
    if (publishStream) {
            ...
            if (connectionQuality !== undefined) {
                showStat({"quality": connectionQuality}, "connection");
            }
            ...

Тестирование

1. Для теста используем:

  • WCS 5.2.398 или новее
  • пример Media Devices в браузере Chrome
  • канал пропускной способностью 100 Мбит/с
  • инструмент ограничения пропускной способности канала, например, winShaper на Windows или Network Link Conditioner на MacOS

2. Публикуем поток 720p в примере Media Devices

Отображается качество канала PERFECT

3. Смотрим графики битрейта публикации при хорошем канале

4. Ограничиваем исходящий трафик до 768 кбит/с, имитируя типичное подключение по 3G

Качество PERFECT меняется на BAD

5. Снимаем ограничение канала, смотрим графики битрейта в период действия ограничения

После того, как графики вновь сходятся, отображается качество канала PERFECT

Рекомендации публикующим клиентам

Если качество канала диагностируется как PERFECT или GOOD, это означает, что пропускной способности канала достаточно для публикации потока с текущим битрейтом

Если качество канала устойчиво изменилось на BAD, пропускной способности недостаточно, подписчики наблюдают проблемы. Рекомендуется снижать битрейт и/или разрешение публикации, если это возможно.

Если качество канала устойчиво изменилось на UNKNOWN, видео пакеты не доходят до сервера. Рекомендуется опубликовать поток заново.

  • No labels