Bumper & Pause Ads: Self-Hosted Monetization
Putting ads on a self-built video site traditionally means an ad network: SDK weight, privacy compliance, fill-rate roulette, and revenue shares. But a large slice of sites don’t need “programmatic” at all — they need their own brand intro, their own course promo, their own event banner. ZWPlayer’s self-owned ad system is built for that: bumpers plus pause ads, your media, native rendering, zero third-party dependencies.
Bumpers: Pre-Roll and Post-Roll
new ZWPlayer({
playerElm: 'player',
url: 'main.mp4',
bumper: {
preRoll: { url: 'intro.mp4', skipOffset: 5, clickThrough: 'https://brand.example.com' },
postRoll: { url: 'outro.mp4', skipOffset: null },
},
});
Figure 1: the pre-roll playing — the skip button appears bottom-right
The skipOffset three states are the soul of the feature:
| Value | Behavior | Fits |
|---|---|---|
null (default) |
Forced full playback | Brand intros, compliance notices |
0 |
Skippable immediately | Experience-first slots |
N |
Skip button after N seconds | Platform-style ad slots |
clickThrough makes the bumper clickable; postRoll sits at the end — the natural home of “follow us” and “next episode” cards.
Pause Ads: Show on Pause
When the viewer pauses, an overlay appears (image or video, prefer picks the form):
pauseAd: { video: { url: 'promo.mp4' } }
// or { image: { url: 'promo.jpg', clickThrough: '...' } }
Figure 2: the promo overlay while the main video is paused
Pause is of the highest-attention moments (fetching water, replying to a message) and a conversion slot — a course coupon on a course video massively outperforms banners.
Why No Ad Network
- Own media: intros, promos, and banners never had programmatic needs;
- Controlled experience: skip policy per placement — forced for brand, 5-second-skippable for promos;
- Zero dependencies: no SDK, no third-party domain availability risk, no privacy surface;
- 100% of the yield: traffic routes to your own conversion endpoints, unshared.
Operations Advice
- Intros ≤ 5 s or skippable — the boundary of forced viewing is goodwill;
- Pause ads relevant to content: coupon on the course page, not random e-commerce;
- Frequency caps: don’t front-load every episode;
setBumpers()adjusts at runtime; - Don’t stack everything: bumpers + pause ads + watermarks on screen — content experience wins.