Как использовать ZEGOCLOUD SDK для реализации мониторинга качества звонков в Android

Содержание
  1. Введение
  2. Предварительные условия
  3. Мониторинг качества публикации потоков
  4. Атрибуты качества публикации потока в деталях
  5. Атрибуты качества захвата аудио и видео
  6. Атрибуты качества кодирования видео
  7. Атрибуты качества передачи потока
  8. Атрибуты качества общего количества байтов
  9. Атрибуты качества информации о кодировании
  10. Атрибуты качества уровня качества опубликованного потока
  11. Мониторинг качества воспроизведения потока
  12. Атрибуты качества воспроизведения потока в деталях
  13. Атрибуты качества получения потока
  14. Атрибуты качества воспроизведения потока
  15. Атрибуты качества общего количества байтов
  16. Атрибуты качества декодирования информации
  17. Мониторинг состояния публикации/воспроизведения потока
  18. Обратный вызов для получения обновлений о состоянии публикации потока
  19. Обратный вызов для обновления статуса воспроизведения потока
  20. Отслеживать первый кадр аудио и видео
  21. Обратный вызов при захвате первого кадра аудио
  22. Обратный вызов при захвате первого кадра видео
  23. Обратный вызов при получении первого кадра звука
  24. Обратный вызов при получении первого кадра видео
  25. Обратный вызов при рендеринге первого кадра видео
  26. Отслеживать изменения разрешения видео
  27. Обратный вызов для изменения разрешения захваченного видео.
  28. Обратный вызов для изменения разрешения воспроизводимого видео
  29. Отслеживать состояние пересылки потоков через CDN
  30. Обратный вызов для получения обновлений о состоянии URL CDN
  31. Атрибуты переадресации потока в деталях

Введение

ZEGOCLOUD Express-Video SDK предоставляет возможность мониторинга качества потокового вещания во время публикации и воспроизведения потоков. После запуска публикации или воспроизведения потока SDK запускает соответствующий обратный вызов качества потока каждые 3 секунды, и клиентские приложения могут получать данные о качестве потока в реальном времени, прослушивая эти обратные вызовы.

Предварительные условия

Перед мониторингом потоковой информации убедитесь, что вы выполнили следующее:

  • Создайте проект в ZEGOCLOUD Admin Console и получите AppID вашего проекта.
  • ZEGO Express SDK был интегрирован в проект. Подробности см. в разделе Интеграция и внедрение.

Мониторинг качества публикации потоков

Чтобы отслеживать качество публикации потока, прослушайте обратный вызов onPublisherQualityUpdate. После запуска публикации потока этот обратный вызов будет срабатывать каждые 3 секунды, чтобы предоставить данные о качестве публикации потока.

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

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPublisherQualityUpdate(String streamID, ZegoPublishStreamQuality quality) {
    // You can focus on specific quality attributes and report them to your business server, or focus on a specific field of an object for giving friendly notes for users.
    // The parameter 'quality' has many attributes. If you do not want to handle every one of them, you can just focus on the 'level' attribute, a comprehensive quality indicator calculated by the SDK based on other quality attributes.
     Log.v("onPublisherQualityUpdate: streamID=", streamID);
     }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Атрибуты качества публикации потока в деталях

Качество публикации потока включает в себя частоту кадров аудио- и видеозахвата, битрейт, RTT, скорость потери пакетов и другие параметры этапов захвата и кодирования в процессе публикации потока.

Объект ZegoPublishStreamQuality включает атрибуты качества различных этапов процесса публикации потока. Подробные определения атрибутов можно найти в этом разделе:

Атрибуты качества захвата аудио и видео

Следующие атрибуты отражают качество публикации потока при захвате аудио и видео, которое близко к субъективному восприятию пользователя при локальном предварительном просмотре.

Атрибуты качества кодирования видео

Ниже приведены атрибуты качества кодирования видео на этапе кодирования при публикации потока:

Атрибуты качества передачи потока

Приведенные ниже атрибуты качества публикации потока отражают качество передачи (отправки) потока, которое связано с битрейтом кодирования и текущим качеством сети.

Атрибуты качества общего количества байтов

Приведенные ниже атрибуты качества публикации потока отражают общее количество отправленных байтов.

Атрибуты качества информации о кодировании

Приведенные ниже атрибуты качества публикации потока отражают информацию о кодировании:

Атрибуты качества уровня качества опубликованного потока

Параметр quality имеет множество атрибутов. Если вы не хотите обрабатывать каждый из них, вы можете просто сосредоточиться на атрибуте level, комплексном показателе качества сети восходящего потока, рассчитываемом ZegoExpressEngine на основе других атрибутов качества.

В следующей таблице описаны поля level:

Мониторинг качества воспроизведения потока

Чтобы отслеживать качество воспроизведения потока, прослушайте обратный вызов onPlayerQualityUpdate. После запуска воспроизведения потока этот обратный вызов будет вызываться каждые 3 секунды, чтобы предоставить данные о качестве воспроизведения потока.

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPlayerQualityUpdate(String streamID, ZegoPlayStreamQuality quality) {
     // You can focus on specific quality attributes and report them to your business server, or focus on a specific field of an object for giving friendly notes for users.
     // The parameter 'quality' has many attributes. If you do not want to handle every one of them, you can just focus on the 'level' attribute, a comprehensive quality indicator calculated by the SDK based on other quality attributes.
     Log.v("onPlayerQualityUpdate: streamID=", streamID);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Атрибуты качества воспроизведения потока в деталях

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

Объект ZegoPlayStreamQuality включает атрибуты качества различных этапов процесса воспроизведения потока. Подробные определения атрибутов вы найдете в этом разделе:

Атрибуты качества получения потока

Приведенные ниже атрибуты качества воспроизведения потока отражают качество приема потока, которое связано с качеством передачи (отправки) потока и текущим качеством сети.

Атрибуты качества воспроизведения потока

Приведенные ниже атрибуты качества воспроизведения потока отражают качество потокового вещания на этапе рендеринга потока, которое близко к субъективному восприятию зрителя. На них влияет аудио/видео кодек, и значения могут быть ниже, чем фактические частоты кадров аудио/видео приема.

  • [videoRenderFPS: Частота кадров рендеринга видео (fps).

Атрибуты качества общего количества байтов

Приведенные ниже атрибуты качества публикации потока отражают общее количество полученных байтов.

Атрибуты качества декодирования информации

Приведенные ниже атрибуты качества воспроизведения потока отражают информацию о декодировании:

Мониторинг состояния публикации/воспроизведения потока

Обратный вызов для получения обновлений о состоянии публикации потока

После начала публикации потока, если статус меняется, SDK посылает уведомление о событии через обратный вызов onPublisherStateUpdate. Чтобы отслеживать состояние публикации потока, слушайте этот обратный вызов.

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPublisherStateUpdate(String streamID, ZegoPublisherState state, int errorCode, JSONObject extendedData) {
        super.onPublisherStateUpdate(streamID, state, errorCode, extendedData);
        // In this callback, when the [state] is [ZegoPublisherState.NO_PUBLISH] and the [errorCode] is not 0, indicates the stream publishing is failed. And the SDK won't retry to publish the stream. At this time, user can set a corresponding UI to indicate the current state.     
        // In this callback, when the [state] is [ZegoPublisherState.PUBLISH_REQUESTING] and the [errorCode] is not 0, indicates the stream publishing retry is ongoing. But if the stream publishing retry still fails after the default reconnection duration, it won't try again and will send out a failure notification.
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

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

В следующей таблице описано значение свойства state и соответствующий статус пользователя:

Параметр extendedData предоставляет расширенную информацию для обновления статуса. Если вы используете ZEGO CDN, ключом этого параметра является flv_url_list, rtmp_url_list и hls_url_list, которые соответствуют URL воспроизведения потока протоколов FLV, RTMP и HLS соответственно.

Обратный вызов для обновления статуса воспроизведения потока

После начала воспроизведения потока, если статус меняется, SDK посылает уведомление о событии через обратный вызов onPlayerStateUpdate. Чтобы отслеживать состояние воспроизведения потока, прослушивайте этот обратный вызов.

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPlayerStateUpdate(String streamID, ZegoPlayerState state, int errorCode, JSONObject extendedData) {
        super.onPlayerStateUpdate(streamID, state, errorCode, extendedData);
        // In this callback, when the [state] is [ZegoPlayerState.NO_PLAY] and the [errorCode] is not 0, indicates the stream playing is failed. And the SDK won't retry to play the stream. At this time, user can set a corresponding UI to indicate the current state. 
        // In this callback, when the [state] is [ZegoPlayerState.PLAY_REQUESTING] and the [errorCode] is not 0, indicates the stream playing retry is ongoing. But if the stream playing retry still fails after the default reconnection duration, it won't try again and will send out a failure notification.
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Вы можете определить состояние сети пользователя во время воспроизведения потока на основе свойства state.

В следующей таблице описано значение свойства state и соответствующий статус пользователя:

Отслеживать первый кадр аудио и видео

Обратный вызов при захвате первого кадра аудио

Чтобы получить уведомление о событии захвата первого кадра аудио, прослушайте обратный вызов onPublisherCapturedAudioFirstFrame.

После начала публикации потока SDK отправляет уведомление о событии через этот обратный вызов, когда захватывается первый кадр аудио.

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

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPublisherCapturedAudioFirstFrame() {
        super.onPublisherCapturedAudioFirstFrame();
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Обратный вызов при захвате первого кадра видео

Чтобы получить уведомление о событии захвата первого кадра видео, прослушайте обратный вызов onPublisherCapturedVideoFirstFrame.

После начала публикации потока SDK отправляет уведомление о событии через этот обратный вызов, когда захватывается первый кадр видео.

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

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPublisherCapturedVideoFirstFrame(ZegoPublishChannel channel) {
    super.onPublisherCapturedVideoFirstFrame(channel);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Обратный вызов при получении первого кадра звука

Чтобы получить уведомление о событии при получении первого кадра аудио, прослушайте обратный вызов onPlayerRecvAudioFirstFrame.

После начала воспроизведения потока SDK отправляет уведомление о событии через этот обратный вызов, когда получен первый кадр аудио.

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPlayerRecvAudioFirstFrame(String streamID) {
        super.onPlayerRecvAudioFirstFrame(streamID);
        AppLogger.getInstance().receiveCallback("onPlayerRecvAudioFirstFrame streamID:%s",streamID);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Обратный вызов при получении первого кадра видео

Чтобы получить уведомление о событии при получении первого кадра видео, прослушайте обратный вызов onPlayerRecvVideoFirstFrame.

После начала воспроизведения потока SDK посылает уведомление о событии через этот обратный вызов, когда получен первый кадр видео.

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPlayerRecvVideoFirstFrame(String streamID) {
        super.onPlayerRecvVideoFirstFrame(streamID);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Обратный вызов при рендеринге первого кадра видео

Чтобы получить уведомление о событии при рендеринге первого кадра видео, прослушивайте обратный вызов onPlayerRenderVideoFirstFrame.

После начала воспроизведения потока SDK посылает уведомление о событии через этот обратный вызов, когда первый кадр видео получен и отрендерен.

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

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPlayerRenderVideoFirstFrame(String streamID){
        super.onPlayerRenderVideoFirstFrame(streamID);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Отслеживать изменения разрешения видео

Обратный вызов для изменения разрешения захваченного видео.

Чтобы получить уведомление об изменении размера захваченного видео, прослушайте обратный вызов onPublisherVideoSizeChanged.

После начала публикации потока SDK отправляет уведомление о событии через этот обратный вызов, когда разрешение захваченного видео изменяется.

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

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

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPublisherVideoSizeChanged(int width, int height, ZegoPublishChannel channel) {
        super.onPublisherVideoSizeChanged(width, height, channel);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Обратный вызов для изменения разрешения воспроизводимого видео

Чтобы получить уведомление об изменении разрешения воспроизводимого видео, прослушайте обратный вызов события onPlayerVideoSizeChanged.

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

  • Вы не будете получать никаких уведомлений при воспроизведении только аудиопотоков.

  • Если сторона издателя потока запускает управление трафиком в SDK из-за проблем с сетью, различимость кода на стороне издателя потока может быть динамически уменьшена, и SDK посылает уведомление через этот обратный вызов.

  • SDK посылает уведомление, когда пользовательский интерфейс воспроизводимых потоков находится в процессе рендеринга. Вы можете использовать этот обратный вызов для обновления или переключения элементов пользовательского интерфейса.

engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPlayerVideoSizeChanged(String streamID, int width, int height) {
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Отслеживать состояние пересылки потоков через CDN

Обратный вызов для получения обновлений о состоянии URL CDN

Чтобы получать уведомления о событиях, когда указанный URL CDN изменяется (добавляется новый URL или удаляется существующий URL), слушайте обратный вызов onPublisherRelayCDNStateUpdate.

После того как сервер ZEGO RTC Server пересылает поток в CDN, SDK отправляет уведомления о событиях, когда состояние потоков, пересылаемых в CDN, меняется, например, пересылка потока прекращается или операция пересылки повторяется.

По этому обратному вызову можно определить, в норме ли аудио- и видеопотоки, пересылаемые в CDN:

  • Если возвращаемый результат этого обратного вызова указывает на то, что он ненормальный, найдите причину того, что аудио- и видеопотоки перенаправляются в CDN, и выполните соответствующую операцию аварийного восстановления.
  • Если причина исключения неизвестна, обратитесь в службу технической поддержки ZEGO для дальнейшего анализа.
engine.setEventHandler(new IZegoEventHandler() {
    @Override
    public void onPublisherRelayCDNStateUpdate(String streamID, ArrayList<ZegoStreamRelayCDNInfo> infoList) {
    super.onPublisherRelayCDNStateUpdate(streamID, infoList);
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Атрибуты переадресации потока в деталях

Информация о переадресации потока включает URL CDN, статус переадресации, причину статуса переадресации потока и время изменения статуса.

Объект ZegoStreamRelayCDNInfo включает атрибуты переадресации потока. Подробные определения атрибутов можно найти в этом разделе:

В следующей таблице описано значение свойства state:

В следующей таблице описано значение свойства updateReason:

Оцените статью
Procodings.ru
Добавить комментарий