Skip to content

Ad insertion

Server-side ad insertion puts the break inside the media timeline. There is no separate ad request from the browser, so there is nothing for a blocker to intercept and nothing to buffer awkwardly between content and commercial.

Terminal window
curl -b jar -X POST \
http://localhost:9001/api/v1/apps/default/ads/promo-a \
--data-binary @promo.mp4

Ads are conditioned like VOD assets, so the splice is clean. GET /api/v1/apps/default/ads reports readiness.

Terminal window
curl -b jar -X POST \
http://localhost:9001/api/v1/apps/default/streams/channel1/ad-break \
-H 'content-type: application/json' \
-d '{"ad":"promo-a","duration_secs":30}'

Omit duration_secs and the ad plays in full. Give a shorter value and the break is cut to that length, which is what you want when the slot is fixed. The default when the field is absent comes from [ssai].default_break_secs.

The dashboard has the same control under each live stream, with a menu to pick the ad and set the duration.

For a playout channel, set ads and ad_every on the playlist and breaks happen at item boundaries automatically. See VOD and playout.

The break is signalled with a stream discontinuity, so conforming players handle the transition the way they were designed to. To the player it is one continuous stream that happens to change encoding parameters partway through.

If you restream to another platform, that partner usually should not receive your ad breaks. Jadarit keeps a clean copy of the pre-insertion feed available at the same time, so partners get the programme while your own audience gets the commercial. It is produced only when something is actually consuming it, so it costs nothing when unused.

Per-target control lives in the restream configuration; see Recording and restreaming.