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