DAI 用 IMA SDK を設定する

IMA SDK を使用すると、マルチメディア広告をウェブサイトやアプリに簡単に統合できます。IMA SDK は、 VAST 準拠のあらゆる広告サーバーから広告をリクエストし、アプリでの広告再生を管理できます。IMA DAI SDK を使用すると、アプリは広告とコンテンツ動画(VOD またはライブ コンテンツ)のストリーム リクエストを行います。SDK は結合された動画ストリームを返すため、アプリ内で広告とコンテンツの動画の切り替えを管理する必要はありません。

関心のある DAI ソリューションを選択する

Google Cloud Video Stitcher API で登録されたライブ ストリームの再生

このガイドでは、HTML5 向け IMA DAI SDK を使用して Google Cloud Video Stitcher API に登録されたイベントのライブ ストリームをリクエストして再生する方法と、再生中にミッドロール挿入点を挿入する方法について説明します。

このガイドでは、IMA DAI のスタートガイドの基本的な例を拡張します。

他のプラットフォームとの統合や IMA クライアントサイド SDK の使用については、Interactive Media Ads SDK をご覧ください。

完了したサンプル統合を表示またはフォローするには、HLS または DASH 用の Cloud 動画スティッチャーの例をダウンロードします。

Google Cloud プロジェクトの設定

Google Cloud プロジェクトを設定し、プロジェクトにアクセスするようにサービス アカウントを構成します

独自のコンテンツ ライブ ストリームまたはテスト ライブ ストリームを使用して、ライブ配信イベントの構成を作成します。このガイドでは、HLS ストリームを想定しています。

IMA SDK で使用する次の変数を入力します。

ロケーション
ライブ構成が作成された Google Cloud リージョン: LOCATION
プロジェクト番号
Video Stitcher API を使用する Google Cloud プロジェクト番号: PROJECT_NUMBER
OAuth トークン

Video Stitcher ユーザーロールを持つサービス アカウントの有効期間が短い OAuth トークン:

OAUTH_TOKEN

サービス アカウントの有効期間が短い認証情報を作成するの詳細を確認します。OAuth トークンは、期限が切れていない限り、複数のリクエストで再利用できます。

ネットワーク コード

広告をリクエストするためのアド マネージャー ネットワーク コード: NETWORK_CODE

ライブ構成 ID
ライブ配信イベントの作成時に指定したライブ構成 ID: LIVE_CONFIG_ID
カスタム アセットキー
Video Stitcher API を使用してライブ配信イベントの設定を作成するのプロセス中に生成されるアド マネージャーのカスタム アセットキー: CUSTOM_ASSET_KEY

開発環境を構成する

IMA サンプルアプリでは、HLS ストリーム リクエストのみがデモされます。VideoStitcherLiveStreamRequest クラスを構築する際に、DASH ストリームを引き続き使用できます。DASH 対応プレーヤーを設定する際は、動画プレーヤーの進行状況イベントのリスナーを設定する必要があります。このリスナーは、動画のメタデータを StreamManager.processMetadata() に提供できます。この関数は次の 3 つのパラメータを取ります。

  1. type: HLS ストリームの場合は 'ID3'、DASH ストリームの場合は 'urn:google:dai:2018' に設定する必要がある文字列。

  2. data: DASH イベント メッセージの場合、これはメッセージ データ文字列です。

  3. timestamp: DASH ストリームのイベント メッセージの開始時刻を示す数値。

プレーヤー イベントで提供できる限り、メタデータをできるだけ早く、できるだけ頻繁に送信します。メタデータが欠落しているか正しくない場合、IMA DAI SDK が広告イベントをトリガーせず、広告イベントが正しくレポートされない可能性があります。

HTML5 用 IMA DAI サンプルをダウンロードし、HLS.js Simple サンプルを新しいフォルダに抽出します。この例は、テスト用にローカルでホストできるウェブアプリです。

サンプルをローカルでホストするには、新しいフォルダに移動し、次の Python コマンドを実行してウェブサーバーを起動します。

python3 -m http.server 8000

http.server は Python 3.x でのみ使用できます。Apache HTTP Server や Node JS などの他のウェブサーバーも使用できます。

ウェブブラウザを開き、localhost:8000 に移動して動画プレーヤーを表示します。ブラウザが HLS.js ライブラリをサポートしている必要があります。

すべてが正常に機能している場合、動画プレーヤーの [再生] ボタンをクリックすると、短い広告の後にショート フィルム「Tears of Steel」が始まります。このコンテンツは、ビデオ オンデマンド(VOD)ストリームを使用して配信されます。

ライブ配信をリクエストする

サンプル VOD ストリームをライブ ストリームに置き換えるには、Google アド マネージャーで広告セッションを自動的に作成する VideoStitcherLiveStreamRequest クラスを使用します。Google アド マネージャーの UI を使用して、モニタリングとデバッグのために、生成された DAI セッションを特定できます。

既存のサンプルには、VOD ストリームまたはライブ ストリームをリクエストする関数があります。Google Cloud Video Stitcher API で動作させるには、VideoStitcherLiveStreamRequest オブジェクトを返す新しい関数を追加する必要があります。

次に例を示します。

// StreamManager which will be used to request ad-enabled streams.
let streamManager;
...
function initPlayer() {
  videoElement = document.getElementById('video');
  adUiElement = document.getElementById('adUi');
  streamManager = new google.ima.dai.api.StreamManager(
    videoElement,
    adUiElement
  );
  streamManager.addEventListener(
      [
        google.ima.dai.api.StreamEvent.Type.LOADED,
        google.ima.dai.api.StreamEvent.Type.ERROR,
        google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
        google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED
      ],
      onStreamEvent, false);

  hls.on(Hls.Events.FRAG_PARSING_METADATA, function(event, data) {
    if (streamManager && data) {
      // For each ID3 tag in our metadata, we pass in the type - ID3, the
      // tag data (a byte array), and the presentation timestamp (PTS).
      data.samples.forEach(function(sample) {
        streamManager.processMetadata('ID3', sample.data, sample.pts);
      });
    }
  });

  videoElement.addEventListener('pause', () => {
    playButton.style.display = 'block';
  });

  playButton.addEventListener('click', initiatePlayback);
}

function initiatePlayback() {
  requestVideoStitcherStream();

  playButton.style.display = "none";
  playButton.removeEventListener('click', initiatePlayback);
  playButton.addEventListener('click', resumePlayback);
}
...

function requestVideoStitcherStream() {
  const streamRequest = new google.ima.dai.api.VideoStitcherLiveStreamRequest();
  streamRequest.liveStreamEventId = 'LIVE_CONFIG_ID';
  streamRequest.region = 'LOCATION';
  streamRequest.projectNumber = 'PROJECT_NUMBER';
  streamRequest.oAuthToken = 'OAUTH_TOKEN';
  streamRequest.networkCode = 'NETWORK_CODE';
  streamRequest.customAssetKey = 'CUSTOM_ASSET_KEY';

  streamManager.requestStream(streamRequest);
}

ローカルテストで、ライブ配信ファイルが Cloud Storage バケットにある場合は、配信元 http://localhost:8000CORS を有効にする必要があります。

ページを再読み込みします。その後、カスタムライブ配信をリクエストして再生できます。

(省略可)ストリーミング セッション オプションを追加する

VideoStitcherLiveStreamRequest.videoStitcherSessionOptions を使用して、デフォルトの Cloud Video Stitcher API 構成をオーバーライドするセッション オプションを追加することで、ストリーム リクエストをカスタマイズします。認識されないオプションを指定すると、Cloud Video Stitcher API により HTTP 400 エラーの応答が返されます。詳しくは、トラブルシューティング ガイドをご覧ください。

たとえば、次のコード スニペットを使用してマニフェスト オプションをオーバーライドできます。このコードは、ビットレートを低い順に並べた 2 つのストリーム マニフェストをリクエストします。

...

// The following session options are examples. Use session options
// that are compatible with your video stream.
streamRequest.videoStitcherSessionOptions = {
  "manifestOptions": {
    "bitrateOrder": "ascending"
  }
};

streamManager.requestStream(streamRequest);

ミッドロール挿入点を挿入する

Google Cloud Video Stitcher API は、ミッドロール挿入点ごとに広告タグから取得された広告を挿入します。ミッドロール挿入点は、マニフェストで広告マーカーを使用して示されます。広告マーカーはライブ ストリーム エンコーダによって挿入されます。

広告は、ミッドロール挿入点が挿入された直後に再生されます。

クリーンアップ

Google Cloud Video Stitcher API を使用してライブ ストリームをホストし、HTML5 向け IMA DAI SDK を使用してリクエストしたので、サービング リソースをクリーンアップすることが重要です。

ライブ配信のクリーンアップ ガイドに沿って、不要なリソースとアセットを削除します。

最後に、Python 3 ウェブサーバーを起動したターミナル ウィンドウで、ctrl+C コマンドを使用してローカル サーバーを終了します。