JavaScriptでJW Playerを制御する

忘れないうちにメモ。JW PlayerはFlashを使った動画・音声プレーヤー。

下ごしらえ

まず window.playerReady という関数を作りプレーヤーのオブジェクトを取得する。

var player;
window.playerReady = function(obj) {
    player = document.getElementById(obj.id);
};

こうやっておいて、player に対していろいろと操作を行う。

イベントを受け取る

プレーヤーに対するイベントリスナは次の関数で指定する。関数はグローバルから呼べないといけない。

  • player.addControllerListener(EVENT, funcName)
  • player.addModelListener(EVENT, funcName)
  • player.addViewListener(EVENT, funcName)

イベントのパラメータは第1引数に連想配列として渡される。

function muteTracker(obj) { alert('the new mute state is: '+obj.state); };
player.addControllerListener("MUTE","muteTracker");

イベントの一覧はココ!

EVENTにはイベント一覧にある ControllerEvent.なんとか とか ModelEvent.なんとか とか ViewEvent.なんとか とかの大文字の部分を指定する。
(3月25日追記) Firefox 3.5において、イベントリスナの中でエラーが起こってもエラーコンソールやFirebugのコンソールに表示されません。そこで実際に処理を行う関数を別に作り、setTimeout を使って呼び出すことで対処できます。

イベントを送る

これで送れる。パラメータは文字列で渡すこと!

  • player.sendEvent(EVENT, param)

サンプルコード(今つくってるやつ)

// gbuc-slidwshow.js
// requires: jquery

var GBUCSlideshow = (function() {
    var app;
    var player;
    
// Member
    
return {
    init: function() {
        app = this;
        
        // 仮
        initPlayer({ file: 'http://gbuc.net/uploads/exphotos/12667.mp3', duration: '2:58' });
    },
    
    playerReady: function(obj) {
        // この player に対して操作を行う
        // player.getConfig() でさまざまな情報を得られる
        player = document.getElementById(obj.id);
        // Controller/Model/View に対するイベントリスナを設定
        // グローバルから呼べないといけない
        player.addModelListener("STATE", "GBUCSlideshow.stateChange");
        // player.sendEvent(EVENT, param) で
        setTimeout(function(){ player.sendEvent("SEEK", "150"); }, 5000);
    },
    
    stateChange: function(obj) {
        console.log(obj.oldstate, obj.newstate);
        if (obj.newstate == "COMPLETED") {
            console.log("Next song...");
        }
    }
};

// Static

    function initPlayer(param) {
        var so = new SWFObject('/common/jwplayer.swf','mpl','320','24','9');
        so.addParam('allowfullscreen','false');
        so.addParam('allowscriptaccess','always');
        so.addParam('wmode','opaque');
        so.addVariable('duration',param.duration);
        so.addVariable('file',param.file);
        so.addVariable('autostart','true');
        so.write('player');
    }
})();

$(function() {
    GBUCSlideshow.init();
    
    window.playerReady = function(obj) { GBUCSlideshow.playerReady(obj); };
});