Skip to end of metadata
Go to start of metadata

В сборке 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 updateQualityStatus(ConnectionQuality quality, double clientRate, double serverRate) {
        if (quality != UNKNOWN && quality != BAD) {
            if (serverRate < 10000) {
                // Video is muted by publisher
            }
        }
    }
  • No labels