Feature

iOS Per-Segment Network Metrics: TTFB, CDN Info, and Cache Status

TL;DR Snapshot

iOS 18's AVMetrics API finally exposes per-segment network data. This update wires it into Stream Probe via a new Swift adapter and Kotlin mapper, so the Segments tab now shows TTFB, CDN info, and cache status on iOS just like Android.

Share this update

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 URLSessionTaskTransactionMetrics and response headers directly from iOS 18 AVMetrics events, feeding raw timing and CDN data into the pipeline
  • avMetricsSegmentMetric Kotlin mapper: Converts AVMetrics parameters into the shared SegmentMetric model, populating networkTiming (TTFB, connect time, transfer duration) and cdnInfo (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.

iOS Per-Segment Network Metrics: TTFB, CDN Info, and Cache Status · Stream Probe Changelog · PushToPost