Skip to content

Параметр setSegmentStatListener

Описание

Метод setSegmentStatListener в TeleportConfiguration.Builder позволяет установить слушатель (listener) для получения детальной статистики по каждому загруженному видео-сегменту Teleport SDK.

Назначение

Этот листенер предоставляет ценную информацию о процессе загрузки сегментов, включая источник, размер, время загрузки и другие метрики. С его помощью вы можете собирать и анализировать данные о производительности P2P-сети в вашем приложении.

Требования к функции

  • Листенер принимает объект SegmentStat, который содержит всю собранную статистику по сегменту.
  • Вызывается на главном потоке (Main-потоке).

Структура класса SegmentStat

Класс SegmentStat инкапсулирует данные о загруженном сегменте и состоит из следующих компонентов:

kotlin
data class SegmentStat(
    val timestamp: Long,          // UNIX timestamp времени загрузки сегмента
    val result: SegmentStatResult,    // Результат загрузки сегмента
    val request: SegmentRequestData,  // Данные запроса сегмента
    val timings: RequestTimings,      // Замеренные тайминги загрузки
)

SegmentStatResult

Представляет результат загрузки сегмента.

kotlin
data class SegmentStatResult(
    val segmentId: String,            // Идентификатор сегмента
    val sourceId: String,             // Источник, из которого был скачан сегмент (CDN | PDN)
    val targetId: String?,            // Идентификатор пира, если sourceId = PDN
    val waitTimeout: Long,            // Таймаут ожидания из Teleport PDN
    val downloadTimeout: Long,        // Таймаут загрузки из Teleport PDN
    val size: Long,                   // Размер сегмента в байтах
    val connected: Boolean,           // Флаг активности соединения с сигнальным сервером Teleport
    val mode: PeeringMode             // Текущий режим пиринга
)

PeeringMode (enum)

Перечисление режимов пиринга.

kotlin
enum class PeeringMode {
    OFF, DOWNLOAD, UPLOAD, FULL
}

SegmentRequestData

Данные о запрошенном сегменте.

kotlin
data class SegmentRequestData(
    val url: String,                  // Исходный URL сегмента
    val uri: String,                  // Унифицированный URI сегмента (после urlCleaner)
    val quality: SegmentQuality,      // Качество видео-потока (SegmentQuality)
    val type: SegmentType,            // Тип сегмента (SegmentType)
    val duration: Long,               // Длительность сегмента, в секундах
    val bufferSize: Float,            // Размер буфера в плеере, в секундах
    val timeout: Long                 // Таймаут запроса
)

RequestTimings

Замеренные тайминги выполнения запроса.

kotlin
data class RequestTimings(
    val requestStartTimestamp: Long,  // UNIX timestamp времени запроса сегмента плеером (начало запроса)
    val timeToHave: Long,             // Дельта ожидания сегмента в Teleport PDN (время до первого ответа пира)
    val timeToSent: Long,             // Дельта времени инициализации загрузки (время до отправки запроса)
    val timeToFirstByte: Long,        // Дельта ожидания первого чанка (Time To First Byte)
    val timeToLastByte: Long,         // Дельта окончания загрузки сегмента (Time To Last Byte)
    val timeToFinish: Long            // Дельта окончания обработки сегмента и передачи данных в плеер
)

Ключевые параметры для сбора статистики

При сборе статистики на клиенте особое внимание следует уделить следующим параметрам:

  • size в SegmentStatResult - размер скачанного сегмента в байтах.
  • sourceId в SegmentStatResult - источник загрузки сегмента (CDN или PDN).
  • timeToFinish в RequestTimings - полное время обработки запроса от плеера в миллисекундах.

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

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

kotlin
TeleportConfiguration.Builder("YOUR_API_KEY")
        .setSegmentStatListener { stat: SegmentStat ->
            // Здесь происходит обработка полученной статистики
            println("Segment loaded: ID=${stat.result.segmentId}, Source=${stat.result.sourceId}, Size=${stat.result.size} bytes, Time=${stat.timings.timeToFinish} ms")
            // Отправка статистики на аналитический сервер
        }
        .build()