HubSpot動画は、ファイルツールにアップロードした動画ファイルを共通モジュールの[動画]や、リッチテキストの[挿入 > 動画]から使用できます。
HubSpot動画のUIや操作感はHTMLのvideoタグと似ていますが、大きな違いとして再生数や動画リテンションなどの分析が可能になります。詳しくは公式サイトを参照してください。
そして通信処理はHubSpotの動画配信サーバーが使用されます。動画配信サーバーが使われると再生に必要なデータしか取得しないためユーザーフレンドリーです。
このように使い勝手の良いHubSpot動画を活用したいところですが、特殊なことをしようとすると非常に難しくなります。
例えば「動画を再生していて動画エリアが画面外になったら再生を止める」という処理を実装したいと思います。
通常のvideoタグであれば比較的簡単に実装できますが、HubSpot動画はiframeタグで出力されてしまいます。JavaScriptに慣れている人ならこの時点で「これは実装できないかも…」と思ってしまうかもしれません。
なぜならセキュリティの都合上、JavaScriptでiframe内の操作を行うには多くの条件をクリアする必要があるからです。
ですがHubSpotはJavaScriptから動画プレイヤーの操作を簡単に行えるようにAPIを用意していました!
APIがあれば何でもできそう!と思い調べたところ再生と停止のみ操作可能でした。
注意点として、ここから説明する方法はドキュメントに載っていないため100%安全ではないことと、HubSpotは日々アップデートされるためいつか使えなくなる可能性はあるので注意してください。
本題の前にJavaScript内で通知されるMessageEventを理解する必要があります。
MessageEventは動画やフォームなどを使用したページで通知されます。
以下のコードをJavaScriptに埋め込むと通知が取得できます。
実際のデータは以下のようになります。
重要なデータは赤枠部分のdata:
の部分で、動画IDなど様々なデータが入っています。
判定として使用するデータはdata.type:"PLAYER_READY"
で、動画の再生準備が完了したという通知です。
MessageEventはこのようになっており、data.type
に様々な値が入ってきます。
そのため仕組みさえ分かってしまえばフォームなども同様の通知があるので特殊な処理を作ることが可能になります。
それでは次は本題の動画をJavaScriptで操作します。
先に答え合わせをするとHubSpot動画はhsVideoApi
を使用して操作できます。
まずは動画を管理しているプレイヤーインスタンスを取得するためにhsVideoApi.getPlayer()
関数を使用します。
第1引数に動画埋め込みIDが必要なので、前述のMessageEventで取得したdata.embedid
を入れます。
console.log(player)
の中身は以下のようになります。
これでプレイヤーインスタンスが取得できました。
そしてプレイヤーを操作するにはPrototype
オブジェクトのpostMessageToPlayer()
関数を使用します。
例えば、動画停止ボタンを別途用意して停止させる場合は以下のようになります。
ページをリロードすると画面上部に[動画再生]ボタンがされます。
ボタンを押すと動画は再生されたでしょうか?
postMessageToPlayer()
の第2引数に設定するstatus
の値は、ソースコードを見るといくつか用意されていて前述で述べたようにPLAYING
とPAUSED
だけしか設定できないようです。
ソースコードは https://static.hsappstatic.net/video-embed/ex/loader.js です。
テストとして以下の動画を用意しました。
[再生]か[停止]ボタンを押すとプレイヤーをコントロールできます。
この方法を使用すれば「動画エリアが画面内に入ったら自動再生」という機能が実装できます。
注意点としてHTML5の制約により初期設定で音声を[ミュート]にしておく必要があります。
Hublタグのvideo_player
を使用しているなら、プロパティのmuted
をTrue
にしましょう。
少しマニアックかもしれませんが、JavaScriptでHubSpot動画を操作する場合の役に立てばと思います。