DASH audio timeline pattern
In a DASH manifest, the SegmentTimeline element describes when each media
segment is available and its duration. For audio tracks, the timescale mismatch between
audio and video codecs means that audio segment durations don't always align evenly with
video segment boundaries. This typically produces a repeating pattern of slightly different
durations in the audio timeline. For example, an audio track might alternate between
durations of 287232 and 288768 (at a timescale of 48000) in a predictable cycle.
Without patternization, the manifest must list every audio segment individually in the
SegmentTimeline, using separate S elements for each duration
change. As the time-shift buffer grows, the manifest grows linearly, which increases
bandwidth usage and parsing time on playback devices.
When you enable the PATTERNED audio timeline setting, MediaPackage detects the
repeating cycle of audio segment durations and represents it as a Pattern
element in the manifest. Instead of listing each segment individually, the
SegmentTimeline references the pattern by ID, and a single S
element with a repeat count can describe many segments. Enabling this setting adds
an EssentialProperty descriptor with the scheme
urn:mpeg:dash:pattern:2024 to the adaptation set. This descriptor signals
to players that the manifest may contain patterned elements. The
EssentialProperty is always present when the feature is enabled, but
Pattern elements only appear when MediaPackage detects a qualifying repeating
cycle in the audio segment durations. This follows the Segment Duration
Patternization (SDP) specification from DASH-IF.
MediaPackage analyzes incoming audio segment durations and identifies repeating cycles
(patterns of 2 to 6 segments). Once a pattern repeats at least twice, MediaPackage emits a
Pattern element containing P sub-elements that describe the
duration sequence. The S elements in the SegmentTimeline then
reference this pattern using the p attribute (pattern ID) and the
pE attribute (pattern entry point, indicating where in the cycle the segment
begins).
If a segment arrives that doesn't match the expected pattern position, MediaPackage breaks from the pattern and represents that segment explicitly. Pattern detection then restarts. Similarly, when a discontinuity occurs (such as an input switch or stream restart), the pattern state resets and detection begins fresh on the new content.
When to use each setting
Choose between the two AudioTimelinePattern values based on your
playback environment:
-
NONE– The manifest uses an explicit per-segment timeline. Every audio segment duration is listed individually in theSegmentTimeline. Use this setting if your players don't support the DASH-IF SDP specification, or if you need maximum compatibility with older DASH clients. -
PATTERNED– The manifest includes theurn:mpeg:dash:pattern:2024EssentialPropertydescriptor, and may containPatternelements when MediaPackage detects repeating duration cycles in the audio segments. When patterns are present, manifest size is significantly reduced for long time-shift buffers. Use this setting when your players support this feature and you want to minimize manifest bandwidth.
Caveats
Keep the following in mind when using audio timeline patterns:
-
This feature applies only to audio timelines. Video and subtitle timelines are not patternized.
-
When the
PATTERNEDsetting is enabled, MediaPackage always includes theEssentialPropertydescriptorurn:mpeg:dash:pattern:2024in the manifest, even if no pattern has been detected yet. If a player encounters this essential property, the manifest may containPatternelements. Players must support these elements to parse the manifest. Players that don't recognize it will reject the manifest. -
When a discontinuity occurs (for example, an input switch), the pattern resets. Segments around the discontinuity boundary are represented explicitly until a new pattern is detected.
-
Uniform durations (where every segment has the same duration) are not patternized because the standard
S@rrepeat count already provides optimal compression for that case.
Example Unpatterned audio timeline
In this example, the audio AdaptationSet uses an explicit
SegmentTimeline where every audio segment is listed individually. The
durations alternate between 288768 and 287232, and the manifest grows linearly with
the time-shift buffer:
<AdaptationSet id="1084563256" contentType="audio" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1" bitstreamSwitching="true" lang="spa">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Label>spa</Label>
<SegmentTemplate timescale="48000" media="segment_$RepresentationID$_$Number$.mp4" initialization="segment_$RepresentationID$_295846802_init.mp4" startNumber="295918052" presentationTimeOffset="85206900240000">
<SegmentTimeline>
<S t="85224398928384" d="288768"/>
<S t="85224399217152" d="287232"/>
<S t="85224399504384" d="288768"/>
<S t="85224399793152" d="287232"/>
<S t="85224400080384" d="288768"/>
<S t="85224400369152" d="287232"/>
<!-- ...additional alternating S elements for each segment in the buffer... -->
<S t="85224426577152" d="287232"/>
<S t="85224426864384" d="288768"/>
<S t="85224427153152" d="287232"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="audio-ac3-spa" bandwidth="128000" codecs="ac-3" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" value="A000"/>
</Representation>
</AdaptationSet>Example Patterned audio timeline
The following example shows the same audio adaptation set with the
PATTERNED setting enabled. The repeating duration cycle is defined once
in a Pattern element, and a single S entry with a repeat
count covers most of the timeline. A trailing S entry handles the final
segment that doesn't complete a full pattern cycle:
<AdaptationSet id="1084563256" contentType="audio" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1" bitstreamSwitching="true" lang="spa">
<EssentialProperty schemeIdUri="urn:mpeg:dash:pattern:2024"/>
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Label>spa</Label>
<SegmentTemplate timescale="48000" media="segment_$RepresentationID$_$Number$.mp4" initialization="segment_$RepresentationID$_295846802_init.mp4" startNumber="295918052" presentationTimeOffset="85206900240000">
<Pattern id="008c49c1">
<P d="287232"/>
<P d="288768"/>
</Pattern>
<SegmentTimeline>
<S t="85224398928384" r="49" p="008c49c1" pE="1"/>
<S t="85224427153152" d="287232"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="audio-ac3-spa" bandwidth="128000" codecs="ac-3" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" value="A000"/>
</Representation>
</AdaptationSet>When you enable the PATTERNED setting, MediaPackage adds the
EssentialProperty descriptor with
schemeIdUri="urn:mpeg:dash:pattern:2024" at the
AdaptationSet level. This descriptor signals to DASH players that the
adaptation set may contain Pattern elements. You will never encounter
pattern elements without this descriptor present, but the descriptor may be present
without any pattern elements if no repeating cycle has been detected. Players that don't
recognize this scheme are required by the DASH specification to ignore the adaptation
set, which prevents misinterpretation of any Pattern elements that may be
present. For this reason, only enable PATTERNED when your target players
support urn:mpeg:dash:pattern:2024.
To configure the audio timeline pattern for a DASH endpoint, set the
AudioTimelinePattern field in the manifest
configuration.