SegmentTemplate でのduration 属性 - AWS Elemental MediaPackage

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SegmentTemplate でのduration 属性

デフォルトの DASH マニフェストでは、SegmentTemplateSegmentTimeline を保持します。タイムラインは、その有効期間とその開始時刻を含め、Representation 内のすべてのセグメントについて説明しています。AWS Elemental MediaPackage では、ライブイベントにより、エンコーダーから受信すると、セグメントをタイムラインに追加します。新しく利用可能なセグメントを認識するために、再生デバイスは、更新されたマニフェストを定期的に MediaPackage に対しリクエストする必要があります。

ある表現内のすべてのセグメントの再生時間が同じである場合、MediaPackage を有効にして SegmentTimeline オブジェクトを削除することで、レイテンシーを軽減し、マニフェストを短縮できます。その代わりに、MediaPackage により SegmentTemplate プロパティに duration 属性が追加されます。再生デバイスは、 durationstartNumber を使用して、セグメントがいつ利用できるかを計算します。再生デバイスは、セグメントについて知るために更新されたマニフェストに依存する必要がないため、再生を維持するために常に更新をリクエストする必要がありません。duration 属性の動作方法については、以下のセクションを参照してください。

duration 属性の動作について

DASH エンドポイントの作成」で説明されているように、DASH エンドポイントでの [セグメントテンプレートフォーマット] 設定により $duration$ 属性を有効にします。マニフェストでは次のような処理が実行されます。

  1. AWS Elemental MediaPackage が DASH マニフェストを生成するとき、次の例に示すように、duration 属性が SegmentTemplate オブジェクトに追加されます。

    <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1535562908" initialization="index_video_1_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/>

    セグメントタイムラインと個々のセグメントの説明は、セグメントテンプレートに含まれません。

    重要

    最終セグメントを除き、セグメントの所要時間の値からの逸脱は 50% 以下にする必要があります。期間が 90000 の場合、セグメントは 45000~135000 (30000 のタイムスケールにおいて 1.5~4.5 秒) の間である必要があります。

    次に、セグメントテンプレートで duration を使用する適応セットの例を示します。

    <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <Representation id="1" width="852" height="480" frameRate="30/1" bandwidth="1200000" codecs="avc1.4D401F"> <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1535562908" initialization="index_video_1_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> <Representation id="2" width="640" height="360" frameRate="30/1" bandwidth="800000" codecs="avc1.4D401E"> <SegmentTemplate timescale="30000" media="index_video_3_0_$Number$.mp4?m=1535562908" initialization="index_video_3_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> <Representation id="3" width="320" height="240" frameRate="30/1" bandwidth="499968" codecs="avc1.4D400D"> <SegmentTemplate timescale="30000" media="index_video_5_0_$Number$.mp4?m=1535562908" initialization="index_video_5_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> </AdaptationSet>
  2. 再生デバイスは、media 属性で定義されている URL を使用してセグメントをリクエストします。URL では、最初のセグメントの SegmentTemplate にある startNumber の値から始めて、$Number$ 変数をセグメントの数に置き換えます。

  3. 再生デバイスが最新のセグメントを決定する必要がある場合は、次の式を使用します。

    ((ウォールクロック時刻 - availabilityStartTime) / (duration / timescale)) + startNumber

    再生デバイスは、以下の値で最新のセグメントを計算します。

    • 再生デバイスのウォールクロック時間: 2018-11-16T19:18:30Z

    • availabilityStartTime - マニフェストの MPD オブジェクトからの属性: 2018-11-16T19:08:30Z

    • duration - マニフェストの SegmentTemplate オブジェクトからの属性: 90000

    • timescale - SegmentTemplate からの属性: 30000

    • startNumber - SegmentTemplate からの属性: 175032

    使用する計算は ((2018-11-16T19:18:30Z - 2018-11-16T19:08:30Z) / (90000/30000)) + 175032

    この計算が、(経過時間 600 秒) / (セグメント再生時間 3 秒) = 200 経過セグメント、になります。これらのセグメントを 175232 開始セグメントに追加すると、最新セグメントが 175032 になります。

duration 属性の制約事項

適切に再生し、競合する属性のセグメント再生時間の問題を回避するために、AWS Elemental MediaPackage では、duration 属性に以下の制限が適用されます。

  • この機能は、エンドポイントを作成する場合のみ有効にすることができます。

    DASH マニフェストに後で duration 属性を追加するためにエンドポイントを変更することはできません。これには、あるセグメントテンプレート形式から duration を使用する別の形式に変更することが関係しています。たとえば、SegmentTimeline$Time$ 変数を使用し、次に duration$Number$ 変数を編集するエンドポイントを作成することはできません。

  • エンドポイントの作成時に設定した [セグメントの再生時間] 値を保持する必要があります。

    セグメントの再生時間を変更するためにエンドポイントを編集することはできません。

  • duration を使用するエンドポイントから単一期間の DASH マニフェストを生成する必要があります。

    duration 属性で複数期間の DASH を使用することはできません。

  • 取り込まれるストリームでは、標準のセグメンテーションケイデンスを使用する必要があります。

  • 取り込まれるストリームで可変セグメント長を使用することはできません。SCTE-35 関連のセグメンテーションの場合がその例です。

duration 属性と圧縮された DASH マニフェスト

圧縮されたマニフェストを duration 属性と組み合わせると、マニフェストのサイズをさらに減少できますが、大幅な減少ではありません。圧縮されたマニフェストには、適応セットごとに 1 つの SegmentTimelineSegmentTemplate があります。duration 属性を使用する場合、AWS Elemental MediaPackage はセグメントタイムラインを削除します。両方の処理により、マニフェストには、適応セットごとに 1 つの SegmentTemplate があり、SegmentTimeline はありません。次の 例を参照してください。

圧縮されたマニフェストの詳細については、「圧縮された DASH マニフェスト」を参照してください。

重要

表現内のセグメントに意図的にサイズが異なるセグメントがある場合、duration 属性を使用しないでください。この処理は、セグメントが一貫したサイズである場合のみ有効です。

圧縮されたマニフェストの例を次に示します。
<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="1"> <SegmentTimeline> <S t="62000" d="60000" r="9"/> </SegmentTimeline> </SegmentTemplate> <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>
duration の属性を含む圧縮されたマニフェストの例を次に示します。
<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="1" duration="60000"/> <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>