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プラグインのコードの話を始める前に、以下のことをやっておく必要がある:
- ライブ広告の設定を作成する
- ライブ配信を設定する
- ライブの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 では、実際の再生ヘッド位置の値はすべてミリ秒単位で示されます。
一方、新しいイベント・プロパティとして 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
イベント。
万が一このような状況に陥った場合、試せることがいくつかある:
- を追加する。
@Default
アノテーションをリスナーに追加します。 - の後にリスナーを追加する。
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
イベントに参加する場合は、プログレス・リスナーを追加するタイミングに特別な注意を払い、期待される値を取得していることを確認する必要がある。