ライブ ストリーム用のマニフェスト マニピュレータ

Pod Serving API を使用すると、エンコードおよび条件付けされた広告セグメントにアクセスできます。 ユーザー向け HLS に直接組み込めるように MPEG-DASH メディア再生リストですMPEG-DASH の場合、Pod Serving API は 広告に関する追加情報とコンテキストを提供するマニフェスト テンプレート 分割します

このガイドでは、基本的な Pod Serving マニフェスト操作の実装に焦点を当てています。 いくつか見てみましょう

前提条件: Google アド マネージャーでライブ ストリーム イベントを設定する

連続配信広告 API からリクエストを行う前に、広告を作成する必要があります。 処理する各ストリームのライブ配信イベントを管理する。新しい イベントのライブ ストリーム イベントを LiveStreamEventService API または Google アド マネージャーの管理画面

ライブ配信イベントを連続配信広告 API で使用するには、以下を行う必要があります。 イベントの属性を入力します。

  • customAssetKey - このイベントに使用されるカスタム識別子。必要があります。 ネットワークの全イベントで一意です。
  • adTags - アド マネージャーの入稿によって生成されたメインの広告タグ URL 説明します。
  • dynamicAdInsertionType - POD_SERVING_REDIRECT に設定する必要があります。
  • streamingFormat - 必要に応じて、HLS または DASH に設定します。
  • segmentUrlAuthenticationKeyIds - 1 つ以上 HMAC キー 使用されます
  • daiEncodingProfileIds - 使用可能な DAIEncodingProfile このイベントで有効になっている ID。
  • startDateTime - イベントの開始日時
  • endDateTime - このイベントの終了予定日。この属性 unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` - ブール値。上述の説明をご参照ください。

ストリーム マニフェスト リクエストを受信する

マニフェスト マニピュレータには、マニフェストをリッスンする API エンドポイントを指定する必要があります クライアント アプリからのリクエスト。少なくとも、このエンドポイントは クライアント プレーヤー アプリからストリーム ID を収集し、 使用します。ストリーム ID は、広告に対するストリーミング セッションを識別するために使用されます。 。

また、組織にとって適切なポリシーを特定するために、 (Content ID など)などです。

マニフェスト リクエストのエンドポイントの例

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
パスパラメータ
asset_key システムでリクエストされたライブ配信に対応する仮の ID。
format ストリーム形式に対応する架空のパラメータ。次のいずれか:
mpd MPEG-DASH ストリームの場合
m3u8 HLS ストリームの場合
クエリ パラメータ
stream_id クライアントの動画プレーヤー アプリのアド マネージャー ストリーム ID。

コンテンツ ストリームを取得する

マニフェスト リクエストから収集されたコンテンツ ID を使用してコンテンツを選択します 広告と統合します

広告セグメントをコンテンツ ストリームに組み込む

広告セグメントの URL の合成は、ストリームの形式によって異なります。

HLS ストリーム

HLS ストリームは通常、マルチバリアント マニフェストとして提供されます。 バリアント マニフェストへのリンクのセット。これは、各エンコード 定義できます。

注: わかりやすくするため、このガイドでは HLS メディアが これは、音声と動画を同じセグメント ファイルに多重化するものです。

プロキシ マルチバリエーション再生リスト

元のマルチバリエーションの再生リストの URL は各バリエーションに置き換える必要があります。 マニピュレータに対する別のエンドポイント呼び出しで、プレーヤーの バリアント マニフェストを選択します。

HLS を合成する残りの手順では、単一のバリアント マニフェストが 処理中です

バリアント リクエストのエンドポイントの例
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
パスパラメータ
asset_key システムでリクエストされたライブ配信に対応する仮の ID。
variant 特定のパターンの識別子を含む仮定のパラメータ あります。
クエリ パラメータ
stream_id クライアントの動画プレーヤー アプリのアド マネージャー ストリーム ID。目的とする マニフェスト マニピュレータでユーザー セッションを識別します。
未処理のマルチバリアント マニフェストの例
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
プロキシされたマルチバリアント マニフェストの例
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS

ミッドロール挿入点セグメントを特定して中断を挿入します

バリアント マニフェストを処理する際に、開始時刻、継続時間、 動的マニフェストが処理されるまでの次の広告ブレークのインデックス 広告コンテンツで置き換えられるセグメントが含まれています。

ミッドロール挿入点とコンテンツ セグメントの間の区切りは、 設定します。ミッドロール挿入点を区切る一般的な方法の 1 つは、広告の前に挿入すること #EXT-X-CUE-OUT タグを付けて、その後ろに #EXT-X-CUE-IN タグを付けます。

Google がホストするミッドロール挿入点とコンテンツ セグメントを区別するには、 各ミッドロール挿入点の開始時と終了時に #EXT-X-DISCONTINUITY タグを配置します。これらの Discontinuity タグが最終的なマニフェストに含まれていない場合、再生は失敗します。

挿入された広告セグメントの URI が暗号化されていません。コンテンツが暗号化されていても #EXT-X-KEY:METHOD=NONE を指定して暗号化を解除する必要もあります。 各広告ブレークの最初の広告セグメントの前に追加し、 挿入できます。

サンプル マニフェスト(オリジナル)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
不連続性を挿入したマニフェスト
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

連続配信広告のセグメントを処理する

連続配信広告内のセグメントごとに、次のいくつかの追加値をトラッキングする必要があります。

  • segment_number: 連続配信広告内のセグメント インデックス(ゼロから始まります)。または「init」mp4 初期化セグメント用に用意しています。
  • segment_duration: 現在のセグメントの長さ(ミリ秒単位)。この 連続配信広告内の最後のセグメントを除くすべてのセグメントで同じ値を指定する必要があります。
  • segment_offset: 前の値を加算して計算されたセグメント オフセット セグメントの長さ(ミリ秒単位)
  • last: 連続配信広告の最後のセグメントを識別するブール値。デフォルト false に設定します。

広告セグメントの URL を作成する

ミッドロール挿入点内の各セグメントを次の形式の URL に置き換えます。

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
パスパラメータ
network_code このネットワークのアド マネージャー 360 ネットワーク コード。
custom_asset_key LiveStreamEventService で指定されたカスタム ライブ配信アセットキー アド マネージャー 360 管理画面のライブ ストリーム ページで使用することもできます。
pod_id ミッドロール挿入点の識別子。で始まる整数を指定してください 1 で、ミッドロール挿入点ごとに 1 ずつ増加します。

<ph type="x-smartling-placeholder"></ph> この値は、同じ時間枠内で同じ広告ブレークを表示するすべてのユーザー間で同じである必要があります 現在のイベントが表示されます。

profile_name リクエスト対象のプロファイルの識別子
segment_number 現在の連続配信広告内のこのセグメントのインデックス(ゼロから始まります)。
MP4 コンテナを使用している場合は、segment_number を「init」に設定して初期化セグメントをリクエストできます。
クエリ パラメータ
stream_id 必須 ストリームの作成から返されたユーザーの stream_id パラメータ リクエストできます。
sd 必須 segment_duration
so 省略可 segment_offset

so が欠落している場合、前のセグメントはすべて 長さは同一で、セグメント オフセットは segment_numbersd

pd 必須(再生時間のないミッドロール挿入点が有効になっているイベントを除く) ミッドロール挿入点の長さ(ミリ秒単位)。別名 ad_pod_duration
auth-token 必須 URL エンコードされた署名付き HMAC トークン 設定します
last 省略可 ミッドロール挿入点の最後のセグメントを示すブール値。デフォルトは false です。

クエリ パラメータ値は、URL セーフになるように適切にエンコードする必要があります。これは、 auth-token フィールドには / が含まれることがあるため、特に重要です。 += 文字。

サンプル マニフェスト(セグメントの置き換え後)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

これで、現在、 DAI Pod Serving API。

DASH ストリーム

DASH ストリームは MPD ファイルとして提供されます。このファイルには、 1 つのファイル。コンテンツは一連のピリオドで表現されます。

リクエスト期間のテンプレート

Google アド マネージャーに期間テンプレートをリクエストします。このテンプレートは 広告ブレーク期間に割り当てられます。

このテンプレートは、配信セッションごとに 1 回だけリクエストし、 再利用できます。

期間テンプレート リクエスト endpointhjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
パスパラメータ
network_code パブリッシャーのアド マネージャー 360 ネットワーク コード。
custom_asset Google アド マネージャーのライブ ストリーム イベントのカスタム アセットキー。
クエリ パラメータ
stream_id クライアントの動画プレーヤーからのアド マネージャー ストリーム ID。
レスポンス JSON
dash_period_template 期間テンプレートの XML 文字列。
segment_duration_ms ダッシュボード期間テンプレートの各広告メディア セグメントの再生時間( ミリ秒単位です。
リクエストの例(cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
レスポンスの例
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
 <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
  <SegmentTimeline>
    <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
  </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>

    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>",
"segment_duration_ms":5000}

生理期間テンプレートにデータを入力する

期間テンプレートには、広告ごとに置き換える必要があるマクロがいくつか含まれています。 休憩。すべてのマクロを置き換える必要があります。未使用のマクロは、 空の文字列("")

マクロ 説明
$$pod-id$$ この期間が表す連続配信広告のインデックス。この値は、 すべての視聴者セッションで同じ連続配信広告が作成される場合があります。 1
$$period-start$$ 現在の MPD における期間の開始時間。省略可能な属性 start="###" に置き換える必要があります。 ### は、ミッドロール挿入点が始まる表示時間です。条件 期間の開始時間を指定しない場合は、このマクロを 空の文字列を返します。 start="PT2H33M30S"
$$period-duration$$ 広告の全期間の長さ。この属性に含める必要があるオプションの属性 duration="###" に置き換えられます。ここで、### は 広告期間の再生時間(標準の DASH 期間形式)。もし 期間を指定しない場合、このマクロは 空の文字列を返します。 duration="PT15S"
$$pod-duration$$ この連続配信広告で決定される広告の予想再生時間( ミリ秒単位です。 15000
$$number-of-repeated-segments$$ この値は、広告の期間( (ミリ秒)で、Segment_duration_ms の値で 最も近い整数になります。 3
$$cust_params$$ このマクロの代わりに、固有のカスタム ターゲティング パラメータを使用する 現在のミッドロール挿入点が表示されます表示されます。値は こちらのアドマネージャーで ヘルプセンターの記事をご覧ください。 カスタム パラメータが必要ない場合は、このマクロを空の文字列に置き換えます。 使用します。 &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ このマクロは、そのミッドロール挿入点に固有の scte35 値に置き換える必要があります。 指定する必要がありますscte35 情報が必要ない場合、このマクロは 空の文字列に置き換えられます。 /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ URL エンコードされた署名付き HMAC トークン。 このトークンは必須です。 custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
マクロを含む未加工期間テンプレート
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
  </BaseURL>
  <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">  
    <SegmentTimeline>
      <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>
データが入力された広告期間
<Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>

入力した生理期間を DASH マニフェストに挿入

最後に、未加工のマニフェストの適切なピリオドを、 広告期間を入力し、最後に合成されたマニフェストを 使用します。

未加工コンテンツのマニフェストの例
<?xml version="1.0"?>
  <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" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    <Period start="PT0S">
      <AdaptationSet bitstreamSwitching="true">

        <Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
          <SegmentBase>
            <Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
            <SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
            <SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
          <SegmentBase>
            <Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
            <SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
            <SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
          <SegmentBase>
            <Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
            <SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
            <SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
            ...
          </SegmentList>
        </Representation>
        ...
      </AdaptationSet>
    </Period end>
  </MPD>
合成されたマニフェストの例
<?xml version="1.0"?>
  <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" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    
    <Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>
    
</MPD>

これで、現在、提供された広告セグメントを使用して DASH ライブストリームが配信されています DAI Pod Serving API が使用します

参考情報