StreamProbe introduces a debug overlay in this update, giving developers real-time visibility into HLS stream variants, manifest data, and analytics events directly on the player screen.
TL;DR
The new debug overlay surfaces active video track info, parsed HLS manifest details, and analytics tracking data without leaving the player. PlayerInterceptor has been enhanced to manage active tracks and fire analytics events more reliably.
What's New
- Debug overlay on PlayerScreen — displays active HLS variant info, manifest details, and analytics state in real time
- Enhanced PlayerInterceptor — now handles analytics event tracking and active track management in one place
- HLS manifest parsing support — added data models for
VariantInfoand parsed manifest representation so manifest data flows cleanly into the UI - Fixed
VariantListAdapteritem comparison —areItemsTheSameandareContentsTheSamelogic corrected for accurate DiffUtil-based UI updates - Safe player initialization —
PlayerScreennow initializes the player using the activity context to avoid context-related crashes
How to Use
The debug overlay is rendered automatically when the player is active. You can observe the currently selected variant and manifest data through the updated PlayerInterceptor hooks:
// PlayerInterceptor now exposes active track and analytics state
interceptor.onTrackChanged { variantInfo ->
// variantInfo contains resolution, bitrate, codecs
}
interceptor.onAnalyticsEvent { event ->
// handle or log analytics events
}
The overlay picks up these values and renders them on screen without any extra configuration.
FAQ
Does the debug overlay show in release builds?
The overlay is currently tied to the debug build configuration. You can control visibility through the build variant — it won't appear in production by default.
What HLS variant data does the overlay display?
It shows the active variant's resolution, bitrate, and codec info parsed from the HLS manifest via the new VariantInfo data model.
What broke the VariantListAdapter before this fix?
The item comparison callbacks weren't differentiating between variants correctly, so DiffUtil would miss updates and the list UI wouldn't refresh when the active track changed.
Does this change how PlayerInterceptor is initialized?
The interceptor API is mostly additive — new callbacks for analytics and active track management were added. Existing initialization code still works, but check the activity context change in PlayerScreen if you're extending it.