MPEG-DASH trick mode适配集示例及maxPlayoutRate多层级配置问询
Great question! Let's break this down clearly based on DASH-IF's guidelines.
To support trick modes (like fast forward, rewind, or slow motion), you'll need dedicated Representations—these can live in a separate AdaptationSet (marked with contentType="trick" for clarity) or alongside your main playback streams. Here's a complete MPD snippet showing how to structure this:
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" type="static" mediaPresentationDuration="PT1H0M0S" minBufferTime="PT10S"> <!-- Main video for normal playback --> <AdaptationSet mimeType="video/mp4" codecs="avc1.4D401E"> <Representation id="1" bandwidth="500000" width="640" height="360" maxPlayoutRate="1.0"> <BaseURL>video_360p.mp4</BaseURL> </Representation> <Representation id="2" bandwidth="1000000" width="1280" height="720" maxPlayoutRate="1.0"> <BaseURL>video_720p.mp4</BaseURL> </Representation> </AdaptationSet> <!-- Trick mode video streams (fast forward/rewind) --> <AdaptationSet mimeType="video/mp4" codecs="avc1.4D401E" contentType="trick"> <!-- 2x fast forward --> <Representation id="trick_2x" bandwidth="250000" width="640" height="360" maxPlayoutRate="2.0"> <BaseURL>video_360p_2x.mp4</BaseURL> </Representation> <!-- 4x fast forward --> <Representation id="trick_4x" bandwidth="125000" width="640" height="360" maxPlayoutRate="4.0"> <BaseURL>video_360p_4x.mp4</BaseURL> </Representation> <!-- 2x rewind --> <Representation id="trick_-2x" bandwidth="250000" width="640" height="360" maxPlayoutRate="-2.0"> <BaseURL>video_360p_-2x.mp4</BaseURL> </Representation> </AdaptationSet> <!-- Audio: main + trick mode optimized --> <AdaptationSet mimeType="audio/mp4" codecs="mp4a.40.2"> <Representation id="audio_main" bandwidth="128000" maxPlayoutRate="1.0"> <BaseURL>audio_main.mp4</BaseURL> </Representation> <Representation id="audio_trick" bandwidth="64000" maxPlayoutRate="4.0"> <BaseURL>audio_trick.mp4</BaseURL> </Representation> </AdaptationSet> </MPD>
Key notes here:
- The dedicated trick mode
AdaptationSetusescontentType="trick"to signal its purpose to players. - Each trick
RepresentationsetsmaxPlayoutRateto match its supported speed (positive for fast forward, negative for rewind). - Audio can also have trick mode-specific streams (e.g., lower bandwidth for faster playback).
maxPlayoutRate Values? Absolutely! DASH-IF explicitly allows setting unique maxPlayoutRate values per Representation, which is super useful if higher-resolution streams have lower supported playback speeds (due to codec profile/level limits) or if you want to optimize trick mode performance across quality levels.
To implement this, simply add the maxPlayoutRate attribute directly to each individual <Representation> element. Here's an example where different video resolutions have different speed limits:
<AdaptationSet mimeType="video/mp4" codecs="avc1.4D401E"> <!-- 360p stream supports up to 4x playback --> <Representation id="360p" bandwidth="500000" width="640" height="360" maxPlayoutRate="4.0"> <BaseURL>video_360p.mp4</BaseURL> </Representation> <!-- 720p stream supports up to 2x playback --> <Representation id="720p" bandwidth="1000000" width="1280" height="720" maxPlayoutRate="2.0"> <BaseURL>video_720p.mp4</BaseURL> </Representation> <!-- 1080p stream only supports normal playback --> <Representation id="1080p" bandwidth="2000000" width="1920" height="1080" maxPlayoutRate="1.0"> <BaseURL>video_1080p.mp4</BaseURL> </Representation> </AdaptationSet>
Players will read these values to know which streams are compatible when the user adjusts playback speed—for example, if the user selects 4x speed, the player will switch to the 360p stream since it's the only one that supports that rate.
内容的提问来源于stack exchange,提问作者John Smith

