VolumeChangeEvent
data class VolumeChangeEvent(val muted: Boolean, val volume: Double, val timestamp: Long) : OptiViewAdsEvent
Unified audio state changed — the Kotlin mirror of the TS VolumeChangeEvent.
"Unified" is the point: muted/volume describe what the VIEWER hears, not one player's field. On Android the ad ExoPlayer renders both static creatives and IMA VAST ads, so a single target covers everything audible during a break.
Without this event an application had no way to keep a mute button in sync short of polling. Worse, the Kotlin SDK had no unified audio surface at all: muting reached only the CONTENT player, so a muted viewer still heard every ad break at full volume. Caught by catalog-controls G4.