Pod Serving API は、準備されたアダプティブ ビットレートの動画連続配信広告へのアクセスを提供します。 それらがユーザー向けの HLS または MPEG-DASH メディア再生リスト。
このガイドでは、基本的な Pod Serving マニフェスト操作の実装に焦点を当てています。 提供します
ストリーム マニフェスト リクエストを受信する
マニフェスト マニピュレータには、マニフェストをリッスンする API エンドポイントを指定する必要があります クライアント アプリからのリクエスト。少なくとも、このエンドポイントは クライアント プレーヤー アプリからストリーム ID を収集します。このストリーム ID は 連続配信広告のリクエストでアド マネージャーへのストリーミング セッションを特定できる。
また、組織にとって適切なポリシーを特定するために、 (Content ID など)などです。
マニフェスト リクエストのエンドポイントの例
GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
パスパラメータ | |||||
---|---|---|---|---|---|
stream_id |
クライアントの動画プレーヤー アプリのアド マネージャー ストリーム ID。 | ||||
content_id |
システムのコンテンツ動画に対応する仮の ID。 | ||||
format |
ストリーム形式に対応する架空のパラメータ。次のいずれか:
|
コンテンツ ストリームを取得する
マニフェスト リクエストから収集されたコンテンツ ID を使用してコンテンツを選択します 広告と統合します
連続配信広告のマニフェストをリクエストする
アド マネージャーから広告をリクエストするには、サーバーが広告に対する POST リクエストを行う必要があります。 リクエストしたエンコード プロファイル、広告タグ、ターゲティングを渡します。 あります。このリクエストには、ステップで収集したストリーム ID も含まれます。 1.
その代わりに、対応する連続配信広告のマニフェスト ファイルを含むリストが パブリッシャーの広告タグによってリクエストされた連続配信広告、 コンテンツ内のどこに挿入するかを決定できます
POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
パスパラメータ | |
---|---|
network_code |
パブリッシャーのアド マネージャー 360 ネットワーク コード。 |
stream_id |
クライアント動画プレーヤー アプリのストリーム ID。 |
JSON 本文
本文パラメータ | ||
---|---|---|
encoding_profiles |
Required |
受信するエンコード プロファイルの JSON 表現のリスト
自動的に適用されます詳しくは以下をご覧ください。
再生をできるだけシームレスにするには、 コンテンツ ストリームで使用するエンコード プロファイル。 |
ad_tag |
Required |
VMAP 広告をリクエストする広告タグ。 |
cuepoints |
Optional |
ミッドロール挿入点が配置されるコンテンツ ストリーム内のキューポイントのリスト
あります。キューポイントは浮動小数点秒単位で測定されます。
「 位置時間オフセット。これは一般的ではありません。 |
content_duration_seconds |
Optional |
コンテンツの再生時間(秒単位)。
「 percentage 時間オフセット。これは一般的ではありません。 |
manifest_type |
Optional |
リクエストされている広告ストリームの形式(hls または
dash 。デフォルト値は hls です。
|
dai_options |
Optional |
マニフェストのレンダリング方法を制御する追加のオプション。 詳しくは以下をご覧ください。 |
エンコード プロファイル | ||
profile_name |
Required |
このエンコード プロファイルの識別子。この値には、任意の文字列を指定できます。 同じ名前を持つ複数のエンコード プロファイルを 同じストリーム内に表示されます |
type |
Required |
このエンコード プロファイルに記述されているストリームのエンコード タイプ。目次
media 、iframe 、subtitles です。
|
container_type |
Required |
このエンコード プロファイルで使用されるコンテナ形式。コンテナの形式は次のとおりです。
mpeg2ts さん、fmp4cmaf さん、hls_packed_audio さん
|
video_settings |
Optional |
エンコード プロファイル タイプが iframe の場合は必須です。それ以外の場合は メディアタイプに動画が含まれている場合のみ指定できます。参照: 詳細は下記をご覧ください。 |
audio_settings |
Optional |
エンコード プロファイルに音声が含まれている場合は必須です。タイプが できます。詳しくは以下をご覧ください。 |
subtitle_settings |
Optional |
エンコード プロファイルに字幕が含まれている場合は必須です。 詳しくは以下をご覧ください。 |
動画の設定 | ||
codec |
Required |
RFC6381 コーデック文字列。
例: |
bitrate |
Required |
このプロファイルの最大動画ビットレートを表す整数(バイト単位、バイト単位)。 なります。 |
frames_per_second |
Required |
動画の浮動小数点数 FPS。 |
resolution |
Required |
動画の「width」と「height」をピクセル単位で格納する、JSON でエンコードされた値。
例: |
音声設定 | ||
codec |
Required |
RFC6381 コーデック文字列。
例: |
bitrate |
Required |
このプロファイルの最大オーディオ ビットレート(バイト数/バイト)を表す整数
なります。
例: |
channels |
Required |
低周波数を含む音声チャンネルの数を表す整数 です。 |
sample_rate |
Required |
オーディオ サンプリング レート(ヘルツ単位)を表す整数。
例: |
字幕の設定 | ||
format |
Required |
インバンド字幕で使用されるファイル形式。指定できる値は次のとおりです。
webvtt または ttml 。
|
language |
Optional |
RFC5646 言語文字列で表される字幕言語。指定した場合、この値は
DASH レンダリングでのみ使用されます。
例: |
DAI オプション | ||
dash_profile |
Optional |
連続配信広告のマニフェストに適用する MPEG-DASH プロファイル。この設定は
DASH マニフェストのみ。使用できる値は live または
on-demand 。デフォルト値は on-demand です。
値
値 |
ad_pod_timeout |
Optional |
広告の選択と連続配信広告の作成に費やす最大時間(フローティング)
ポイント秒です。この時間が経過すると、アド マネージャーからすべての
ad_pods レスポンスですでに選択されていて、停止する
あります。
|
sam_id |
Optional |
ブロック内のセッションを検索するために使用できる代替デバッグキーを指定します。 ストリーム アクティビティ モニタリングします。 |
レスポンス
レスポンス パラメータ | |
---|---|
valid_for |
dhms におけるこれらの連続配信広告の再生リストの有効期間
(日、時間、分、秒)の形式で指定します。
|
valid_until |
これらの連続配信広告の再生リストが ISO8601 として有効になるまでの日時
日時文字列(yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm )
使用できます。
|
ad_pods |
このストリームで選択された連続配信広告のリスト。 |
連続配信広告 | |
manifest_uris |
HLS ストリームの場合のみ。エンコード プロファイル ID から HLS マニフェスト URI へのマップ。 |
mpd_uri |
DASH ストリームの場合のみ。DASH MPD の URI。 |
type |
連続配信広告のタイプ。連続配信広告のタイプ: pre 、mid 、または
post 。
|
start |
ミッドロール連続配信広告の場合のみ。この連続配信広告が配置されるストリーム内の位置 浮動小数点数秒で挿入されます。 |
duration |
この連続配信広告の再生時間(浮動小数点秒単位)。 |
midroll_index |
ミッドロール連続配信広告の場合のみ。現在のミッドロール連続配信広告のインデックス。インデックス処理
1 で始まる。
|
リクエストの例(cURL)
curl -X POST \
-d '@request-body.json' \
-H 'Content-Type: application/json' \
https://dai.google.com/ondemand/pods/api/v1/network/21775744923/streams/6e69425c-0ac5-43ef-b070-c5143ba68541:CHS/adpods
リクエスト本文の例
これは、上記の cURL 呼び出しで参照されている request-body.json
の内容です。
{
"encoding_profiles": [
{
"profile_name": "1080p",
"type": "media",
"container_type": "mpeg2ts",
"video_settings": {
"codec": "avc1.4d000c",
"bitrate": 5000000,
"frames_per_second": 30.0,
"resolution": {
"width": 1920,
"height": 1080
}
},
"audio_settings": {
"codec": "mp4a.40.5",
"bitrate": 300000,
"channels": 2,
"sample_rate": 48000
}
},
{
"profile_name": "360p",
"type": "media",
"container_type": "mpeg2ts",
"video_settings": {
"codec": "avc1.4d000d",
"bitrate": 1000000,
"frames_per_second": 30.0,
"resolution": {
"width": 640,
"height": 360
}
},
"audio_settings": {
"codec": "mp4a.40.5",
"bitrate": 64000,
"channels": 2,
"sample_rate": 48000
}
},
{
"profile_name": "subtitles-webvtt",
"type": "subtitles",
"subtitle_settings": {
"format": "webvtt"
}
}
],
"ad_tag": "https://pubads.g.doubleclick.net/gampad/ads?...",
"manifest_type": "hls"
}
レスポンスの例
{
"valid_for": "8h0m0s",
"valid_until": "2023-03-24T08:30:26.839717986-07:00",
"ad_pods": [
{
"manifest_urls":{
"1080p": "https://{...}/pod/0/profile/1080p.m3u8",
"360p": "https://{...}/pod/0/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt"
},
"type": "pre",
"duration": 10.0
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/1/profile/1080p.m3u8",
"360p": "https://{...}/pod/1/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/1/profile/subtitles-en.vtt"
},
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
},
{
"manifest_urls":{
]"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
"360p": "https://{...}/pod/2/profile.m3u8",
"subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt""
},
"type": "post",
"duration": 10.0
}
]
}
連続配信広告をコンテンツに組み込む
連続配信広告をコンテンツ ストリームに組み込むプロセスは、 ストリーム形式、使用する機能に応じて異なります。 をフォーマットの仕様から実装します。以下のワークフローは 提案することもあります広告主の正確な 実装は、ビジネスニーズやコンテンツに応じて異なります。 使用できます。
HLS ストリーム
HLS 形式でストリームを合成する場合、コンテンツ ストリームは マルチバリエーション 再生リスト 個別のストリーム マニフェストへのリンク(エンコード プロファイルごとに 1 つ)が含まれます。お客様の広告 各バリアント マニフェストに Pod を挿入する必要があります。一方、 すべてのバリアント マニフェストを準備して、それを Content API の 配信ネットワーク(CDN) 説明します。最後のマルチバリエーション再生リストは、CDN でホストされる 使用します。
エンコード プロファイルを反復処理する
エンコード プロファイルごとに、関連するすべての広告連続配信広告のマニフェストを
アド マネージャーのレスポンス、および関連する開始時間。プレロール広告用
Pod の場合は、開始時間を 0
に設定します。ポストロールの場合は、コンテンツの再生時間を
指定することもできます。マルチバリアントのバリアント ストリームを特定する
各エンコード プロファイルの音声と動画の設定に一致する再生リストが作成されます。
連続配信広告の配列の例
"ad_pods": [
{
"manifest_urls":{
"1080p": "https://{...}/pod/0/profile/1080p.m3u8",
"360p": "https://{...}/pod/0/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/0/profile/subitles-en.vtt"
},
"type": "pre",
"duration": 10.0
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/1/profile/1080p.m3u8",
"360p": "https://{...}/pod/1/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/1/profile/subitles-en.vtt"
},
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
},
{
"manifest_urls":{
"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
"360p": "https://{...}/pod/2/profile/360p.m3u8",
"subtitles-en": "https://{...}/pod/2/profile/subitles-en.vtt"
},
"type": "post",
"duration": 10.0
}
]
マルチバリエーション コンテンツ再生リストの例
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://{...}/subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{...}/360p.m3u8
収集されたバリアント データの例
Encoding profile: "1080p"
Profile settings: {...}
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
0 -> https://{...}/pod/0/profile/1080p.m3u8
15 -> https://{...}/pod/1/profile/1080p.m3u8
600 -> https://{...}/pod/2/profile/1080p.m3u8
各バリアント マニフェストに広告を挿入する
バリアント ストリームごとに、コンテンツ マニフェストのセグメントを調べ、
コンテンツの経過時間の合計です開始位置に到達したら
作成、連続配信広告のマニフェストからセグメントのリストを抽出し、
2 つの #EXT-X-DISCONTINUITY
タグでセグメントのリストを作成し、そのリストを
現在の場所を指定します。広告がすべてのユーザーに表示されるまで
Pod とバリアント ストリームが処理されました。
作成されるマニフェストは HLS 標準に準拠している必要があります。そのため コンテンツ マニフェストに組み込まれている仕様のどの機能を使用するかは、 メディアを修正するために、複合的なマニフェストに対する最終パスの実行が必要になる場合があります コンテンツの長さ、不連続性シーケンス番号、その他の 新しい広告セグメントを考慮するために更新が必要な他のタグが表示されます。 標準との差異を修正したら、 ユーザー固有のバリアント マニフェストを CDN に追加してホスティングします。
コンテンツ マニフェストが暗号化されている場合は、最後の暗号化を保存する必要があります。
現在の連続配信広告の開始前に #EXT-X-KEY
タグで検出されたキー。その後、
#EXT-X-KEY:METHOD=NONE
タグを追加して暗号化を解除してから、
各連続配信広告の最初のセグメントに
割り当てられます最後に、保存されているファイルのコピーを
各連続配信広告の後のコンテンツの最初のセグメントの前に #EXT-X-KEY
タグを配置して、
コンテンツの暗号化を復元します。
収集されたバリアント データの例
Encoding profile: "1080p"
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
0 -> https://dai.google.com/{...}pod/0/profile/1080p.m3u8
15 -> https://dai.google.com/{...}pod/1/profile/1080p.m3u8
600 -> https://dai.google.com/{...}pod/2/profile/1080p.m3u8
コンテンツ マニフェストの例
これは、https://{...}/1080p.m3u8
マニフェストのリストにある
バリエーションデータを収集します。
#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
連続配信広告のマニフェストの例
これが
https://dai.google.com/{...}/pod/1/profile/1080p.m3u8
マニフェスト
バリエーションデータの一覧に表示されます。
#EXTM3U
{...}
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
合成されたバリアント マニフェストの例
これが合成されたバリアント マニフェストになり、CDN に渡され、
https://cdn.{...}/{userid}/1080p.m3u8
でホストされています。
#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
マルチバリエーション再生リストを作成する
完成したバリアント マニフェストごとに、CDN アドレスと、 プロファイルの詳細が照合されて、結果が 記述できます。このユーザー固有のマニフェストがレスポンスとして返されます。 マニフェスト リクエストに追加します。
最終的なマルチバリエーション再生リストの例
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://cdn.{...}-subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/{userid}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/{userid}/360p.m3u8
MPEG DASH ストリーム
MPEG DASH 形式のストリームを合成する場合、必要なのは 作成します。これにより、DASH ストリームは HLS よりも簡単に合成できます。
MPEG DASH Media Presentation Description(MPD)ファイルは適切に準備する必要があります。 複数の期間で構成され、各期間には複数の表現が含まれています。各 いずれかのエンコード プロファイルと一致している必要があります。返される各連続配信広告 ダウンロードされる MPD ファイルも MPD ファイルです。このファイルには、 表現されます。
これらの MPD ファイルを合成するには、まず、 指定することもできますプレロールの場合は、コンテンツの前にプレロール連続配信広告の期間を挿入します です。ポストロールの場合は、すべてのコンテンツの後にポストロール連続配信広告の期間を挿入します です。コンテンツ MPD 内の期間に対してイテレーションを行い、 処理されたすべてのコンテンツ期間の経過時間です。上限に達した場合 連続配信広告の開始時間に対応する期間の間に その境界にある MPD ファイルから広告が抽出されます。
最終的に合成された MPD ファイルは、MPEG_DASH 仕様に完全に準拠している必要があります。 そのため、最終的なファイルをもう一度手直しし、修正が必要な部分を 調整し、メディア プレゼンテーションの再生時間を修正して 新しく挿入される広告期間、その他の競合によって生じる可能性のある スティッチングの過程で発生します
コンテンツの例 MPD
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M00.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Example Stream</Title>
</ProgramInformation>
<Period duration="PT0H0M15.000S" id="content-period-1">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-2">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-3">
...
</Period>
...
</MPD>
連続配信広告の JSON の例
[{
"mpd_uri": "https://{...}pod/1.mpd",
"type": "mid",
"start": 15.0,
"duration": 15.0,
"midroll_index": 1
}]
連続配信広告の MPD の例
これは、上記の連続配信広告の JSON の mpd_uri
の内容です。
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H0M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Ad Pod 1</Title>
</ProgramInformation>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
...
</Period>
...
</MPD>
合成された MPD の例
これを最初のストリーム マニフェスト リクエストに対するレスポンスとして使用します。
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
<ProgramInformation moreInformationURL="http://.../info">
<Title>Example Stream</Title>
</ProgramInformation>
<Period duration="PT0H0M15.000S" id="content-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
...
</Period>
<Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-2">
...
</Period>
<Period duration="PT0H0M15.000S" id="content-period-3">
...
</Period>
...
</MPD>
参考情報
- IMA SDK を使用して連続配信広告を再生する場合: <ph type="x-smartling-placeholder">
- DAI による連続配信広告の再生 API