Параметр setSegmentStatListener
Описание
Метод setSegmentStatListener в TeleportConfiguration.Builder позволяет установить слушатель (listener) для получения детальной статистики по каждому загруженному видео-сегменту Teleport SDK.
Назначение
Этот листенер предоставляет ценную информацию о процессе загрузки сегментов, включая источник, размер, время загрузки и другие метрики. С его помощью вы можете собирать и анализировать данные о производительности P2P-сети в вашем приложении.
Требования к функции
- Листенер принимает объект
SegmentStat, который содержит всю собранную статистику по сегменту. - Вызывается на главном потоке (Main-потоке).
Структура класса SegmentStat
Класс SegmentStat инкапсулирует данные о загруженном сегменте и состоит из следующих компонентов:
data class SegmentStat(
val timestamp: Long, // UNIX timestamp времени загрузки сегмента
val result: SegmentStatResult, // Результат загрузки сегмента
val request: SegmentRequestData, // Данные запроса сегмента
val timings: RequestTimings, // Замеренные тайминги загрузки
)SegmentStatResult
Представляет результат загрузки сегмента.
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)
Перечисление режимов пиринга.
enum class PeeringMode {
OFF, DOWNLOAD, UPLOAD, FULL
}SegmentRequestData
Данные о запрошенном сегменте.
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
Замеренные тайминги выполнения запроса.
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- полное время обработки запроса от плеера в миллисекундах.
(Пожалуйста, обратитесь к разработчикам для получения описания остальных параметров, которые могут быть актуальны для вашего анализа).
Пример использования
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()