js/remote-player.js
author veltr
Thu, 21 Mar 2013 18:48:12 +0100
changeset 11 9833f3e24105
child 21 007254e97333
permissions -rw-r--r--
Added video player
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11
9833f3e24105 Added video player
veltr
parents:
diff changeset
     1
function Player() {
9833f3e24105 Added video player
veltr
parents:
diff changeset
     2
	
9833f3e24105 Added video player
veltr
parents:
diff changeset
     3
	var events = {},
9833f3e24105 Added video player
veltr
parents:
diff changeset
     4
        self = this,
9833f3e24105 Added video player
veltr
parents:
diff changeset
     5
        loaded = false,
9833f3e24105 Added video player
veltr
parents:
diff changeset
     6
//        tvWindow,
9833f3e24105 Added video player
veltr
parents:
diff changeset
     7
        destination = document.location.href.replace(/^(https?:\/\/[^\/]+).*$/,'$1'),
9833f3e24105 Added video player
veltr
parents:
diff changeset
     8
        timeAtLoad,
9833f3e24105 Added video player
veltr
parents:
diff changeset
     9
        timeDelta = 0,
9833f3e24105 Added video player
veltr
parents:
diff changeset
    10
        timeOut,
9833f3e24105 Added video player
veltr
parents:
diff changeset
    11
        playAtLoad = false;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    12
    
9833f3e24105 Added video player
veltr
parents:
diff changeset
    13
    this.currentTime = 0;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    14
    this.duration = 0;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    15
    this.paused = true;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    16
    
9833f3e24105 Added video player
veltr
parents:
diff changeset
    17
	function receiveMessage(evt) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    18
		var dataparts = evt.data.split(":");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    19
		loaded = true;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    20
		switch(dataparts[0]) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    21
			case "loadedmetadata":
9833f3e24105 Added video player
veltr
parents:
diff changeset
    22
				self.duration = parseFloat(dataparts[1]);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    23
				self.setCurrentTime(self.currentTime);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    24
				if (!self.paused) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    25
					self.play();
9833f3e24105 Added video player
veltr
parents:
diff changeset
    26
				}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    27
			break;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    28
			case "play":
9833f3e24105 Added video player
veltr
parents:
diff changeset
    29
				self.paused = false;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    30
				self.trigger("play");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    31
			break;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    32
			case "pause":
9833f3e24105 Added video player
veltr
parents:
diff changeset
    33
				self.paused = true;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    34
				self.trigger("pause");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    35
			break;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    36
			case "timeupdate":
9833f3e24105 Added video player
veltr
parents:
diff changeset
    37
				self.currentTime = parseFloat(dataparts[1])
9833f3e24105 Added video player
veltr
parents:
diff changeset
    38
				self.trigger("timeupdate", self.currentTime);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    39
			break;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    40
			case "unload":
9833f3e24105 Added video player
veltr
parents:
diff changeset
    41
				loaded = false;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    42
				self.pause();
9833f3e24105 Added video player
veltr
parents:
diff changeset
    43
			break;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    44
		}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    45
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    46
	
9833f3e24105 Added video player
veltr
parents:
diff changeset
    47
    function updateTime() {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    48
    	clearTimeout(timeOut);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    49
        if (!loaded && !self.paused) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    50
            self.currentTime = (new Date().valueOf() / 1000 - timeDelta);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    51
            if (self.currentTime <= self.duration) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    52
                self.trigger("timeupdate", self.currentTime);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    53
                timeOut = setTimeout(updateTime, 100);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    54
            } else {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    55
                self.currentTime = self.duration;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    56
                self.pause();
9833f3e24105 Added video player
veltr
parents:
diff changeset
    57
            }
9833f3e24105 Added video player
veltr
parents:
diff changeset
    58
        }
9833f3e24105 Added video player
veltr
parents:
diff changeset
    59
    }
9833f3e24105 Added video player
veltr
parents:
diff changeset
    60
	
9833f3e24105 Added video player
veltr
parents:
diff changeset
    61
	function sendMessage(msg) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    62
		if (tvWindow) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    63
			tvWindow.postMessage(msg, destination);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    64
		}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    65
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    66
	
9833f3e24105 Added video player
veltr
parents:
diff changeset
    67
	$(".tv").click(function() {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    68
		tvWindow = window.open("tv.html","TV","width=640,height=360,toolbar=0,location=0,status=0,titlebar=0");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    69
		window.addEventListener("message",receiveMessage,false);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    70
	});
9833f3e24105 Added video player
veltr
parents:
diff changeset
    71
	
9833f3e24105 Added video player
veltr
parents:
diff changeset
    72
	this.setCurrentTime = function(t) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    73
		if (loaded) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    74
			sendMessage("timeupdate:" + t);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    75
		} else {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    76
        	timeDelta = (new Date().valueOf() / 1000 - t);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    77
			self.currentTime = t;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    78
			self.trigger("timeupdate",t);
9833f3e24105 Added video player
veltr
parents:
diff changeset
    79
		}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    80
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    81
	this.play = function() {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    82
		if (loaded) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    83
			sendMessage("play")
9833f3e24105 Added video player
veltr
parents:
diff changeset
    84
		} else {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    85
	        self.paused = false;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    86
	        timeDelta = (new Date().valueOf() / 1000 - self.currentTime)
9833f3e24105 Added video player
veltr
parents:
diff changeset
    87
	        self.trigger("play");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    88
	        updateTime();
9833f3e24105 Added video player
veltr
parents:
diff changeset
    89
		}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    90
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    91
	this.pause = function() {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    92
		if (loaded) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    93
			sendMessage("pause");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    94
		} else {
9833f3e24105 Added video player
veltr
parents:
diff changeset
    95
			self.paused = true;
9833f3e24105 Added video player
veltr
parents:
diff changeset
    96
			self.trigger("pause");
9833f3e24105 Added video player
veltr
parents:
diff changeset
    97
		}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    98
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
    99
	
9833f3e24105 Added video player
veltr
parents:
diff changeset
   100
	this.on = function(_event, _callback) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   101
	    if (typeof events[_event] === "undefined") {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   102
	        events[_event] = [];
9833f3e24105 Added video player
veltr
parents:
diff changeset
   103
	    }
9833f3e24105 Added video player
veltr
parents:
diff changeset
   104
	    events[_event].push(_callback);
9833f3e24105 Added video player
veltr
parents:
diff changeset
   105
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
   106
	this.off = function(_event, _callback) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   107
	    if (typeof events[_event] !== "undefined") {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   108
	        events[_event] = _(events[_event]).reject(function(_fn) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   109
	            return _fn === _callback;
9833f3e24105 Added video player
veltr
parents:
diff changeset
   110
	        });
9833f3e24105 Added video player
veltr
parents:
diff changeset
   111
	    }
9833f3e24105 Added video player
veltr
parents:
diff changeset
   112
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
   113
	this.trigger = function(_event, _data) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   114
	    var _list = this;
9833f3e24105 Added video player
veltr
parents:
diff changeset
   115
	    _(events[_event]).each(function(_callback) {
9833f3e24105 Added video player
veltr
parents:
diff changeset
   116
	        _callback.call(_list, _data);
9833f3e24105 Added video player
veltr
parents:
diff changeset
   117
	    });
9833f3e24105 Added video player
veltr
parents:
diff changeset
   118
	}
9833f3e24105 Added video player
veltr
parents:
diff changeset
   119
}