Monitoring manifest update time
AWS Elemental MediaPackage playback responses include the following custom headers that indicate when MediaPackage last modified the manifest in non-dynamic ad insertion workflows. These headers are helpful when troubleshooting issues related to stale manifests.
X-MediaPackage-Manifest-Last-Sequence
This is the highest segment sequence number in the manifest.
For DASH, this is the highest segment number in the lowest rendition of the manifest.
For HLS and CMAF, this is the highest segment number in the media playlist.
For MSS, this is the highest segment number in the manifest.
See the following section for manifest examples.
X-MediaPackage-Manifest-Last-Updated
The epoch timestamp in milliseconds when MediaPackage generates the segment referred to in X-MediaPackage-Manifest-Last-Sequence
.
Manifest examples
DASH manifest examples
For both compact and full DASH manifests, MediaPackage determines the
X-MediaPackage-Manifest-Last-Sequence
value from the highest segment number in the lowest rendition of the manifest. The service calculates the
X-MediaPackage-Manifest-Last-Updated
value based on when it generates the segment referred to in X-MediaPackage-Manifest-Last-Sequence
.
The following is an example of a compact DASH manifest that uses the number with
duration template. MediaPackage determines the
X-MediaPackage-Manifest-Last-Sequence
value from the highest segment
number in the lowest rendition in the manifest. For example, in the following manifest, the highest segment number is
index_video_5_0_175232.mp4
, so the value of
X-MediaPackage-Manifest-Last-Sequence
is 175232
. See duration Attribute in the
SegmentTemplate for information about how MediaPackage
calculates the sequence $Number$
value. The value of
X-MediaPackage-Manifest-Last-Updated
is the epoch timestamp in
milliseconds when MediaPackage generates the segment referred to in X-MediaPackage-Manifest-Last-Sequence
.
<?xml version="1.0" encoding="utf-8"?> <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="dynamic" publishTime="2021-09-08T21:01:38" minimumUpdatePeriod="PT0S" availabilityStartTime="2018-11-16T19:08:30Z+00:00" minBufferTime="PT0S" suggestedPresentationDelay="PT0.000S" timeShiftBufferDepth="PT116.533S" profiles="urn:mpeg:dash:profile:isoff-live:2011"> <Period start="PT0.000S" id="1"> <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="30000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1543947824" initialization="index_video_$RepresentationID$_0_init.mp4?m=1543947824" startNumber="175032" duration="90000"/> <Representation id="1" width="640" height="360" frameRate="30/1" bandwidth="749952" codecs="avc1.640029"/> <Representation id="2" width="854" height="480" frameRate="30/1" bandwidth="1000000" codecs="avc1.640029"/> <Representation id="3" width="1280" height="720" frameRate="30/1" bandwidth="2499968" codecs="avc1.640029"/> </AdaptationSet> </Period> </MPD>
The following is an example of a compact DASH manifest that uses the number with
timeline template. MediaPackage determines the
X-MediaPackage-Manifest-Last-Sequence
value from the highest segment
number in the lowest rendition in the manifest. For example, in the following manifest, the highest segment number is
index_video_1_0_7.mp4
, so the value of
X-MediaPackage-Manifest-Last-Sequence
is 7
. The value of
X-MediaPackage-Manifest-Last-Updated
is the is the epoch timestamp in
milliseconds when MediaPackage generates the segment referred to in X-MediaPackage-Manifest-Last-Sequence
.
<?xml version="1.0" encoding="utf-8"?> <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="static" mediaPresentationDuration="PT72.458S" minBufferTime="PT0S" profiles="urn:mpeg:dash:profile:isoff-main:2011"> <Period start="PT0.000S" id="1" duration="PT74.758S"> <AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="48000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1621616401" initialization="index_video_$RepresentationID$_0_init.mp4?m=1621616401" startNumber="1" presentationTimeOffset="108800"> <SegmentTimeline> <S t="110400" d="540000" r="5"/> <S t="3350400" d="238000"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" width="640" height="480" frameRate="24/1" bandwidth="5000000" codecs="avc1.4D401E"/> </AdaptationSet> <AdaptationSet mimeType="audio/mp4" segmentAlignment="0" lang="eng"> <Label>eng</Label> <SegmentTemplate timescale="48000" media="index_audio_$RepresentationID$_0_$Number$.mp4?m=1621616401" initialization="index_audio_$RepresentationID$_0_init.mp4?m=1621616401" startNumber="1" presentationTimeOffset="108800"> <SegmentTimeline> <S t="108800" d="541696"/> <S t="650496" d="540672"/> <S t="1191168" d="539648" r="1"/> <S t="2270464" d="540672"/> <S t="2811136" d="539648"/> <S t="3350784" d="236544"/> </SegmentTimeline> </SegmentTemplate> <Representation id="2" bandwidth="192000" audioSamplingRate="48000" codecs="mp4a.40.2"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration> </Representation> </AdaptationSet> <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2021-05-21T16:59:47.450Z"></SupplementalProperty> </Period> </MPD>
The following is an example of a compact DASH manifest that uses the number with
duration template. MediaPackage determines the
X-MediaPackage-Manifest-Last-Sequence
value from the highest segment
number in the lowest rendition in the manifest. For example, in the following manifest, the highest segment number is
index_video_1_0_1675200.mp4
, so the value of
X-MediaPackage-Manifest-Last-Sequence
is 1675200
. See media Attribute in
SegmentTemplate for information about how MediaPackage
calculates the sequence number. The value of
X-MediaPackage-Manifest-Last-Updated
is the is the epoch timestamp in
milliseconds when MediaPackage generates the segment referred to in X-MediaPackage-Manifest-Last-Sequence
.
<?xml version="1.0" encoding="utf-8"?> <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="static" mediaPresentationDuration="PT72.458S" minBufferTime="PT0S" profiles="urn:mpeg:dash:profile:isoff-main:2011"> <Period start="PT0.000S" id="1" duration="PT74.758S"> <AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="48000" media="index_video_$RepresentationID$_0_$Time$.mp4?m=1621616401" initialization="index_video_$RepresentationID$_0_init.mp4?m=1621616401" startNumber="1" presentationTimeOffset="108800"> <SegmentTimeline> <S t="55200" d="270000" r="5"/> <S t="1675200" d="119000"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" width="640" height="480" frameRate="24/1" bandwidth="5000000" codecs="avc1.4D401E"/> </AdaptationSet> <AdaptationSet mimeType="audio/mp4" segmentAlignment="0" lang="eng"> <Label>eng</Label> <SegmentTemplate timescale="48000" media="index_audio_$RepresentationID$_0_$Time$.mp4?m=1621616401" initialization="index_audio_$RepresentationID$_0_init.mp4?m=1621616401" startNumber="1" presentationTimeOffset="108800"> <SegmentTimeline> <S t="108800" d="541696"/> <S t="650496" d="540672"/> <S t="1191168" d="539648" r="1"/> <S t="2270464" d="540672"/> <S t="2811136" d="539648"/> <S t="3350784" d="236544"/> </SegmentTimeline> </SegmentTemplate> <Representation id="2" bandwidth="192000" audioSamplingRate="48000" codecs="mp4a.40.2"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration> </Representation> </AdaptationSet> <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2021-05-21T16:59:47.450Z"></SupplementalProperty> </Period> </MPD>
HLS manifest
MediaPackage determines the X-MediaPackage-Manifest-Last-Sequence
value
from the last segment in the manifest. For example, in the following manifest
index_1_3.ts
is the highest segment sequence number, so the value of
X-MediaPackage-Manifest-Last-Sequence
is 3
. The value of
X-MediaPackage-Manifest-Last-Updated
corresponds to the epoch timestamp in
milliseconds when MediaPackage generates the last segment in the manifest.
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:7.500, index_1_0.ts?m=1583172400 #EXTINF:7.500, index_1_1.ts?m=1583172400 #EXTINF:7.500, index_1_2.ts?m=1583172400 #EXTINF:7.500, index_1_3.ts?m=1583172400 #EXT-X-ENDLIST
CMAF manifest
Similar to HLS, MediaPackage determines the
X-MediaPackage-Manifest-Last-Sequence
value from the last segment in the
manifest. For example, in the following manifest
../cmafseg_video_1_10.mp4?m=1621616399
is the highest segment sequence
number, so the value of X-MediaPackage-Manifest-Last-Sequence
is
10
. The value of X-MediaPackage-Manifest-Last-Updated
corresponds to the epoch timestamp in milliseconds when MediaPackage generates the last
segment in the manifest.
#EXTM3U #EXT-X-VERSION:6 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-TARGETDURATION:12 #EXT-X-MEDIA-SEQUENCE:1 #EXT-X-MAP:URI="../cmafseg_video_1_track_1098178399_csid_aaa_2_init.mp4" #EXTINF:11.250, ../cmafseg_video_1_1.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_2.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_3.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_4.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_5.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_6.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_7.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_8.mp4?m=1621616399 #EXTINF:11.250, ../cmafseg_video_1_9.mp4?m=1621616399 #EXTINF:0.542, ../cmafseg_video_1_10.mp4?m=1621616399 #EXT-X-ENDLIST
MSS manifest
MediaPackage determines the X-MediaPackage-Manifest-Last-Sequence
value
from the highest segment in the manifest, as indicated by Fragments(a_2_0={start
time})
. For example, in the following manifest
Fragments(a_2_0=380533333)
is the highest sequence number, so the value of
X-MediaPackage-Manifest-Last-Sequence
is 380333333
. The value of
X-MediaPackage-Manifest-Last-Updated
corresponds to the epoch timestamp in
milliseconds when MediaPackage generates the last segment in the manifest.
<SmoothStreamingMedia MajorVersion="2" MinorVersion="2" TimeScale="10000000" CanSeek="TRUE" CanPause="TRUE" IsLive="TRUE" LookAheadFragmentCount="2" DVRWindowLength="3000000000" Duration="0"> <CustomAttributes> <Attribute Name="ProducerReferenceTime" Value="2017-06-14T22:07:01.967Z"/> </CustomAttributes> <StreamIndex Type="video" Name="video" Subtype="" Chunks="3" TimeScale="10000000" Url="Events(203_0)/QualityLevels({bitrate})/Fragments(v={start time})" QualityLevels="1"> <QualityLevel Index="0" Bitrate="4000000" CodecPrivateData="00000001274D401F924602802DD80880000003008000001E7220007A120000895477BDC07C22114E0000000128FEBC80" FourCC="H264" MaxWidth="1280" MaxHeight="720"/> <c d="120000000" t="20333333"/> <c d="120000000"/> <c d="120000000"/> </StreamIndex> <StreamIndex Type="audio" Name="fra_1" Language="fra" Subtype="" Chunks="3" TimeScale="10000000" Url="Events(203_0)/QualityLevels({bitrate})/Fragments(a_2_0={start time})"> <QualityLevel Index="0" Bitrate="128460" CodecPrivateData="1190" FourCC="AACL" AudioTag="255" Channels="2" SamplingRate="48000" BitsPerSample="16" PacketSize="4"/> <c d="120533333" t="20000000"/> <c d="119893333"/> <c d="120106667"/> </StreamIndex> </SmoothStreamingMedia>