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

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

このガイドでは、ライブ配信用の基本的な連続広告配信マニフェスト操作サーバーを構築する方法について説明します。

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

Pod Serving 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 は、広告に対するストリーミング セッションを識別するために使用されます。 。

また、適切なコンテンツ ストリームを特定するために、コンテンツ 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: 現在のセグメントの長さ(ミリ秒)。この値は、Pod の最後のセグメントを除くすべてのセグメントで同じである必要があります。
  • segment_offset: 前のセグメントの長さをセグメント オフセットにミリ秒単位で加算して計算されたセグメント オフセット
  • last: 連続配信広告の最後のセグメントを識別するブール値。デフォルトは false です。

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

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

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/{pod_identifier}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
パスパラメータ
network_code このネットワークのアド マネージャー 360 ネットワーク コード。
custom_asset_key LiveStreamEventService API またはアド マネージャー 360 ウェブ インターフェースのライブ配信ページで指定されたカスタム ライブ配信アセットキー。
pod_identifier

次の形式がサポートされています。

pod/{integer}

現在のミッドロール挿入点の数値 ID。連続配信広告の ID は 各広告ブレーク イベント( 1

ad_break_id/{string}

現在のミッドロール挿入点の文字列識別子。

profile_name リクエストするプロファイルの識別子
segment_number 現在の広告連続配信内のこのセグメントのインデックス(0 から始まる)。
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/ad_break_id/adbreak1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=ad_break_id%3adbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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>

これで、これで、DAI Pod Serving API から提供された広告セグメントを使用して DASH ライブ配信を配信できるようになりました。

参考情報