To use image-based trickplay, in your upstream encoder you create an HLS image media playlist that contains JPEG image segments.
MediaPackage automatically passes through the image segments to the output. These segments are
the thumbnail images and image metadata that the video player uses for visual cues.
These segments must conform to the Image Media Playlist specification, version 0.4
For information about how to configure your upstream encoder to generate an image media playlist, see Configuring your upstream encoder to generate image media playlists.
Input source requirements
Your HLS source content must meet the following requirements:
-
The HLS parent playlist that references the image playlist must include the
EXT-X-IMAGE-STREAM-INF
tag. -
The image playlist must include An
EXT-X-IMAGES-ONLY
tag above the segment list.Note
We recommend that you use decimal durations in the
EXT-INF
andEXT-X-TILES
tags to help MediaPackage give players the most accurate image durations. -
You must use image segments that are valid JPEG image files less than 20 MB.
-
Each JPEG must contain only one image segment. The encoder must produce image segments and video segments at the same cadence.
You can use AWS Media Services to generate an HLS source in your upstream
encoder that complies with the Image Media Playlist specification, version 0.4
Limitations
Keep in mind the following limitations when using image-based trick-play for MediaPackage:
-
MediaPackage doesn't combine image segments for packaging configurations. For example, if the service ingests a live stream with an image asset with a 2 second segment duration, and you specify a segment output duration of 6 seconds, we combine the video and audio segments to be 6 seconds long, but image segments will remain 2 seconds.
-
Depending on your HLS player requirements, the use of
EXT-X-PROGRAM-DATE-TIME
tags might be necessary to display the trick-play image.
Configuring your upstream encoder to
generate image media playlists
Your HLS source must conform to the Image Media Playlist specification, version 0.4
-
Trick-play track via the Image Media Playlist specification in the Elemental Live User Guide.
-
Trick-play track via the Image Media Playlist specification in the AWS Elemental MediaLive User Guide.
To use an image media playlist to enable trick-play for HLS
-
MediaPackage supports live trick-play by creating an image media playlist from an existing live stream. Your source HLS content must conform to the Image Media Playlist specification, version 0.4
. If your source content includes one or more image media playlists, your HLS output will also include the same image media playlists, with the corresponding signaling in the parent playlist.
This example HLS parent playlist generated by MediaPackage uses a
EXT-X-IMAGE-STREAM-INF
tag for the image-based trickplay rendition and includes the"variant-hls_6.m3u8"
child playlist URI. child playlist URIs.#EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-MEDIA:LANGUAGE="und",AUTOSELECT=YES,CHANNELS="2",FORCED=NO,TYPE=AUDIO,URI="variant-hls_5.m3u8",GROUP-ID="audio_0",DEFAULT=YES,NAME="und" #EXT-X-STREAM-INF:CODECS="mp4a.40.2,avc1.4D4028",AVERAGE-BANDWIDTH=5500000,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=5931112,AUDIO="audio_0" variant-hls_1.m3u8 #EXT-X-STREAM-INF:CODECS="mp4a.40.2,avc1.4D401F",AVERAGE-BANDWIDTH=3300000,RESOLUTION=1280x720,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=3643112,AUDIO="audio_0" variant-hls_2.m3u8 #EXT-X-STREAM-INF:CODECS="mp4a.40.2,avc1.4D401F",AVERAGE-BANDWIDTH=1650000,RESOLUTION=960x540,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=1927083,AUDIO="audio_0" variant-hls_3.m3u8 #EXT-X-STREAM-INF:CODECS="mp4a.40.2,avc1.4D401E",AVERAGE-BANDWIDTH=825000,RESOLUTION=640x360,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=1069069,AUDIO="audio_0" variant-hls_4.m3u8 #EXT-X-IMAGE-STREAM-INF:CODECS="jpeg",RESOLUTION=312x176,BANDWIDTH=131436,URI="variant-hls_6.m3u8"
MediaPackage also inserts
EXT-X-IMAGES-ONLY
tags in the child playlist, and then generates and includes an image media playlist in the stream. This playlist enables player functionality like fast forward and rewind.This example HLS child playlist generated by MediaPackage uses the
EXT-X-IMAGES-ONLY
tag and includes thesegment_6_4595218.jpg
segment URI.#EXTM3U #EXT-X-VERSION:3 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:4595218 #EXT-X-DISCONTINUITY-SEQUENCE:22 #EXT-X-IMAGES-ONLY #EXT-X-PROGRAM-DATE-TIME:2024-04-18T19:16:56.833Z #EXTINF:6.0, segment_6_4595218.jpg #EXT-X-PROGRAM-DATE-TIME:2024-04-18T19:17:02.833Z #EXTINF:6.0, segment_6_4595219.jpg #EXT-X-PROGRAM-DATE-TIME:2024-04-18T19:17:08.833Z #EXTINF:6.0, segment_6_4595220.jpg #EXT-X-PROGRAM-DATE-TIME:2024-04-18T19:17:14.833Z #EXTINF:6.0, segment_6_4595221.jpg #EXT-X-PROGRAM-DATE-TIME:2024-04-18T19:17:20.833Z
To use an image media playlist to enable trick-play for DASH
-
MediaPackage supports live trick-play by creating an image media playlist from an existing live stream. Your source HLS content must conform to the Image Media Playlist specification, version 0.4
. If your source content includes one or more image media playlists, your DASH output will also include an image-based AdaptationSet and the corresponding image Representations. When MediaPackage outputs content from a DASH packaging configuration or endpoint, the service outputs thumbnails based on the DASH-IF Interoperability Points specification, v4.3, section 6.2.6
. This example DASH manifest generated by MediaPackage uses a specific AdaptationSet in which the representation includes a
<EssentialProperty schemeIdUri="http://dashif.org/guidelines/thumbnail_tile" value="1x1"/>
element indicating that each image represents a discrete image, and not a tiled thumbnails image that includes multiple thumbnails.<MPD id="0" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" minimumUpdatePeriod="PT2S" minBufferTime="PT5S" timeShiftBufferDepth="PT1M4.079S" suggestedPresentationDelay="PT10S" availabilityStartTime="2024-01-01T00:00:00.000000+00:00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:mspr="urn:microsoft:playready" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" publishTime="2024-04-02T16:57:17.000063+00:00"> <Period id="1712019690992" start="PT2209H1M30S"> <AdaptationSet id="2137622408" contentType="video" mimeType="video/mp4" segmentAlignment="true"> <SegmentTemplate timescale="48000" media="cmaf-segment_$RepresentationID$_$Number$.mp4" initialization="cmaf-segment_$RepresentationID$_21187_init.mp4" startNumber="36447" presentationTimeOffset="831120"> <SegmentTimeline> <S t="6566786514" d="180179"/> <S t="6566966694" d="180179"/> <S t="6567146874" d="180179"/> <S t="6567327054" d="180179"/> <S t="6567507234" d="180179"/> <S t="6567687414" d="180179"/> <S t="6567867594" d="180179"/> <S t="6568047774" d="180179"/> <S t="6568227954" d="180179"/> <S t="6568408134" d="180179"/> <S t="6568588314" d="180179"/> <S t="6568768494" d="180179"/> <S t="6568948674" d="180179"/> <S t="6569128854" d="180179"/> <S t="6569309034" d="180179"/> <S t="6569489214" d="180179"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" bandwidth="2000000" frameRate="24000/1001" codecs="avc1.4D401F" width="1280" height="720"/> </AdaptationSet> <AdaptationSet id="515700000" contentType="image" mimeType="image/jpeg" segmentAlignment="true"> <SegmentTemplate timescale="60000" media="cmaf-segment_$RepresentationID$_$Number$.jpg" initialization="cmaf-segment_$RepresentationID$_21187_init.jpg" startNumber="36447" presentationTimeOffset="1038900"> <SegmentTimeline> <S t="8208483142" d="225224"/> <S t="8208708367" d="225224"/> <S t="8208933592" d="225224"/> <S t="8209158817" d="225224"/> <S t="8209384042" d="225224"/> <S t="8209609267" d="225224"/> <S t="8209834492" d="225224"/> <S t="8210059717" d="225224"/> <S t="8210284942" d="225224"/> <S t="8210510167" d="225224"/> <S t="8210735392" d="225224"/> <S t="8210960617" d="225224"/> <S t="8211185842" d="225224"/> <S t="8211411067" d="225224"/> <S t="8211636292" d="225224"/> <S t="8211861517" d="225224"/> </SegmentTimeline> </SegmentTemplate> <Representation id="3" bandwidth="28608" codecs="jpeg" width="320" height="174"> <EssentialProperty schemeIdUri="http://dashif.org/guidelines/thumbnail_tile" value="1x1"/> </Representation> </AdaptationSet> <AdaptationSet id="972192134" contentType="audio" mimeType="audio/mp4" segmentAlignment="true" lang="und"> <Label>und</Label> <SegmentTemplate timescale="48000" media="cmaf-segment_$RepresentationID$_$Number$.mp4" initialization="cmaf-segment_$RepresentationID$_21187_init.mp4" startNumber="36447" presentationTimeOffset="831120"> <SegmentTimeline> <S t="6566792949" d="180224" r="1"/> <S t="6567153398" d="180224" r="3"/> <S t="6567874295" d="180224" r="1"/> <S t="6568234744" d="180224" r="3"/> <S t="6568955641" d="180224" r="2"/> <S t="6569496313" d="179200"/> </SegmentTimeline> </SegmentTemplate> <Representation id="6" bandwidth="191522" codecs="mp4a.40.2" audioSamplingRate="48000"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/> </Representation> </AdaptationSet> <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2024-04-02T16:56:13.200Z"/> </Period> </MPD>