preloadVast

abstract suspend fun preloadVast(adTagUrl: String)

Phase 1 of the two-phase path: fetch, parse and init() the ad for adTagUrl WITHOUT starting it. Suspends until IMA has an AdsManager ready to play.

This is what takes the ad request off the critical path. A cold playVast does the whole IMA round-trip at break start, which measured 1675ms p50 (gam-csai) and 2436ms (vast) into the break on Android device runs, against 22-43ms on web, which has always preloaded. Content is silenced the moment the break begins, so that gap is heard as silence over still-moving content.

NO muted parameter, unlike the web signature. Web's IMA owns the video element, so it must be told the intended volume before it creates the AdsManager. Android's IMA renders through the SDK's OWN VideoAdPlayer on the ad ExoPlayer, whose mute state the renderer already applies at break start — a volume argument here would do nothing, and AdsManager exposes no volume control to honour it with.