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, andiosX64. - 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:
AVAssetVariantandAVMediaSelectionGroupare 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.