Контроль качества канала публикации/проигрывания¶
В сборке 1.1.0.20 добавлена возможность получения от сервера сообщений с текущим битрейтом публикации и проигрывания и контроля качества канала,основываясь на разнице битрейтов клиента и сервера.
Чтобы включить возможность контроля качества канала, необходимо использовать метод Stream.enableConnectionQualityCalculation()
Затем необходимо зарегистрировать 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 checkVideoMuted(ConnectionQuality quality, double clientRate, double serverRate) {
if (quality != UNKNOWN && quality != BAD) {
if (serverRate < 10000) {
// Video is muted by publisher
}
}
}