Перейти к содержанию

Контроль качества канала публикации/проигрывания

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

Чтобы включить возможность контроля качества канала, необходимо использовать метод Stream.enableConnectionQualityCalculation()

publishStream.enableConnectionQualityCalculation(true);

Затем необходимо зарегистрировать callback функцию, которая получает на вход показатель качества и текущие значения битрейта клиента и сервера,усредненные фильтром Калмана

publishStream.setConnectionQualityCallback((quality, clientRate, serverRate) -> {
    updateQualityStatus(quality, mUpdateQualityStatus);
});

Пример использования:

регистрация обработчика code, обработчик code

private TextView mUpdateQualityStatus;
...
publishStream.enableConnectionQualityCalculation(true);
publishStream.setConnectionQualityCallback((quality, clientRate, serverRate) -> {
    updateQualityStatus(quality, mUpdateQualityStatus);
});
...
public void updateQualityStatus(ConnectionQuality quality, TextView textView) {
    int color;
    switch (quality) {
        case BAD: color = Color.RED; break;
        case GOOD: color = Color.YELLOW; break;
        case PERFECT: color = Color.GREEN; break;
        case UPDATE:
        case UNKNOWN:
        default: color = Color.LTGRAY;
    }
    runOnUiThread(() -> {
        textView.setText(quality.toString());
        textView.setTextColor(color);
    });
}

Эту возможность можно использовать и для определения того, заглушено ли видео в принимаемом потоке. В этом случае в обработчик необходимо также передать текущий битрейт сервера

playStream.enableConnectionQualityCalculation(true);
playStream.setConnectionQualityCallback((quality, clientRate, serverRate) -> {
    checkVideoMuted(quality, clientRate, serverRate);
});
...
public void updateQualityStatus(ConnectionQuality quality, double clientRate, double serverRate) {
    if (quality != UNKNOWN && quality != BAD) {
        if (serverRate < 10000) {
            // Video is muted by publisher
        }
    }
}