sync/www/assets/js/player.js

824 lines
23 KiB
JavaScript
Raw Normal View History

2013-06-11 15:29:21 +00:00
/*
The MIT License (MIT)
Copyright (c) 2013 Calvin Montgomery
2013-06-11 15:29:21 +00:00
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
2013-06-11 15:29:21 +00:00
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
2013-06-11 15:29:21 +00:00
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
var VIMEO_FLASH = false;
function removeOld(replace) {
$("#sc_volume").remove();
replace = replace || $("<div/>");
var old = $("#ytapiplayer");
replace.insertBefore(old);
old.remove();
replace.attr("id", "ytapiplayer");
}
var YouTubePlayer = function (data) {
var self = this;
waitUntilDefined(window, "YT", function () {
2013-08-06 15:42:20 +00:00
waitUntilDefined(YT, "Player", function () {
removeOld();
self.paused = false;
self.videoId = data.id;
var wmode = USEROPTS.wmode_transparent ? "transparent" : "opaque";
self.player = new YT.Player("ytapiplayer", {
height: VHEIGHT,
width: VWIDTH,
videoId: data.id,
playerVars: {
autohide: 1, // Autohide controls
autoplay: 1, // Autoplay video
controls: 1, // Show controls
iv_load_policy: 3, // No annotations
rel: 0, // No related videos
wmode: wmode
},
2013-08-06 15:42:20 +00:00
events: {
onReady: function () {
},
onStateChange: function (ev) {
if(PLAYER.paused && ev.data != YT.PlayerState.PAUSED ||
!PLAYER.paused && ev.data == YT.PlayerState.PAUSED) {
self.paused = (ev.data == YT.PlayerState.PAUSED);
if(CLIENT.leader)
sendVideoUpdate();
}
else {
self.paused = (ev.data == YT.PlayerState.PAUSED);
}
if(CLIENT.leader && ev.data == YT.PlayerState.ENDED) {
socket.emit("playNext");
}
}
}
2013-08-06 15:42:20 +00:00
});
$("#ytapiplayer").css("border", "none");
});
});
2013-08-06 15:42:20 +00:00
self.load = function (data) {
if(self.player && self.player.loadVideoById) {
self.player.loadVideoById(data.id, data.currentTime);
if(VIDEOQUALITY)
self.player.setPlaybackQuality(VIDEOQUALITY);
self.videoId = data.id;
}
};
self.pause = function () {
if(self.player && self.player.pauseVideo)
self.player.pauseVideo();
};
self.play = function () {
if(self.player && self.player.playVideo)
self.player.playVideo();
};
self.isPaused = function (callback) {
if(self.player && self.player.getPlayerState) {
var state = self.player.getPlayerState();
callback(state != YT.PlayerState.PLAYING);
} else {
callback(false);
}
};
self.getTime = function (callback) {
if(self.player && self.player.getCurrentTime)
callback(self.player.getCurrentTime());
};
self.seek = function (time) {
if(self.player && self.player.seekTo)
self.player.seekTo(time, true);
};
};
var VimeoPlayer = function (data) {
var self = this;
waitUntilDefined(window, "$f", function () {
self.videoId = data.id;
self.init = function () {
var iframe = $("<iframe/>");
removeOld(iframe);
iframe.attr("width", VWIDTH);
iframe.attr("height", VHEIGHT);
var prto = location.protocol;
iframe.attr("src", prto+"//player.vimeo.com/video/"+self.videoId+"?api=1&player_id=ytapiplayer");
iframe.attr("webkitAllowFullScreen", "");
iframe.attr("mozallowfullscreen", "");
iframe.attr("allowFullScreen", "");
2013-08-06 15:42:20 +00:00
if(USEROPTS.wmode_transparent)
iframe.attr("wmode", "transparent");
iframe.css("border", "none");
$f(iframe[0]).addEvent("ready", function () {
self.player = $f(iframe[0]);
self.player.api("play");
self.player.addEvent("finish", function () {
if(CLIENT.leader) {
socket.emit("playNext");
}
});
self.player.addEvent("pause", function () {
self.paused = true;
if(CLIENT.leader)
sendVideoUpdate();
});
self.player.addEvent("play", function () {
self.paused = false;
if(CLIENT.leader)
sendVideoUpdate();
});
}.bind(self));
};
self.init();
self.load = function (data) {
self.videoId = data.id;
self.init();
};
self.pause = function () {
if(self.player && self.player.api)
self.player.api("pause");
};
self.play = function () {
if(self.player && self.player.api)
self.player.api("play");
};
self.isPaused = function (callback) {
callback(self.paused);
};
self.getTime = function (callback) {
if(self.player && self.player.api) {
// Vimeo api returns time as a string because fuck logic
self.player.api("getCurrentTime", function (time) {
callback(parseFloat(time));
});
}
};
self.seek = function(time) {
if(self.player && self.player.api)
self.player.api("seekTo", time);
};
2013-06-11 15:29:21 +00:00
});
};
2013-06-11 15:29:21 +00:00
var VimeoFlashPlayer = function (data) {
var self = this;
self.videoId = data.id;
self.init = function () {
removeOld();
var prto = location.protocol;
var url = prto+"//vimeo.com/moogaloop.swf?clip_id="+self.videoId;
url += "&" + [
"server=vimeo.com",
"api=2",
"show_title=0",
"show_byline=0",
"show_portrait=0",
"fullscreen=1",
"loop=0"
].join("&");
var flashvars = {
api: 2,
player_id: "ytapiplayer"
};
var params = {
allowfullscreen: true,
2013-08-06 15:42:20 +00:00
allowScriptAccess: "always",
wmode: USEROPTS.wmode_transparent ? "transparent" : undefined
};
swfobject.embedSWF(url,
"ytapiplayer",
VWIDTH,
VHEIGHT,
"9.0.0",
"expressInstall.swf",
flashvars,
params);
self.player = $("#ytapiplayer")[0];
waitUntilDefined(self.player, "api_addEventListener", function () {
self.player.api_addEventListener("ready", function () {
self.player.api_play();
2013-07-12 20:34:55 +00:00
self.player.api_addEvent("finish", function () {
if(CLIENT.leader)
socket.emit("playNext");
});
2013-06-11 15:29:21 +00:00
self.player.api_addEvent("pause", function () {
PLAYER.paused = true;
if(CLIENT.leader)
sendVideoUpdate();
});
2013-06-11 15:29:21 +00:00
self.player.api_addEvent("play", function () {
PLAYER.paused = false;
if(CLIENT.leader)
sendVideoUpdate();
});
});
2013-06-11 15:29:21 +00:00
});
};
2013-06-11 15:29:21 +00:00
self.init();
2013-06-11 15:29:21 +00:00
self.load = function (data) {
self.videoId = data.id;
self.init();
};
2013-06-11 15:29:21 +00:00
self.pause = function () {
if(self.player && self.player.api_pause)
self.player.api_pause();
};
2013-06-11 15:29:21 +00:00
self.play = function () {
if(self.player && self.player.api_play)
self.player.api_play();
};
2013-06-11 15:29:21 +00:00
self.isPaused = function (callback) {
callback(self.paused);
};
2013-06-11 15:29:21 +00:00
self.getTime = function (callback) {
if(self.player && self.player.api_getCurrentTime) {
var t = parseFloat(self.player.api_getCurrentTime());
callback(t);
}
};
2013-07-12 20:34:55 +00:00
self.seek = function (time) {
if(self.player.api_seekTo);
self.player.api_seekTo(time);
};
};
2013-06-11 15:29:21 +00:00
var DailymotionPlayer = function (data) {
var self = this;
waitUntilDefined(window, "DM", function () {
removeOld();
self.videoId = data.id;
self.player = DM.player("ytapiplayer", {
video: data.id,
2013-08-06 02:55:11 +00:00
width: parseInt(VWIDTH, 10),
height: parseInt(VHEIGHT, 10),
params: { autoplay: 1 }
});
2013-06-11 15:29:21 +00:00
self.player.addEventListener("apiready", function (e) {
self.player.addEventListener("ended", function (e) {
if(CLIENT.leader) {
socket.emit("playNext");
}
});
self.player.addEventListener("pause", function (e) {
PLAYER.paused = true;
if(CLIENT.leader)
sendVideoUpdate();
});
self.player.addEventListener("playing", function (e) {
PLAYER.paused = false;
if(CLIENT.leader)
sendVideoUpdate();
});
2013-06-11 15:29:21 +00:00
});
});
2013-06-11 15:29:21 +00:00
self.load = function (data) {
self.videoId = data.id;
if(self.player && self.player.api)
self.player.api("load", data.id);
};
2013-06-11 15:29:21 +00:00
self.pause = function () {
if(self.player && self.player.api)
self.player.api("pause");
};
2013-06-11 15:29:21 +00:00
self.play = function () {
if(self.player && self.player.api)
self.player.api("play");
};
2013-06-11 15:29:21 +00:00
self.isPaused = function (callback) {
callback(self.paused);
};
2013-07-12 20:34:55 +00:00
self.getTime = function (callback) {
if(self.player)
callback(self.player.currentTime);
};
2013-06-11 15:29:21 +00:00
self.seek = function (seconds) {
if(self.player && self.player.api)
self.player.api("seek", seconds);
};
};
2013-06-11 15:29:21 +00:00
var SoundcloudPlayer = function (data) {
var self = this;
self.videoId = data.id;
waitUntilDefined(window, "SC", function () {
unfixSoundcloudShit();
var iframe = $("<iframe/>");
removeOld(iframe);
2013-06-11 15:29:21 +00:00
iframe.attr("id", "ytapiplayer");
iframe.attr("src", "https://w.soundcloud.com/player/?url="+self.videoId);
iframe.css("width", "100%").attr("height", "166");
iframe.css("border", "none");
2013-06-11 15:29:21 +00:00
var volslider = $("<div/>").attr("id", "sc_volume")
.insertAfter(iframe);
volslider.slider({
range: "min",
value: 100,
stop: function (event, ui) {
self.player.setVolume(ui.value);
}
});
self.player = SC.Widget("ytapiplayer");
2013-06-11 15:29:21 +00:00
self.player.bind(SC.Widget.Events.READY, function () {
self.player.load(self.videoId, { auto_play: true });
2013-06-11 15:29:21 +00:00
self.player.bind(SC.Widget.Events.PAUSE, function () {
PLAYER.paused = true;
if(CLIENT.leader)
sendVideoUpdate();
});
2013-06-11 15:29:21 +00:00
self.player.bind(SC.Widget.Events.PLAY, function () {
PLAYER.paused = false;
if(CLIENT.leader)
sendVideoUpdate();
});
2013-06-11 15:29:21 +00:00
self.player.bind(SC.Widget.Events.FINISH, function () {
if(CLIENT.leader) {
socket.emit("playNext");
}
});
}.bind(self));
});
2013-06-11 15:29:21 +00:00
self.load = function (data) {
self.videoId = data.id;
if(self.player && self.player.load)
self.player.load(data.id, { auto_play: true });
};
2013-06-11 15:29:21 +00:00
self.pause = function () {
if(self.player && self.player.pause)
self.player.pause();
};
2013-06-11 15:29:21 +00:00
self.play = function () {
if(self.player && self.player.play)
self.player.play();
};
2013-06-11 15:29:21 +00:00
self.isPaused = function (callback) {
if(self.player && self.player.isPaused)
self.player.isPaused(callback);
else
callback(false);
};
2013-07-12 20:34:55 +00:00
self.getTime = function (callback) {
if(self.player && self.player.getPosition) {
self.player.getPosition(function (pos) {
callback(pos / 1000);
});
}
};
2013-06-11 15:29:21 +00:00
self.seek = function (seconds) {
if(self.player && self.player.seekTo)
self.player.seekTo(seconds * 1000);
};
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var LivestreamPlayer = function (data) {
removeOld();
var self = this;
self.videoId = data.id;
self.init = function () {
var flashvars = { channel: self.videoId };
var params = { AllowScriptAccess: "always" };
var prto = location.protocol;
2013-08-06 02:46:56 +00:00
swfobject.embedSWF(
prto+"//cdn.livestream.com/chromelessPlayer/v20/playerapi.swf",
2013-08-06 02:46:56 +00:00
"ytapiplayer",
VWIDTH, VHEIGHT,
"9.0.0",
"expressInstall.swf",
flashvars,
params
);
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.init();
self.load = function(data) {
self.videoId = data.id;
self.init();
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.pause = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.seek = function () { };
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var TwitchTVPlayer = function (data) {
removeOld();
var self = this;
self.videoId = data.id;
self.init = function () {
var url = "http://www.twitch.tv/widgets/live_embed_player.swf?channel="+self.videoId;
var params = {
allowFullScreen: "true",
allowScriptAccess: "always",
allowNetworking: "all",
movie: "http://www.twitch.tv/widgets/live_embed_player.swf",
id: "live_embed_player_flash",
flashvars: "hostname=www.twitch.tv&channel="+self.videoId+"&auto_play=true&start_volume=100"
};
swfobject.embedSWF(url,
"ytapiplayer",
VWIDTH, VHEIGHT,
"8",
null, null,
params,
{}
);
};
waitUntilDefined(window, "swfobject", function () {
self.init();
});
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.load = function (data) {
self.videoId = data.id;
self.init();
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.pause = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
self.seek = function () { };
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var JustinTVPlayer = function (data) {
removeOld();
var self = this;
self.videoId = data.id;
self.init = function () {
var prto = location.protocol;
2013-08-06 02:46:56 +00:00
var url = "http://www.justin.tv/widgets/live_embed_player.swf?channel="+self.videoId;
var params = {
allowFullScreen: "true",
allowScriptAccess: "always",
allowNetworking: "all",
movie: "http://www.justin.tv/widgets/live_embed_player.swf",
id: "live_embed_player_flash",
flashvars: "hostname=www.justin.tv&channel="+self.videoId+"&auto_play=true&start_volume=100"
};
swfobject.embedSWF(url,
"ytapiplayer",
VWIDTH, VHEIGHT,
"8",
null, null,
params,
{}
);
};
2013-06-11 15:29:21 +00:00
waitUntilDefined(window, "swfobject", function () {
self.init();
});
2013-08-06 02:46:56 +00:00
self.load = function (data) {
self.videoId = data.id;
self.init();
};
self.pause = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.seek = function () { };
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var RTMPPlayer = function (data) {
removeOld();
var self = this;
self.videoId = data.id;
self.init = function () {
var prto = location.protocol;
var url = prto+"//fpdownload.adobe.com/strobe/FlashMediaPlayback_101.swf";
2013-08-06 02:46:56 +00:00
var src = encodeURIComponent(self.videoId);
var params = {
allowFullScreen: "true",
allowScriptAccess: "always",
allowNetworking: "all",
wMode: "direct",
movie: prto+"//fpdownload.adobe.com/strobe/FlashMediaPlayback_101.swf",
2013-08-06 02:46:56 +00:00
flashvars: "src="+src+"&streamType=live&autoPlay=true"
2013-06-11 15:29:21 +00:00
};
2013-08-06 02:46:56 +00:00
swfobject.embedSWF(url,
"ytapiplayer",
VWIDTH, VHEIGHT,
"8",
null, null,
params,
{}
);
};
2013-06-11 15:29:21 +00:00
waitUntilDefined(window, "swfobject", function () {
self.init();
});
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.load = function (data) {
self.videoId = data.id;
self.init();
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.pause = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.seek = function () { };
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var JWPlayer = function (data) {
var self = this;
self.videoId = data.id;
self.init = function () {
removeOld();
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
jwplayer("ytapiplayer").setup({
file: self.videoId,
width: VWIDTH,
height: VHEIGHT,
autostart: true
});
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
jwplayer().onPlay(function() {
self.paused = false;
if(CLIENT.leader)
sendVideoUpdate();
});
jwplayer().onPause(function() {
self.paused = true;
if(CLIENT.leader)
sendVideoUpdate();
});
jwplayer().onComplete(function() {
socket.emit("playNext");
});
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
waitUntilDefined(window, "jwplayer", function () { self.init(); });
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.load = function (data) {
self.videoId = data.id;
self.init();
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.pause = function () {
if(jwplayer)
jwplayer().pause(true);
};
self.play = function () {
if(jwplayer)
jwplayer().play(true);
};
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function (callback) {
if(jwplayer)
callback(jwplayer().getState() !== "PLAYING");
};
self.getTime = function (callback) {
2013-06-11 15:29:21 +00:00
// Only return time for non-live media
2013-08-06 02:46:56 +00:00
if(jwplayer && jwplayer().getDuration() != -1) {
2013-06-11 15:29:21 +00:00
callback(jwplayer().getPosition());
}
2013-08-06 02:46:56 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.seek = function (time) {
if(jwplayer)
jwplayer().seek(time);
};
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var UstreamPlayer = function (data) {
var self = this;
self.videoId = data.id;
self.init = function () {
var iframe = $("<iframe/>");
removeOld(iframe);
iframe.attr("width", VWIDTH);
iframe.attr("height", VHEIGHT);
var prto = location.protocol;
iframe.attr("src", prto+"//www.ustream.tv/embed/"+self.videoId+"?v=3&wmode=direct");
2013-08-06 02:46:56 +00:00
iframe.attr("frameborder", "0");
iframe.attr("scrolling", "no");
iframe.css("border", "none");
};
self.init();
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.load = function (data) {
self.videoId = data.id;
self.init();
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.pause = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
self.seek = function () { };
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var ImgurPlayer = function (data) {
var self = this;
self.init = function () {
var iframe = $("<iframe/>");
removeOld(iframe);
iframe.attr("width", VWIDTH);
iframe.attr("height", VHEIGHT);
var prto = location.protocol;
iframe.attr("src", prto+"//imgur.com/a/"+self.videoId+"/embed");
console.log(prto);
2013-08-06 02:46:56 +00:00
iframe.attr("frameborder", "0");
iframe.attr("scrolling", "no");
iframe.css("border", "none");
};
self.init();
self.load = function (data) {
self.videoId = data.id;
2013-08-06 02:55:11 +00:00
self.init();
2013-08-06 02:46:56 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.pause = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-07-12 20:34:55 +00:00
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
self.seek = function () { };
2013-08-06 02:55:11 +00:00
};
2013-06-11 15:29:21 +00:00
2013-08-06 02:46:56 +00:00
var CustomPlayer = function (data) {
var self = this;
self.videoId = data.id;
self.init = function () {
removeOld();
var div = $("#ytapiplayer");
div.attr("id", "");
div.append(self.videoId);
2013-08-06 02:55:11 +00:00
self.player = div.find("iframe");
2013-08-06 02:46:56 +00:00
if(self.player.length === 0) self.player = div.find("object");
if(self.player.length === 0) self.player = div;
self.player.attr("id", "ytapiplayer");
self.player.attr("width", VWIDTH);
self.player.attr("height", VHEIGHT);
};
2013-08-06 02:55:11 +00:00
self.init();
2013-08-06 02:46:56 +00:00
self.load = function (data) {
2013-08-06 04:07:54 +00:00
self.videoId = data.id;
2013-08-06 02:55:11 +00:00
self.init();
2013-08-06 02:46:56 +00:00
};
2013-08-06 02:46:56 +00:00
self.pause = function () { };
2013-08-06 02:46:56 +00:00
self.play = function () { };
2013-08-06 02:46:56 +00:00
self.isPaused = function () { };
2013-08-06 02:46:56 +00:00
self.getTime = function () { };
self.seek = function () { };
};
2013-08-06 02:46:56 +00:00
function handleMediaUpdate(data) {
// Media change
if(data.id && data.id !== PLAYER.videoId) {
if(data.currentTime < 0)
2013-06-11 15:29:21 +00:00
data.currentTime = 0;
2013-08-06 02:46:56 +00:00
PLAYER.load(data);
PLAYER.play();
2013-06-11 15:29:21 +00:00
}
2013-08-06 02:46:56 +00:00
// Don't synch if leader or synch disabled
if(CLIENT.leader || !USEROPTS.synch)
2013-06-11 15:29:21 +00:00
return;
2013-08-06 02:46:56 +00:00
// Handle pause/unpause
2013-06-11 15:29:21 +00:00
if(data.paused) {
2013-08-06 02:46:56 +00:00
PLAYER.seek(data.currentTime);
PLAYER.pause();
2013-08-06 02:55:11 +00:00
} else {
2013-08-06 02:46:56 +00:00
PLAYER.isPaused(function (paused) {
2013-08-06 02:55:11 +00:00
if(paused)
PLAYER.play();
2013-08-06 02:46:56 +00:00
});
2013-06-11 15:29:21 +00:00
}
2013-08-06 02:46:56 +00:00
// Handle time change
PLAYER.getTime(function (seconds) {
2013-06-11 15:29:21 +00:00
var time = data.currentTime;
var diff = time - seconds || time;
if(diff > USEROPTS.sync_accuracy) {
2013-08-06 02:46:56 +00:00
PLAYER.seek(time);
2013-08-06 02:55:11 +00:00
} else if(diff < -USEROPTS.sync_accuracy) {
2013-08-06 02:46:56 +00:00
// Don't synch all the way back, causes buffering problems
// because for some dumb reason YouTube erases the buffer
// when you seek backwards
PLAYER.seek(time + 1);
2013-06-11 15:29:21 +00:00
}
2013-08-06 02:46:56 +00:00
});
2013-06-11 15:29:21 +00:00
}
2013-08-06 03:25:16 +00:00
var constructors = {
"yt": YouTubePlayer,
"vi": VIMEO_FLASH ? VimeoFlashPlayer : VimeoPlayer,
"dm": DailymotionPlayer,
"sc": SoundcloudPlayer,
"li": LivestreamPlayer,
"tw": TwitchTVPlayer,
"jt": JustinTVPlayer,
"us": UstreamPlayer,
"rt": RTMPPlayer,
2013-08-06 03:55:46 +00:00
"jw": JWPlayer,
2013-08-06 03:25:16 +00:00
"im": ImgurPlayer,
"cu": CustomPlayer
};
function loadMediaPlayer(data) {
if(data.type in constructors) {
PLAYER = new constructors[data.type](data);
PLAYER.type = data.type;
}
}