/home/techb158/ileadtechnology.com/public/content/java
Edit: /home/techb158/ileadtechnology.com/public/content/java/FWDUVPCC.js (19248B)
/* FWDUVPCC */
(function (window){
var FWDUVPCC = function(
controller
){
var _s = this;
var prototype = FWDUVPCC.prototype;
var main = controller.prt;
_s.session;
_s.remotePlayer;
_s.currentTime;
_s.controller_do = controller;
_s.mediaStatus;
_s.isReady;
_s.playerState;
_s.isSeeking_bl;
const PLAYER_STATE = {
IDLE: 'IDLE',
BUFFERING: 'BUFFERING',
LOADED: 'LOADED',
PLAYING: 'PLAYING',
PAUSED: 'PAUSED'
};
//##########################################//
/* initialize */
//##########################################//
_s.init = function(){
_s.isReady = false;
var count = 0;
var loadCastInterval = setInterval(function(){
if(window['chrome'] && window['chrome']['cast'] && window['chrome']['cast'].isAvailable) {
console.log('Chormecast API has loaded.');
clearInterval(loadCastInterval);
_s.initAPI();
}
}, 1000);
_s.initializeController();
_s.setupCastingScreen();
};
//##########################################//
/* initialize controller */
//##########################################//
_s.initializeController = function(){
//controller.addListener(FWDUVPController.CAST, _s.startCastingHandler);
controller.addListener(FWDUVPController.UNCAST, _s.stopCastingHandler);
}
_s.stopCastingHandler = function(){
_s.stopCasting();
}
//##########################################//
/* initialize API */
//##########################################//
_s.initAPI = function(){
var options = {};
_s.isReady = true;
options.receiverApplicationId = chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID;
options.autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED;
cast.framework.CastContext.getInstance().setOptions(options);
FWDUVPlayer.keyboardCurInstance = main;
_s.setupCastButton();
_s.checkButtonState();
_s.setupPlayerController();
}
//##########################################//
/* Setup casting screen*/
//##########################################//
_s.setupCastingScreen = function(){
_s.cs_do = new FWDUVPDisplayObject("div");
_s.cs_do.hasTransform3d_bl = false;
_s.cs_do.hasTransform2d_bl = false;
_s.cs_do.setBackfaceVisibility();
_s.cs_do.getStyle().fontFamily = "Arial";
_s.cs_do.getStyle().fontSize= "12px";
_s.cs_do.getStyle().letterSpacing = '0.6px';
_s.cs_do.getStyle().whiteSpace= "nowrap";
_s.cs_do.getStyle().textAlign = "center";
_s.cs_do.getStyle().padding = "10px";
_s.cs_do.getStyle().paddingLeft = "12px";
_s.cs_do.getStyle().paddingRight = "12px";
_s.cs_do.setX(10);
_s.cs_do.setY(10);
_s.cs_do.getStyle().background = "#000000BB";
_s.cs_do.getStyle().color = "#FFF";
_s.cs_do.setInnerHTML('
Connecting to Chromecast');
}
//##########################################//
/* Setup cast button */
//##########################################//
_s.setupCastButton = function(){
_s.btn = document.createElement("google-cast-launcher");
_s.btn.style.display = 'block';
_s.btn.style.position = 'absolute';
_s.btn.style.opacity = 0;
controller.ccBtn_do.screen.removeEventListener("toustart", controller.ccBtn_do.onDown);
controller.ccBtn_do.screen.removeEventListener("touchend", controller.ccBtn_do.onMouseUp);
controller.ccBtn_do.screen.appendChild(_s.btn);
setTimeout(function(){
_s.btn.style.display = 'block';
}, 500);
}
FWDUVPCC.disableButton = function(){
if(_s.btn) _s.btn.style.width = '0';
if(_s.controller_do && _s.controller_do.ccBtn_do) _s.controller_do.ccBtn_do.disable();
}
FWDUVPCC.enableButton = function(){
if(_s.btn) _s.btn.style.width = '100%';
if(_s.controller_do && _s.controller_do.ccBtn_do) _s.controller_do.ccBtn_do.enable();
}
_s.checkButtonState = function(){
if(!_s.isReady) return;
if(main.videoType_str != FWDUVPlayer.VIDEO && main.videoType_str != FWDUVPlayer.MP3 && main.videoType_str != FWDUVPlayer.HLS_JS){
_s.controller_do.removeCCButton();
_s.stopCasting();
}else{
_s.controller_do.addCCButton();
if(_s.isCasting){
_s.mainPlaying_bl = main.isPlaying_bl = false;
}
main.curTimeInSecond = 0;
if(_s.isCasting) _s.loadMedia();
}
}
_s.isValidFormat = function(){
if(main.videoType_str == FWDUVPlayer.VIDEO || main.videoType_str == FWDUVPlayer.MP3 || main.videoType_str == FWDUVPlayer.HLS_JS) return true;
return false;
}
//##########################################//
/* Setup remotePlayer controller */
//##########################################//
_s.setupPlayerController = function(){
_s.remotePlayer = new cast.framework.RemotePlayer();
_s.remotePlayerController = new cast.framework.RemotePlayerController(_s.remotePlayer);
_s.setVolume();
_s.remotePlayerController.addEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
function(e){
if(_s.remotePlayer.isConnected){
controller.ccBtn_do.setButtonState(0);
main.main_do.addChild(_s.cs_do);
_s.mainPlaying_bl = main.isPlaying_bl;
main.stop();
_s.loadMedia();
_s.isCasting = main.isCasting = true;
}else{
_s.btn.style.left = '0';
controller.ccBtn_do.setButtonState(1);
main.curTimeInSecond = 0;
main.isCasting = false;
_s.controller_do.disableSubtitleButton();
if(_s.playerState == PLAYER_STATE.PLAYING && !_s.isMbl
&& _s.videoSource == main.finalVideoPath_str){
var curTime;
curTime = FWDUVPUtils.formatTime(_s.currentTime);
if(curTime.length == 5) curTime = "00:" + curTime;
if(curTime.length == 7) curTime = "0" + curTime;
main.castStartAtTime = curTime;
_s.stop();
main.play();
}else{
_s.stop();
main.castStartAtTime = undefined;
}
try{
main.main_do.removeChild(_s.cs_do);
}catch(e){}
_s.isStopped_bl = false;
_s.isCasting = false;
_s.playerState = undefined;
console.log('Disconnected');
}
}
);
}
_s.play = function(){
if(_s.playerState == PLAYER_STATE.IDLE){
_s.loadMedia(true);
}else if(_s.remotePlayer.isPaused) {
_s.remotePlayerController.playOrPause();
}
};
_s.pause = function () {
_s.playerState = PLAYER_STATE.PAUSED;
if(!_s.remotePlayer.isPaused) {
_s.remotePlayerController.playOrPause();
}else{
_s.playerState = PLAYER_STATE.PLAYING;
}
};
_s.allowToggle = true;
_s.togglePlayPause = function () {
//bug stops the events to be received
if(_s.allowToggle){
_s.remotePlayerController.playOrPause();
}
};
_s.stop = function(){
if(!_s.isCasting) return;
clearTimeout(_s.setLoopId_to);
clearTimeout(_s.loadMediLoopId_to);
_s.stopToCheckPlaybackComplete();
_s.remotePlayerController.playOrPause();
_s.remotePlayerController.stop();
_s.controller_do.showPlayButton();
_s.controller_do.disableMainScrubber()
if(_s.controller_do.ttm) _s.controller_do.ttm.hide();
if(_s.controller_do.thumbnailsPreview_do) _s.controller_do.thumbnailsPreview_do.hide();
if(_s.controller_do.rewindButton_do) _s.controller_do.rewindButton_do.disable();
if(_s.controller_do.downloadButton_do) _s.controller_do.downloadButton_do.disable();
_s.isStopped_bl = true;
if(main.lrgPlayBtn) main.lrgPlayBtn.show();
_s.playerState = PLAYER_STATE.IDLE;
main.curTimeInSecond = 0;
_s.updateDisplay();
}
// Scrubb
_s.startToScrub = function(){
_s.isSeeking_bl = false;
_s.allowToggle = false;
}
_s.stopToScrub = function(){
_s.isSeeking_bl = false;
_s.allowToggle = false;
clearTimeout(_s.allowToToggle);
_s.allowToToggle = setTimeout(function(){
_s.allowToggle = true;
},2000);
}
_s.seek = function(percent){
seekTime = Math.round(percent * _s.getDuration());
_s.remotePlayer.currentTime = seekTime;
_s.remotePlayerController.seek();
}
_s.getCurrentTime = function () {
return Math.round(_s.remotePlayer.currentTime);
};
_s.getDuration = function () {
return Math.round(_s.remotePlayer.duration);
};
_s.scrubbAtTime = function(duration){
_s.allowToggle = false;
clearTimeout(_s.allowToToggle);
_s.allowToToggle = setTimeout(function(){
_s.allowToggle = true;
},2000);
_s.remotePlayer.currentTime = duration;
_s.remotePlayerController.seek();
}
// Volume
_s.setVolume = function(){
_s.remotePlayer.volumeLevel = main.volume;
_s.remotePlayerController.setVolumeLevel();
}
//##########################################//
/* Setup remove player events */
//##########################################//
_s.addPlayerEvents = function(){
// Triggers when the media info or the remotePlayer state changes
_s.remotePlayerController.addEventListener(
cast.framework.RemotePlayerEventType.MEDIA_INFO_CHANGED,
function(event) {
var session = cast.framework.CastContext.getInstance().getCurrentSession();
if (!session) {
_s.mediaInfo = null;
_s.updateDisplay();
return;
}
var media = session.getMediaSession();
if (!media) {
_s.mediaInfo = null;
_s.updateDisplay();
return;
}
_s.mediaInfo = media.media;
if(media.playerState == PLAYER_STATE.PAUSED) {
_s.changePlayPauseState(PLAYER_STATE.PAUSED);
}else if(media.playerState == PLAYER_STATE.PLAYING){
_s.changePlayPauseState(PLAYER_STATE.PLAYING);
}
if(_s.isStopped_bl) _s.updateDisplay();
}
);
_s.remotePlayerController.addEventListener(
cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED,
function(){
if(_s.remotePlayer.isPaused) {
_s.changePlayPauseState(PLAYER_STATE.PAUSED);
}else if (_s.playerState !== PLAYER_STATE.PLAYING) {
_s.changePlayPauseState(PLAYER_STATE.PLAYING);
}
}
);
_s.changePlayPauseState = function(state){
if(state == PLAYER_STATE.PAUSED) {
_s.controller_do.showPlayButton();
if(main.lrgPlayBtn) main.lrgPlayBtn.show();
_s.playerState = PLAYER_STATE.PAUSED;
}else if (_s.playerState !== PLAYER_STATE.PLAYING) {
_s.controller_do.showPauseButton();
if(main.lrgPlayBtn) main.lrgPlayBtn.hide();
_s.playerState = PLAYER_STATE.PLAYING;
_s.controller_do.enableMainScrubber();
if(_s.controller_do.rewindButton_do) _s.controller_do.rewindButton_do.enable();
if(_s.controller_do.downloadButton_do) _s.controller_do.downloadButton_do.enable();
_s.startToCheckPlaybackComplete();
_s.setLoopId_to = setTimeout(function(){
_s.allowToLoop = true;
}, 1000);
}
if(!_s.isStopped_bl) _s.updateDisplay();
}
// Update time
_s.remotePlayerController.addEventListener(
cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED,
function (event){
var time = FWDUVPUtils.formatTime(_s.getCurrentTime()) + "/" + FWDUVPUtils.formatTime(_s.getDuration());
_s.controller_do.updateTime(time);
if(_s.getCurrentTime()) _s.currentTime = _s.getCurrentTime();
if(!_s.isSeeking_bl){
_s.controller_do.updateMainScrubber(_s.getCurrentTime()/_s.getDuration());
}
}
);
// Update volume
_s.remotePlayerController.addEventListener(
cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED,
function(){
_s.controller_do.updateVolume(_s.remotePlayer.volumeLevel);
}
);
// Play complete handler
_s.startToCheckPlaybackComplete = function(){
_s.stopToCheckPlaybackComplete();
_s.pbc_int = setInterval(_s.checkPlaybackComplete);
}
_s.stopToCheckPlaybackComplete = function(){
clearInterval(_s.pbc_int);
}
_s.checkPlaybackComplete = function(){
if(_s.getDuration() > 0) _s.isStopped_bl = false;
if(_s.isSeeking_bl) return;
if(_s.getCurrentTime() == _s.getDuration() || _s.getDuration() == 0){
if(!_s.isStopped_bl){
_s.stop();
if(_s.allowToLoop){
if((main._d.stopVideoWhenPlayComplete_bl || main._d.playlist_ar.length == 1)
|| (main._d.stopAfterLastVideoHasPlayed_bl && main._d.playlist_ar.length - 1 == main.id)){
_s.stop();
}else if(main._d.shuffle_bl){
main.playShuffle();
}else if(main._d.loop_bl){
_s.loadMediLoopId_to = setTimeout(function(){
_s.loadMedia(true);
}, 500);
}else{
main.playNext();
}
_s.allowToLoop = false;
return;
}
}
}
}
}
// Load subtitle
_s.loadSubtitle = function(){
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
var media = castSession.getMediaSession();
tracksInfoRequest = new chrome.cast.media.EditTracksInfoRequest([main.ccSS]);
media.editTracksInfo(tracksInfoRequest, function(e){},function(e){console.log(e);});
}
// Style subtitle
_s.styleSubtitle = function(mediaInfo){
var textTrackStyle = new chrome.cast.media.TextTrackStyle([main.ccSS]);
textTrackStyle.backgroundColor = '#00000000', // see http://dev.w3.org/csswg/css-color/#hex-notation
textTrackStyle.foregroundColor = '#FFFFFFFF', // see http://dev.w3.org/csswg/css-color/#hex-notation
textTrackStyle.edgeType = 'DROP_SHADOW', // can be: "NONE", "OUTLINE", "DROP_SHADOW", "RAISED", "DEPRESSED"
textTrackStyle.edgeColor = '#00000066', // see http://dev.w3.org/csswg/css-color/#hex-notation
textTrackStyle.fontScale = 1, // transforms into "font-size: " + (fontScale*100) +"%"
textTrackStyle.fontStyle = 'NORMAL', // can be: "NORMAL", "BOLD", "BOLD_ITALIC", "ITALIC",
textTrackStyle.fontFamily = 'Droid Sans', // specific font family
textTrackStyle.fontGenericFamily = 'CURSIVE', // can be: "SANS_SERIF", "MONOSPACED_SANS_SERIF", "SERIF", "MONOSPACED_SERIF", "CASUAL", "CURSIVE", "SMALL_CAPITALS",
textTrackStyle.windowColor = '#00000066', // see http://dev.w3.org/csswg/css-color/#hex-notation
textTrackStyle.windowRoundedCornerRadius = 10, // radius in px
textTrackStyle.windowType = 'ROUNDED_CORNERS' // can be: "NONE", "NORMAL", "ROUNDED_CORNERS"
mediaInfo.textTrackStyle = textTrackStyle;
}
// Load media
_s.loadMedia = function(autoplay){
var path1 = location.origin;
var path2 = location.pathname;
_s.videoSource = FWDUVPUtils.getValidSource(main.finalVideoPath_str);
var posterSource = FWDUVPUtils.getValidSource(main.posterPath_str);
var mediaInfo = new chrome.cast.media.MediaInfo(_s.videoSource);
mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();
var ct = 'video/mp4';
if(main.videoType_str == FWDUVPlayer.MP3){
ct = 'audio/mp3';
}
mediaInfo.contentType = ct;
//mediaInfo.metadata.title = 'test';
mediaInfo.metadata.images = [{'url' : posterSource}];
_s.styleSubtitle(mediaInfo);
var subData = main._d.playlist_ar[main.id].subtitleSource;
if(subData){
var tracks = [];
for(var i=0; i