# Learn DAI Pod Serving API

[Pod serving](https://support.google.com/admanager/answer/10492367) lets you perform
server-side ad insertion with Google ads, without sending your content to
Google's DAI servers. You can work with your existing Video Technical
Partner to manipulate your manifest or implement your own manifest manipulation
server using the DAI Pod Serving API
([Live](https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/live) or
[VOD](https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/vod)).

You can use the Interactive Media Ads (IMA) DAI SDK to develop client apps for
the web and mobile platforms that seamlessly interact with the DAI Pod Serving
API. To configure the IMA DAI SDK with DAI Pod Serving API, refer to the guide
that's specific to your client app's platforms (Android, Chromecast, HTML5, iOS,
Roku, tvOS) for Live or VOD stream format.

If you have special requirements that are not supported by the IMA DAI SDK, you
can follow the client video player guide
([Live](https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/live/client) or
[VOD](https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/vod/client)) to develop
your own client apps.

## DAI pod serving components

An implementation of the DAI Pod Serving API consists of three main components:

### Google Ad Manager

Google Ad Manager is a hosted service that creates and manages user stream
sessions, selects ads to serve, encodes them as streaming segments, and delivers
them to the client video player when requested.

In live streams, ads are inserted in real time when specific segments are
requested by the client video player and are delivered to the player as URL
redirects for those media segments.

In VOD streams, ads are selected before playback begins and are delivered to
the manifest manipulator as a set of stream manifests corresponding to each
ad pod.

### Manifest manipulator

A manifest manipulator is a server that receives a stream session ID from
the client video player, uses it to associate ads with that stream, and
embed those ads into the stream manifest.

For HLS live streams, the manifest manipulator doesn't communicate directly
with Ad Manager. Instead, it places ad media segments in the stream manifest
with Ad Manager URLs so that the client video player can request the ad media
segment files.

For VOD streams, the manifest manipulator communicates directly with Ad Manager
to request ads, and receives a set of streaming manifests to merge with the
content stream. The combined manifest is then sent to the client video player
for playback.

### Client video player

The client video player is the app or website that eventually plays back the
video stream containing ads. Before doing so, it requests a stream ID from
Ad Manager and then passes that ID to the manifest manipulator to receive a
streaming manifest to play. It's also in charge of watching for in-stream
metadata and triggering ad tracking events.

## Livestream versus VOD pod serving

At a glance, livestream and VOD pod serving might appear very similar.
However, there are several significant differences between the two workflows.

| Livestream pod serving | VOD pod serving |
|---|---|
| The client video player requests ads from Ad Manager as needed throughout playback. These ads can be preselected using *early ad break notifications*. | The manifest manipulator requests all ads from Ad Manager before playback begins. |
| With HLS streams, the manifest manipulator doesn't directly interact with Ad Manager, but instead generates ad segment URLs for the client video player to request as needed. | The manifest manipulator directly requests ads from Ad Manager before generating the stream manifest for the client video player. |
| Ad Manager might insert slate if an ad pod is shorter than a specified ad break. | Slate is not needed or supported. |
| You must register the livestream event and encoding profiles with Ad Manager before ads can be requested. | You don't need to perform any setup in Ad Manager before ads can be requested, but the manifest manipulator must provide the relevant encoding profiles and ad tag for your stream on each ad request. |

It's important to keep these differences in mind as you proceed with
[Live](https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/live) or
[VOD](https://developers.google.com/ad-manager/dynamic-ad-insertion/api/pod-serving/vod) pod serving.