Stream Probe introduces full per-segment network metrics for iOS 18+ in this update, bringing the Segments tab to parity with Android.
TL;DR
The Segments tab on iOS now shows Time to First Byte, transfer speed, CDN provider, and cache status for every HLS segment. This data was previously Android-only. iOS 18's AVMetricHLSMediaSegmentRequestEvent made it possible.
What's New
- AVMetricsSegmentAdapter (Swift): Extracts
URLSessionTaskTransactionMetricsand response headers directly from iOS 18 AVMetrics events, feeding raw timing and CDN data into the pipeline avMetricsSegmentMetricKotlin mapper: Converts AVMetrics parameters into the sharedSegmentMetricmodel, populatingnetworkTiming(TTFB, connect time, transfer duration) andcdnInfo(provider, cache hit/miss)- AVPlayerProbe updates: Manages the new iOS 18 AVMetrics consumer task lifecycle and suppresses the now-redundant access-log emissions to avoid double-counting
- Unit tests: Full coverage for the Kotlin AVMetrics mapper, covering timing edge cases and CDN header parsing
How to Use
No API changes. If you're on iOS 18+, the Segments tab will automatically populate with the new fields. Older iOS versions continue using the existing access-log path.
// AVMetricsSegmentAdapter is wired internally via AVPlayerProbe
// SegmentMetric.networkTiming and SegmentMetric.cdnInfo are now populated on iOS 18+
FAQ
Does this work on iOS versions older than 18?
No. AVMetricHLSMediaSegmentRequestEvent is iOS 18+. Devices running older versions fall back to the existing access-log-based metrics with no change in behavior.
Will I see duplicate segment metrics now that both AVMetrics and access logs were active?
No. AVPlayerProbe was updated to suppress the redundant access-log emissions when the iOS 18 AVMetrics consumer is active, so each segment is counted once.
What CDN data is actually captured?
The adapter reads response headers to extract CDN provider identification and cache status (hit or miss). The exact fields populated depend on what headers your CDN returns.
Does this affect the Android SDK?
Not at all. The Kotlin mapper is shared infrastructure, but the Android pipeline was already using its own segment metric path and is unchanged.