BRIGHTCOVE PLAYER: SSAI プラグインの V6.9.0 での変更点

Picture of bsp-admin-1
bsp-admin-1

Brightcove SDK v6.9.0 が 2019 年 10 月 22 日にリリースされ、いくつかの変更点が含まれています(リリース ノートを参照)。しかしこの記事では、特に SSAI プラグインの変更点、特に Live SSAI の追加サポートについてお話したいと思います。

ライブ・サイの概要

ライブSSAIとは?一言で言えば、Live SSAIとは、動的に広告が挿入されるLiveストリームのことです。Live SSAI API の詳細については、「Live API:また、Video Cloud SSAI の概要でSSAI 全般の詳細をご覧ください。

ライブ SSAI ストリームを任意のプレーヤで再生すると、コンテンツと広告の両方が同じストリームの一部として表示されます。そこで Brightcove SDK と SSAI プラグインが役に立ちます。SSAI プラグインは、広告ブレイクが再生されるとそれを検出し、コントローラを変更して、広告ブレイクの継続時間、個々の広告の継続時間、広告数のカウントダウンなどの有益な情報を表示します。

スタート

AndroidとSSAIプラグインのコードの話を始める前に、以下のことをやっておく必要がある:

  1. ライブ広告の設定を作成する
  2. ライブ配信を設定する
  3. ライブのadConfigIdを見つけてコピーする

ライブ広告の設定を作成する

VODビデオと同じ方法で広告設定を作成する必要があります。そのためには、以下のガイドに従ってください:Live広告設定を作成する。また、Liveモジュールでのサーバーサイド広告の実装もご覧下さい。

ライブ配信を設定する

SSAIをサポートしたライブ配信を作成するには、以下の手順に従ってください:サーバーサイド広告をサポートするライブイベントを作成する

ライブのADCONFIGIDを見つけてコピーする

ステップ1でLive広告コンフィギュレーションを作成すると、IDが取得され、VOD SSAIと同じようにそれをadConfigIdとして使いたくなるかもしれません。しかし、これはLive SSAIに必要なIDではありません。

ライブを探す adConfigIdの手順に従ってください。 ライブイベントの公開.最後のステップでは、プレーヤーのURLを見ることができます。このプレーヤーURLには adConfigId.そのため、あなたはそれを区別することができる。 adConfigId で始まる。 “live.”

SSAIプラグインでライブSSAIビデオをリクエストする

これでビデオをリクエストし、再生する準備ができた。

最初にすべきことは HttpRequestConfig オブジェクトをライブ adConfigId.

String adConfigIdKey = "ad_config_id";
String adConfigIdValue = "live.eb5YO2S2Oqdzlhc3BCHAoXKYJJl4JZlWXeiH49VFaYO2qdTkNe_GdEBSJjir";

HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder()
  .addQueryParameter(adConfigIdKey, adConfigIdValue)
   .build();

次に SSAIComponent このオブジェクトは、VOD SSAIストリームと同じようにLive SSAIストリームを処理する。

SSAIComponent plugin = new SSAIComponent(this, brightcoveVideoView);

次に Catalog オブジェクトがあります。

Catalog catalog = new Catalog(eventEmitter, accountId, policyKey);

最後に HttpRequestConfig を作成し、受信した動画を SSAI プラグインで処理します。SSAI プラグインは、動画を Brightcove 動画ビューに自動的に追加します。

catalog.findVideoByID(videoId, httpRequestConfig, new VideoListener() {
            @Override
            public void onVideo(Video video) {
                   plugin.processVideo(video);
            }
        });

このプロセスは、VOD SSAIとまったく同じであることにお気づきでしょう。唯一の違いは、使用するadConfigIdです。

変更

SSAIプラグインv6.9.0では、ライブ映像の中断と再開時に保存される再生ヘッド位置の問題により、潜在的な変更を導入する必要がありました。この問題は Event.PLAYHEAD_POSITION プロパティは EventType.PROGRESS または EventType.AD_PROGRESS イベント。

について Event.PLAYHEAD_POSITION 以前のバージョンでは、広告またはメインコンテンツに対する相対的な再生ヘッド位置が含まれていましたが、6.9.0では絶対的な再生ヘッド位置になっています。

例を挙げて説明しよう。次の図では、総時間43秒のVOD SSAI動画があります。メインコンテンツの時間は15秒で、6秒のプリロール、14秒のミッドロール、8秒のポストロールの3つの広告があります。ミッドロールの再生を開始すると、絶対再生ヘッド位置は11秒になりますが、ミッドロールに対する相対再生ヘッド位置はゼロになります。このとき Event.PLAYHEAD_POSITION の値は以前のバージョンではゼロだったが、バージョン6.9.0では11秒になっている。

: Brightcove SDK では、実際の再生ヘッド位置の値はすべてミリ秒単位で示されます。

ssaiプログレス・フロー・ダイアグラム

一方、新しいイベント・プロパティとして Event.PROGRESS_BAR_PLAYHEAD_POSITION これは相対的な再生ヘッド位置を含む。この名前は、最終的にプログレス・バーを通してユーザーに再生ブロック(広告またはコンテンツ)の再生ヘッド位置を表示する、という目的をより明確に表しています。とはいえ Event.PLAYHEAD_POSITION を使い始めるだけでよい。 Event.PROGRESS_BAR_PLAYHEAD_POSITION その代わりだ。

について Event.ORIGINAL_PLAYHEAD_POSITION は互換性のために変更されず、プレーヘッドの絶対位置を含んでいる。

以下の表は変更点をまとめたものである:

     
イベントプロパティ 6.9.0以前 6.9.0以上
Event.PLAYHEAD_POSITION プレイヘッドの相対位置 プレイヘッドの絶対位置
Event.ORIGINAL_PLAYHEAD_POSITION プレイヘッドの絶対位置 プレイヘッドの絶対位置
Event.PROGRESS_BAR_PLAYHEAD_POSITION 該当なし プレイヘッドの相対位置

プログレス・イベントをリッスンする際の注意点

を聴くときに注意しなければならないことがいくつかある。 EventType.PROGRESS イベントを追加します。リスナーを追加する時間は重要です。

まず、ブライトコーブ SDK と SSAI プラグインが何をするのか、その背景を説明します。

1.まず EventType.PROGRESS はもともと ExoPlayerVideoDisplayComponent クラスと Event.PLAYHEAD_POSITION プロパティには、ExoPlayerから取得した再生ヘッド位置(ExoPlayerを使用していると仮定します)が設定されており、これはSSAIコンテキストの絶対再生ヘッド位置です。

2.次に、SSAIプラグインが EventType.PROGRESS イベントで再生ヘッド位置をSSAIのタイムラインと比較し、コンテンツ再生中か広告再生中かを判断する。どちらの場合も、相対的な再生ヘッド位置を計算し、新しい Event.PROGRESS_BAR_PLAYHEAD_POSITION プロパティをこの値で指定します。

  • コンテンツを再生している場合は、そのイベントを他のリスナーに伝搬させる。
  • 広告を再生する場合は、広告の伝搬を停止する。 EventType.PROGRESS イベントを発生させ EventType.AD_PROGRESS 同じ特性を持つ。

3.最後に SSAIEventType.AD_DATA_READY または @Default アノテーションは EventType.PROGRESS イベント。

というのも EventType.PROGRESS が処理されるとき、リスナーを追加するタイミングによっては、期待した値が得られないかもしれない。たとえば EventType.PROGRESS リスナーの前に SSAIEventType.AD_DATA_READY を呼び出すと、リスナーはSSAIプラグインによって処理される前に呼び出されます。 Event.PROGRESS_BAR_PLAYHEAD_POSITION 値である。

注意点::これは古いバージョンでも起こることですが、その代わりに Event.PROGRESS_BAR_PLAYHEAD_POSITION 値は Event.PLAYHEAD_POSITION は、予想される相対再生ヘッド位置ではなく、絶対再生ヘッド位置になります(繰り返しますが、これは古いバージョンの場合です)。

注意点::を聴いているときは、この問題は起こらない。  EventType.AD_PROGRESS イベント。

万が一このような状況に陥った場合、試せることがいくつかある:

  1. を追加する。 @Default アノテーションをリスナーに追加します。
  2. の後にリスナーを追加する。 SSAIEventType.AD_DATA_READY が放出される。

追加 @DEFAULT アノテーションをリスナーに追加します。

内部的には、特定のリスナーに @Default アノテーションを使用します。これにより、デフォルトアノテーションのリスナーは、デフォルトアノテーションのリスナーが呼び出される前に、すべての非デフォルトリスナーが最初に呼び出されるのを待つようになります。

このアノテーションを EventType.PROGRESS リスナーが、デフォルトでないSSAIプラグインの EventType.PROGRESS リスナーがイベントを処理します。唯一の注意点は、SSAIプラグインが EventType.PROGRESS リスナーは @Default アノテーションは将来リリースされる予定です。

例はこうだ:

eventEmitter.on(EventType.PROGRESS, new EventListener() {
   @Default
   @Override
   public void processEvent(Event event) {
       int absolutePlayheadPosition = event.getIntegerProperty(Event.PLAYHEAD_POSITION);
       int relativePlayheadPosition = event.getIntegerProperty(Event.PROGRESS_BAR_PLAYHEAD_POSITION);
   }
});

の後にリスナーを追加する。 SSAIEVENTTYPE.AD_DATA_READY 排出される

あるいは、リスナーを SSAIEventType.AD_DATA_READY これは、SSAIプラグインがイベントを処理した後にリスナーが呼び出されることを保証します。

例はこうだ:

eventEmitter.once(SSAIEventType.AD_DATA_READY, adDataReady -> {
   eventEmitter.on(EventType.PROGRESS, progressEvent -> {
       int absolutePlayheadPosition = progressEvent.getIntegerProperty(Event.PLAYHEAD_POSITION);
       int relativePlayheadPosition = progressEvent.getIntegerProperty(Event.PROGRESS_BAR_PLAYHEAD_POSITION);
   });
});

注意点がある。それは SSAIEventType.AD_DATA_READY イベントは、SSAIビデオ(ライブとVOD)が開かれるたびに発行されます。 EventType.``PROGRESS リスナーを複数回

これを避ける1つの方法は、トークンを追加する際に EventType.PROGRESS イベント・エミッターにイベント・リスナーを追加し、そのリスナーを削除するために使用する。 SSAIEventType.AD_DATA_READY イベントです。例えば

// Declare member variable
private int mCurrentProgressToken = -1;

// Code called every time a SSAI video is processed with the SSAI plugin
eventEmitter.once(SSAIEventType.AD_DATA_READY, adDataReady -> {
   if (mCurrentProgressToken != -1) {
       eventEmitter.off(EventType.PROGRESS, mCurrentProgressToken);
   }

   mCurrentProgressToken = eventEmitter.on(EventType.PROGRESS, progressEvent -> {
       int absolutePlayheadPosition = progressEvent.getIntegerProperty(Event.PLAYHEAD_POSITION);
       int relativePlayheadPosition = progressEvent.getIntegerProperty(Event.PROGRESS_BAR_PLAYHEAD_POSITION);
   });
});

概要

SSAIプラグイン6.9.0は、Live SSAIをサポートするための重い作業を行います。Live SSAIストリームの再生を開始するために使用されるプラグインAPIには、VOD SSAIと比べて大きな変更はありません。難しいのは、Live SSAIストリームの設定と、Live SSAIプラグインに渡す必要がある正しい広告設定IDの特定です。 HttpRequestConfig カタログ請求の際

しかし、影響を受けるかどうかを特定すれば、コードを修正するのは非常に簡単だ。また EventType.PROGRESS イベントに参加する場合は、プログレス・リスナーを追加するタイミングに特別な注意を払い、期待される値を取得していることを確認する必要がある。

Back in July 2025, Brightcove unveiled an ambitious roadmap with a dual focus on innovation and quality of experience...
Our teams have been hard at work making the Brightcove platform more powerful, more reliable, and more insightful for...
Vertical Videos Experience lets you deliver a TikTok/Reels-style vertical feed on the web, powered by Brightcove. It’...

動画コンテンツの管理・活用はできていますか?

御社の動画マーケティング活動を強化し、必要な結果とROIを生み出すお手伝いをする方法については、
弊社までお問い合わせください。