Source content "preprocessing"

You need to work with your watermarking vendor to produce watermarked content from your unmarked, source material.

This process is referred to as "preprocessing," and it requires that your watermarking vendor perform the following:

  • Convert source material content into "A" and "B" segments/fragments. We refer to these as "variants."
  • Store the "A" and "B" variants on your origin server using different "A" and "B" file naming or pathing.
  • Generate a manifest file without any indication of the "A" and "B" variants.

There are multiple preprocessing methods you can apply.

The "filename-prefix AB naming" method

This is the easiest to implement, and it's the recommended method for preprocessing. The watermarking vendor needs to generate A and B variants of your source content, by including "a" and "b" in the filename of each variant segment/fragment, and then store it in the applicable directory in your origin.

Preprocessing example

Here is an example that uses a presentation called "baseball," with a master playlist, a media playlist, and several TS segments.

<base_path>/baseball/master.m3u8This contains relative paths to variants: 1080-media.m3u8, 720-media.m3u8

<base_path>/baseball/1080-media.m3u8This references relative paths to segments: /1080/segment_1.ts

<base_path>/baseball/1080/a.segment_1.ts

<base_path>/baseball/1080/a.segment_2.ts

<base_path>/baseball/1080/b.segment_1.ts

<base_path>/baseball/1080/b.segment_2.ts

<base_path>/baseball/720-media.m3u8This references relative paths to segments: /720/segment_1.ts

<base_path>/baseball/720/a.segment_1.ts

<base_path>/baseball/720/a.segment_2.ts

<base_path>/baseball/720/b.segment_1.ts

<base_path>/baseball/720/b.segment_2.ts

The "directory-prefix AB naming" method

Instead of prefixing the filename, the path just before the segments/fragments is prefixed with "/a/" and "/b/" subdirectories. Variants are stored using the same file naming in each of these directories, accordingly.

Preprocessing example

Here's an example that uses a presentation called "baseball," with a master playlist, a media playlist, and several TS segments. Notice how the segment content is stored in "a" and "b" named subdirectories, but keeps it's original file naming.

<base_path>/baseball/master.m3u8This contains relative paths to variants: 1080-media.m3u8, 720-media.m3u8

<base_path>/baseball/1080-media.m3u8This references relative paths to segments: /1080/segment_1.ts

<base_path>/baseball/1080/a/segment_1.ts

<base_path>/baseball/1080/a/segment_2.ts

<base_path>/baseball/1080/b/segment_1.ts

<base_path>/baseball/1080/b/segment_2.ts

<base_path>/baseball/720-media.m3u8This references relative paths to segments: /720/segment_1.ts

<base_path>/baseball/720/a/segment_1.ts

<base_path>/baseball/720/a/segment_2.ts

<base_path>/baseball/720/b/segment_1.ts

<base_path>/baseball/720/b/segment_2.ts

The "unlabeled A variant" method

This is additional support that can be applied to either of the preprocessing methods. It lets you easily disable watermarking once the requirement has passed. The watermarking vendor needs to leave out the specific "A" label from your content, based on your selected method—either no "a" leading the filename, or no "/a/" subdirectory in the path. Essentially, the "A" variant content just needs to maintain its standard naming and exist in the default location called out in the manifest file.

How do I "easily" disable watermarking with this method?

  1. Disable Watermarking in your AMD property.
  2. Update your client application (player) to request segment content from the default location called out in the manifest file.

Preprocessing examples

These show how segments might be stored on your origin, after conversion by your watermarking vendor if you're also using this method.

I'm using the "filename-prefix AB naming" method

<base_path>/baseball/master.m3u8This contains relative paths to variants: 1080-media.m3u8, 720-media.m3u8

<base_path>/baseball/1080-media.m3u8This references relative paths to segments: /1080/segment_1.ts

<base_path>/baseball/1080/segment_1.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/1080/segment_2.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/1080/b.segment_1.ts

<base_path>/baseball/1080/b.segment_2.ts

<base_path>/baseball/720-media.m3u8This references relative paths to segments: /720/segment_1.ts

<base_path>/baseball/720/segment_1.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/720/segment_2.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/720/b.segment_1.ts

<base_path>/baseball/720/b.segment_2.ts

I'm using the "directory-prefix AB naming" method

<base_path>/baseball/master.m3u8This contains relative paths to variants: 1080-media.m3u8, 720-media.m3u8

<base_path>/baseball/1080-media.m3u8This references relative paths to segments: /1080/segment_1.ts

<base_path>/baseball/1080/segment_1.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/1080/segment_2.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/1080/b/segment_1.ts

<base_path>/baseball/1080/b/segment_2.ts

<base_path>/baseball/720-media.m3u8This references relative paths to segments: /720/segment_1.ts

<base_path>/baseball/720/segment_1.tsUnlabeled, this facilitates easy disabling of watermarking.

<base_path>/baseball/720/segment_2.ts

<base_path>/baseball/720/b/segment_1.ts

<base_path>/baseball/720/b/segment_2.ts

Are you using separate audio and video segments?

If you prepared your content with separate audio and video segments using the same file extensions, Akamai will attempt the A to B variant switch with audio as well as video. So, your watermarking vendor must prepare A and B variants for the audio segments as well, even though the A to B switch for the audio has no watermarking benefit.

If the audio segments use a different file extension, they must reside in the default location specified in the manifest because the A to B switch is bypassed for them. This is one of the primary benefits of the “filename-prefix AB naming” approach when preprocessing content.

This applies to all preprocessing methods.

DASH-specific preprocessing requirements

At this time, the only variant of DASH that is supported is SegmentTemplate using the $Number$ expansion in a DASH media presentation description (MPD). The $Number$ macro must be at the end of the filename, and prefixed with an underscore ("_") character. Additionally, any “init” URLs must be prefixed with an additional naming of the form, “<filename>_init.mp4.” This helps Akamai detect the file as an “init” request and tells the Edge server to skip the AB switching.

The following DASH MPD snippet shows an example of the tags and attributes:

<MPD>
  <Period>
      <AdaptationSet mimeType="video/mp4" contentType="video">
          <SegmentTemplate duration="120" timescale="30" startNumber="1"
                           media="$RepresentationID$/$RepresentationID$_$Number$.m4v"
                           initialization="$RepresentationID$/$RepresentationID$_init.m4v"/>
          ...
      </AdaptationSet>
      <AdaptationSet mimeType="audio/mp4" contentType="audio">
          <SegmentTemplate duration="192512" timescale="48000" startNumber="1"
                           media="$RepresentationID$/$RepresentationID$_$Number$.m4a"
                           initialization="$RepresentationID$/$RepresentationID$_init.m4a"/>
          ...
      </AdaptationSet>
  </Period>
</MPD>

How to generate the manifest file

The original manifest file—before any preprocessing—is what is used by your client application (player) to request content. You don't need to modify the manifest file to obtain variant content. The Akamai edge uses the watermarking token (WMT) that your vendor creates to do this throughout the process, and ensures proper delivery of appropriate "A" or "B" segment.