従来の Player API では、Flash Player が搭載されているデバイス(PC/Mac, 多くの Android)でプレーヤがロードされている場合(Flash モード)でのみ、JavaScript や ActionScript を使用してプレーヤを操作することができましたが、Smart Player API の登場により、Flash Player が搭載されていないスマートフォンでプレーヤがロードされている場合(HTML5モード)でも、JavaScript にてプレーヤを操作できるようになりました。
この Smart Player API は、プレーヤが Flash モードでロードされている場合でもHTML5モードでロードされている場合でも同一のコードでプレーヤを操作することはできますが、例えば、プレーヤ上の画像オブジェクトを操作できないなど、いくつかの制限があります。
そこで、Flash モードのプレーヤの場合には、機能が豊富な従来のプレーヤ API を使用し、HTML5 モードのプレーヤの場合にのみ Smart Player API を使用する方法、つまり。従来の Player API と Smart Player API をハイブリッドで使用する方法の記述例をご紹介します。
今回の例は、(実用的であるかどうかは別として) 下記を実現しています。
- Flash モードの場合のみ、プレーヤ上にロゴを表示する
- Flash モード、HTML5 モードの両方で、動画再生開始時にブラウザのデバッグコンソールに、動画の長さや再生状態が出力されるようにする
前提:
- Publishing モジュールにて、該当のプレーヤ設定で「JavaScript/Action Script API を有効にする」、「HTML5 配信を有効にする」の両方が有効になっている
- JavaScript 形式の公開コード(クイック動画公開でいうところの「Web サイト」用の公開コード)を使用している
コード:
「BrightcoveExperiences.js」を「BrightcoveExperiences_all.js」に変更し、従来の Flash Player API を使用できるようにします。
また、公開コードに、 <param name="templateLoadHandler" value="onTemplateLoad" /> 及び <param name="includeAPI" value="true" /> の 2 つのパラメータを付加し、Smart Player API を使用できるようにしています。
<div style="display:none"> </div> <script type="text/javascript" src="http://admin.brightcove.co.jp/js/BrightcoveExperiences_all.js"></script> <object id="myExperience" class="BrightcoveExperience"> <param name="bgcolor" value="#FFFFFF" /> <param name="width" value="486" /> <param name="height" value="412" /> <param name="playerID" value="81206537002" /> <param name="playerKey" value="AQ~~,AAAADkwKNwE~,-mz7MYjDY6ZN_9dqSz6mVHrWGmsnSbjl" /> <param name="isVid" value="true" /> <param name="dynamicStreaming" value="true" /> <param name="@videoPlayer" value="82034377002" /> <param name="includeAPI" value="true" /> <param name="templateLoadHandler" value="onTemplateLoad" /> </object>
下記のコードで、Smart Player API と従来の Player API のどちらを使用するかを決定します。
このコードにより、スマートフォンやタブレット端末からのアクセスであり、且つFlash Player がインストールされていない場合、Smart Player API を使用するようになります。
なお、コード内の「console.log」は、あくまでもデバッグを目的としたものであり、API と直接の関係はありません。
<script type="text/javascript">
brightcove.createExperiences();
var player;
var videoPlayer;
var experienceModule;
function onTemplateLoad(id) {
player = brightcove.api.getExperience(id);
//this means it is using smart player API
if (player) {
console.log("HTML5 モードのプレーヤです。");
} else {
player = brightcove.getExperience(id);
console.log("Flash モードのプレーヤです。");
}
experienceModule = player.getModule(brightcove.api.modules.APIModules.EXPERIENCE);
console.log(experienceModule);
var TEMPLATE_READY = brightcove.api.events.ExperienceEvent.TEMPLATE_READY;
if (player.type == brightcove.playerType.HTML) {
experienceModule.addEventListener(TEMPLATE_READY, onHTMLTemplateReady);
} else {
experienceModule.addEventListener(TEMPLATE_READY, onFlashTemplateReady);
}
}
従来の API を使用する場合のメソッドを下記のような形で用意します(メソッドやシンタックスも従来の API を使用したものにします)。
//////////////////////////
// FLASH モード向け
//////////////////////////
function onFlashTemplateReady(event) {
//画面右下にロゴを表示
experienceModule.getLayoutRoot().appendChild("<Image id='testLabel2' visible='true' scaleMode='noScale' x='320' y='320' width='159' height='38' source='http://dev.brightcove.co.jp/nori/blog/logo-brightcove.png' url='http://www.brightcove.com/' tooltip='Brightcove サイトへ移動する'/>");
var TEMPLATE_READY = brightcove.api.events.ExperienceEvent.TEMPLATE_READY;
experienceModule.removeEventListener(TEMPLATE_READY, onFlashTemplateReady);
console.log(event);
videoPlayer = player.getModule(brightcove.api.modules.APIModules.VIDEO_PLAYER);
console.log(videoPlayer);
videoPlayer.addEventListener(brightcove.api.events.MediaEvent.BEGIN, onFlashMediaBegin);
onGetIsPlayingResult(videoPlayer.isPlaying());
}
function onFlashMediaBegin(event) {
console.log(event);
onGetIsPlayingResult(videoPlayer.isPlaying());
onGetVideoDurationResult(videoPlayer.getVideoDuration(true));
}
Smart Player API を使用する場合のメソッドを下記のような形で用意します(メソッドやシンタックスもSmart Player API を使用したものにします)。
//////////////////////////
// HTML5 モード向け (Smart Player API を使用)
//////////////////////////
function onHTMLTemplateReady(event) {
var TEMPLATE_READY = brightcove.api.events.ExperienceEvent.TEMPLATE_READY;
experienceModule.removeEventListener(TEMPLATE_READY, onHTMLTemplateReady);
console.log(event);
videoPlayer = player.getModule(brightcove.api.modules.APIModules.VIDEO_PLAYER);
console.log(videoPlayer);
videoPlayer.addEventListener(brightcove.api.events.MediaEvent.BEGIN, onHTMLMediaBegin);
videoPlayer.getIsPlaying(onGetIsPlayingResult);
}
function onHTMLMediaBegin(event) {
console.log(event);
videoPlayer.getVideoDuration(true, onGetVideoDurationResult);
}
最後に、従来の API 及び Smart Player API 共通のメソッドを用意します。
//////////////////////////
// 共通
//////////////////////////
function onGetIsPlayingResult(playing) {
console.log("playing: " + playing);
}
function onGetVideoDurationResult(duration) {
console.log(duration);
}
</script>
上記のコードを実装することにより、Flash モードのプレーヤで動画を再生した場合のみ、プレーヤ右下にロゴが表示されるようになります。また、Flash モード及び HTML5 モードの両方において、ブラウザのデバッグコンソールに、API 実行時のログが出力されるようになります。
iOS では、[設定] > [Safari] > [詳細] にて、 「デバッグコンソール」を ON にすることで、ブラウザにデバッグコンソールが表示され、そこに、console.log でのログが出力されます。
Google Chrome では、[表示] > [開発/管理] > [デベロッパーツール]に、console.log でのログが出力されます。

新しいコメントを投稿する
コメント