Using I-frame playlists to enable in AWS Elemental MediaPackage
trick-play
MediaPackage supports live trick-play by creating an I-frame playlist from an existing live
stream. The I-frame playlist contains the I-frame only video segments that your player
uses for the image thumbnails. For information about I-frame playlists, see the HTTP Live Streaming 2nd Edition specification
To use an I-frame playlist to enable trick-play for HLS
-
In the MediaPackage console, choose Include Iframe-only stream in the Segment settings when creating or editing an endpoint. MediaPackage generates I-frame only streams for each rendition in the parent playlist.
This example HLS parent playlist generated by MediaPackage uses
EXT-X-I-FRAME-STREAM-INF
tags for each rendition and includes the"index_1_iframe.m3u8"
and"index_2_iframe.m3u8"
child playlist URIs.#EXTM3U #EXT-X-VERSION:4 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:CODECS="avc1.42001f,mp4a.40.2",AVERAGE-BANDWIDTH=1000,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=2000,CLOSED-CAPTIONS="CC" index_1.m3u8 #EXT-X-STREAM-INF:CODECS="avc1.42001f,mp4a.40.2",AVERAGE-BANDWIDTH=2000,RESOLUTION=1920x1080,VIDEO-RANGE=SDR,FRAME-RATE=30.0,BANDWIDTH=3000,CLOSED-CAPTIONS="CC" index_2.m3u8 #EXT-X-STREAM-INF:CODECS="mp4a.40.2",AVERAGE-BANDWIDTH=1000,BANDWIDTH=2000 index_3.m3u8 #EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.42001f,mp4a.40.2",RESOLUTION=1920x1080,VIDEO-RANGE=SDR,BANDWIDTH=1000,URI="index_1_iframe.m3u8" #EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.42001f,mp4a.40.2",RESOLUTION=1920x1080,VIDEO-RANGE=SDR,BANDWIDTH=1000,URI="index_2_iframe.m3u8"
MediaPackage also inserts
EXT-I-FRAMES-ONLY
tags in the child playlist, and then generates and includes an I-frame only 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-I-FRAMES-ONLY
tag and includes theindex_1_iframe_0.ts
segment URI.#EXTM3U #EXT-X-VERSION:4 #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-DISCONTINUITY-SEQUENCE:0 #EXT-X-I-FRAMES-ONLY #EXT-X-PROGRAM-DATE-TIME:2021-12-07T10:00:00Z #EXTINF:6.0, index_1_iframe_0.ts
To use an I-frame playlist to enable trick-play for DASH
-
MediaPackage supports live trick-play by creating an I-frame representation from an existing live stream. The I-frame representation contains the I-frame only video segments that your player uses for the image thumbnails.
For information about I-frame playlists with DASH, see the DASH-IF Interoperability Points specification, v4.3, section 3.2.9
. In the MediaPackage console, choose Include Iframe-only stream in the Segment settings, when creating or editing an endpoint. MediaPackage generates I-frame only streams for each rendition in the DASH manifest.
This example DASH manifest generated by MediaPackage uses a specific AdaptationSet that includes a
<EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode" />
element and Representation elements including both a frameRate and a maxPlayoutRate attributes, which values are representative of trickplay track properties.<MPD id="0" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" minimumUpdatePeriod="PT2S" minBufferTime="PT5S" timeShiftBufferDepth="PT1M4.559S" 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-02T17:05:14.000894+00:00"> <Period id="1712019690992" start="PT2209H1M30S"> <AdaptationSet id="1170682507" contentType="video" mimeType="video/mp4" segmentAlignment="true" codingDependency="false"> <EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode" value="2137622408"/> <SegmentTemplate timescale="48000" media="cmaf-segment_$RepresentationID$_$Number$.mp4" initialization="cmaf-segment_$RepresentationID$_8005_init.mp4" startNumber="23393" presentationTimeOffset="831120"> <SegmentTimeline> <S t="6589849554" d="180179"/> <S t="6590029734" d="180179"/> <S t="6590209914" d="180179"/> <S t="6590390094" d="180179"/> <S t="6590570274" d="180179"/> <S t="6590750454" d="180179"/> <S t="6590930634" d="180179"/> <S t="6591110814" d="180179"/> <S t="6591290994" d="180179"/> <S t="6591471174" d="180179"/> <S t="6591651354" d="180179"/> <S t="6591831534" d="180179"/> <S t="6592011714" d="180179"/> <S t="6592191894" d="180179"/> <S t="6592372074" d="180179"/> <S t="6592552254" d="180179"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1_iframe" bandwidth="1048" frameRate="24000/90090" codecs="avc1.4D401F" width="1280" height="720" maxPlayoutRate="90"/> <Representation id="2_iframe" bandwidth="1572" frameRate="24000/90090" codecs="avc1.4D401F" width="1920" height="1080" maxPlayoutRate="90"/> </AdaptationSet> <AdaptationSet id="2137622408" contentType="video" mimeType="video/mp4" segmentAlignment="true"> <SegmentTemplate timescale="48000" media="cmaf-segment_$RepresentationID$_$Number$.mp4" initialization="cmaf-segment_$RepresentationID$_8005_init.mp4" startNumber="23393" presentationTimeOffset="831120"> <SegmentTimeline> <S t="6589849554" d="180179"/> <S t="6590029734" d="180179"/> <S t="6590209914" d="180179"/> <S t="6590390094" d="180179"/> <S t="6590570274" d="180179"/> <S t="6590750454" d="180179"/> <S t="6590930634" d="180179"/> <S t="6591110814" d="180179"/> <S t="6591290994" d="180179"/> <S t="6591471174" d="180179"/> <S t="6591651354" d="180179"/> <S t="6591831534" d="180179"/> <S t="6592011714" d="180179"/> <S t="6592191894" d="180179"/> <S t="6592372074" d="180179"/> <S t="6592552254" d="180179"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" bandwidth="2000000" frameRate="24000/1001" codecs="avc1.4D401F" width="1280" height="720"/> <Representation id="1" bandwidth="5000000" frameRate="24000/1001" codecs="avc1.4D401F" width="1920" height="1080"/> </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$_8005_init.mp4" startNumber="23393" presentationTimeOffset="831120"> <SegmentTimeline> <S t="6589853020" d="180224" r="1"/> <S t="6590213469" d="180224" r="1"/> <S t="6590573917" d="179200"/> <S t="6590753117" d="180224"/> <S t="6590933342" d="180224" r="3"/> <S t="6591654239" d="180224" r="1"/> <S t="6592014688" d="180224" r="3"/> </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-02T17:04:13.680Z"/> </Period> </MPD>