Feature

iOS Support via Kotlin Multiplatform: Shared OverlayPresenter and AVPlayerProbe

TL;DR Snapshot

Stream Probe now builds for iOS alongside Android using Kotlin Multiplatform. The overlay and session logic lives in a shared OverlayPresenter, and a new headless AVPlayerProbe built on AVFoundation handles iOS playback tracking. This lays the groundwork for unified cross-platform video debugging.

Share this update

Stream Probe introduces core iOS support in this update, powered by a Kotlin Multiplatform architecture that shares session and presentation logic across Android and iOS.

TL;DR

The overlay and session logic is now platform-independent. Android's OverlayManager became a thin renderer on top of the shared OverlayPresenter, and a new headless AVPlayerProbe hooks into AVFoundation to feed the same SessionStore on iOS. This is the foundation for cross-platform video analytics.

What's New

  • Shared OverlayPresenter: Extracted platform-independent overlay logic into a common KMP module. Android's OverlayManager is now a thin renderer that delegates to it.
  • iOS targets added: The KMP build now includes iosArm64, iosSimulatorArm64, and iosX64.
  • Headless AVPlayerProbe: A new iOS probe built on AVFoundation that captures playback events and writes them directly into the shared SessionStore.
  • Cross-platform track models: AVAssetVariant and AVMediaSelectionGroup are mapped to shared track model types, so track data works the same on both platforms.
  • Auto-scroll fix: Corrected a regression in the overlay's list auto-scroll behavior.
  • Coroutine dispatcher tuning: Optimized dispatcher usage inside OverlayManager for more predictable UI updates.
  • Gradle 9.4.1 and AGP 9.2.1: Updated build tooling across the project.

How to Use

For Android, nothing changes in your setup. The OverlayManager API is the same.

For iOS (early access), instantiate AVPlayerProbe and pass your AVPlayer instance:

// Kotlin/Native (iOS)
val probe = AVPlayerProbe(player = avPlayer)
probe.start()

The probe runs headless, no UI overlay on iOS yet. Session data flows into the shared SessionStore and can be read from either platform.

FAQ

iOS Support via Kotlin Multiplatform: Shared OverlayPresenter and AVPlayerProbe · Stream Probe Changelog · PushToPost