プレーヤー イベント

このトピックでは、Brightcove Player に関連するさまざまな種類のイベントについて説明します。

概要

Brightcove Player には、動画再生を制御するための多くのイベントがあります。本トピックでは、イベントのさまざまな種類について概要を説明します。

Brightcove Player のイベントの完全な一覧は、Player Methods/Events API リファレンス ドキュメントで確認できます。このドキュメントには、プレーヤーを構成する実際のコードに含まれているイベントが反映されています。

メディア イベント

HTML Living Standard ドキュメントは、HTML の開発や Web アプリケーションに必要な API に関する情報を得るための有用なリソースです。これは「リビング」ドキュメントであり、Web の進化に関心を持つ人々の成長するコミュニティである Web Hypertext Application Technology Working Group(WHATWG)によって、常に最新の状態に保たれています。

Brightcove Player は HTML フレームワーク上で動作しており、以下の メディア イベント がトリガーされます。

以下は、本ドキュメント内で使用されているイベントに関連する用語です。

blocked

MediaController は、再生が 一時停止 されている場合、blocked と見なされます。メディア要素は、そのコントローラーが blocked media controller である場合に blocked とされます。

MediaController

MediaController は、複数のメディア要素の再生を調整するオブジェクトです。

media element

media element は、音声データ、または映像と音声データをユーザーに提示します。

slaved

デフォルトでは、各メディア要素は MediaController を持ちません。メディア要素が MediaController に関連付けられると、そのコントローラーに slaved されていると言います。コントローラーは、slaved されている各メディア要素の再生速度と音量を変更します。slaved されている要素のいずれかが予期せず停止した場合、コントローラーは他の slaved 要素の再生も停止します。

バッファリングおよび QoS イベント

以下は、バッファリングおよびサービス品質(QoS)に関連するイベントの一部です。

イベント名 説明
progress 動画データのバッファリング(読み込み)
waiting 要求された動画データを一時的に待機中
stalled バッファリングが停止
error 動画の読み込み中にエラーが発生
playing 一時停止またはダウンロード遅延後に再生を再開
ratechange 再生速度が変更された(手動または自動の場合があります)

起動イベント

プレーヤーが初期化され、動画を再生する準備を行う際には、いくつかのイベントが発生します。以下に、送出される順番でそれらのイベントを示します。

  • loadstart: プレーヤーが初期化されたとき、または再生する新しいソースが指定されて再初期化された場合に送出されます。

  • loadedmetadata: プレーヤーが初期の再生時間やサイズ情報を取得したとき、つまり最初のセグメントがダウンロードされたときに送出されます。ライブ動画の場合、loadedmetadata イベントはユーザーが再生をクリックするまで送出されません。これは、ライブ動画ではユーザーが再生をクリックするまでセグメントのダウンロードが開始されないためです。
  • loadeddata: 現在の再生位置におけるデータがダウンロードされたときに送出されます。

以下の CodePen では、起動イベントをリッスンし、それらが送出される様子を確認できます。CodePen 上にマウスを合わせると、右下に表示される RERUN ボタンをクリックして、イベントが再度送出される様子を見ることができます。コードを試したい場合は、ヘッダー内の Edit on CODEPEN リンクをクリックして編集環境に移動してください。JS ボタンをクリックすると、イベント リスナーを追加している JavaScript を確認できます。

See the Pen Startup Events Demo by Brightcove Learning Services (@bcls) on CodePen.

ready() メソッド

ready() メソッドは、イベントのように見えますが、メソッドとして使用するという二面性を持っています。このメソッド/イベントは、プレーヤーがコマンドを受け取る準備ができたことを意味します。

ready() メソッドはイベント リスナーとは異なり、すでに ready イベントが発生している場合は、即座に ready() メソッドが実行されます。Brightcove Player を使った開発の開始点として、以下のように使用されることがよくあります。

      videojs.getPlayer('myPlayerID').ready(function(){
        var myPlayer = this;
      });

ready() と on('loadedmetadata',...) の比較

ready() は、たとえばプログラムでプラグインを追加するなど、プレーヤーと対話する場合には正しく機能します。一方、play() のように動画自体と即座に対話したい場合には、上記のコード スニペットは常に正しく動作するとは限りません。その場合は、loadedmetadata をリッスンして動画と対話する方法がより適切です。例を以下に示します。

      videojs.getPlayer('myPlayerID').on('loadedmetadata',function(){
        var myPlayer = this;
        myPlayer.play();
      });

まとめると、プレーヤーと対話する場合は次の方法を使用します。

      videojs.getPlayer('myPlayerID').ready()

プレーヤー内の動画と即座に対話したい場合は、次の方法を使用します。

      videojs.getPlayer('myPlayerID').on('loadedmetadata',function(){})

自動再生イベント

自動再生イベントは、プレーヤーがコンテンツの自動再生を試みた際にトリガーされます。

autoplay-success: ユーザー操作なしで自動再生が正常に開始されたときにトリガーされます。

          videojs.getPlayer('myPlayerID').on('autoplay-success',function(){
       console.log('Autoplay was successful.');
       });

autoplay-failure: 自動再生の開始に失敗したときにトリガーされます。

          videojs.getPlayer('myPlayerID').on('autoplay-failure',function(){
       console.log('Autoplay failed.');
       });

フルスクリーン イベント

fullscreenchange イベントは、プレーヤーがフルスクリーン モードに切り替わった、またはフルスクリーン モードから戻ったときに送出されます。プレーヤーがフルスクリーンになる場合と通常モードに戻る場合のいずれでも、同じイベントが送出されます。どちらが発生したかを判別する必要がある場合は、player.isFullscreen() メソッドを使用して、現在プレーヤーがフルスクリーン モードかどうかを確認してください。

以下の CodePen は、その方法を示しています。

See the Pen Brightcove Player Fullscreen Events by Brightcove Learning Services (@bcls) on CodePen.

広告イベント

プレーヤーに広告ライブラリや広告機能を組み込むには、IMA3 プラグイン または FreeWheel プラグイン を使用できます。これらは videojs ads framework(videojs-contrib-ads)を基盤として構築されています。これら 2 つの広告プラグインはいずれも、次の表に示す広告イベントを送出できます。また、それぞれの実装に固有のイベントも用意されています。

イベント 送出されるタイミング
ads-request 広告データをリクエストした時。
ads-load 広告リクエスト後に広告データが利用可能になった時。
ads-ad-started 広告の再生が開始された時。
ads-ad-ended 広告の再生が終了した時。
ads-pause 広告が一時停止された時。
ads-play 一時停止中の広告が再開された時。
ads-first-quartile 広告の総再生時間の 25% が再生された時。
ads-midpoint 広告の総再生時間の 50% が再生された時。
ads-third-quartile 広告の総再生時間の 75% が再生された時。
ads-click 視聴者が再生中の広告をクリックした時。
ads-volumechange 再生中の広告の音量が変更された時。
ads-pod-started リニア広告ポッド(連続した広告グループ)の最初の広告が開始された時。
ads-pod-ended リニア広告ポッド(連続した広告グループ)の最後の広告が終了した時。
ads-allpods-completed すべてのリニア広告の再生が完了した時。

bc-catalog-error イベント

スクリプト ブロック内の通常の ready() セクションでエラー処理を行うと、問題が発生する可能性があります。たとえば、プレーヤーの準備が完了する前に bc-catalog-error イベントが送出される場合があり、その場合 ready() セクション内でエラーをリッスンしていても、エラーを処理することができません。この問題は、地域フィルタリングを使用している場合、動画が非公開になっている場合、動画がスケジュール範囲外である場合、または別のアカウントに属している場合に発生する可能性があります。bc-catalog-error イベントの処理に関する詳細な説明や例については、Player Catalog ドキュメントを参照してください。

progress と timeupdate

progress イベントと timeupdate イベントの違いについて、混乱が生じることがあります。Brightcove Player は HTML5 video を基盤としており、その仕様では progress イベントは、ブラウザーがデータをダウンロードしているときに送出されます。一方、timeupdate イベントは、現在の再生位置が変更されたときに送出されます。

これは Brightcove Smart Player の利用者にとっては混乱を招く可能性があります。Smart Player API では、progress イベントが、Brightcove Player API における timeupdate と同様の役割を果たしているためです。

timeupdate リスナー削除時の注意点

場合によっては、timeupdate イベントに追加したイベント リスナーを削除したいことがあります。そのユースケースは、Brightcove Player サンプル:プレビュー後に再生を登録する ドキュメントで紹介されています。このケースでは、特定の時間範囲でプレーヤーを一時停止させたい状況で、時間のチェックに timeupdate を使用し、無名のイベント ハンドラー関数を定義しています。一度だけ一時停止させたい場合、その後イベント リスナーを削除する必要があります。その際、次のようにしてはいけません。

      myPlayer.off('timeupdate');

これは timeupdate に対するすべてのイベント リスナーを削除してしまい、他の問題に加えてタイム スクラバーが進まなくなる原因となります。必要なのは、通常の関数定義構文(関数宣言)を使用して関数を作成し、その特定のイベント リスナーのみを削除することです。簡略化したコードを以下に示します。

       // イベント ハンドラーを追加
      myPlayer.on('timeupdate', timeupdateHandler);
      
      // イベントを処理した後、この timeupdate のイベント リスナーのみを削除
      function timeupdateHandler(evt) {
        ...
        myPlayer.off('timeupdate', timeupdateHandler);
      }

Analytics イベント

Analytics データコレクターにビーコンが送信されるたびに、イベントがトリガーされます。すべてのビーコン、または特定のビーコンをリッスンすることができます。

すべてのビーコンをリッスンする

analytics-beacon イベントをリッスンすることで、送信されるすべての Analytics ビーコンを追跡できます。

player.on('analytics-beacon', function(e) {
        videojs.log('sent a(n) ' + e.params.event + ' beacon!', e.params);
      });

特定のビーコンをリッスンする

analytics-beacon-{beacon_name} イベントをリッスンすることで、特定の Analytics ビーコンを追跡できます。

{beacon_name} は、データ コレクターに送信されるプレーヤー イベントのいずれかの名称です。これらのイベントの完全な一覧については、Data Collection API リファレンス を参照してください。

player.on('analytics-beacon-video-impression', function(e) {
        videojs.log('sent an impression beacon!', e.params);
      });

メソッド チェーンはサポートされていません

Brightcove Player バージョン 6 以降では、イベントに対するメソッド チェーンはサポートされなくなりました。つまり、次のような記述はできません。

      player.on(event, function () {})
      .on(event, function () {})
      .on(event, function () {})
      .on(event, function () {});