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 },
  },
});

Pre-roll 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: '...' } }

Pause ad 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.