var videoPluginPlayer = function (elem) {
this.PlayDelay = 1000; //1s;
var playTimerHandler = null;
var isStopped = false;
var elemImg = null, dataItems = [], updateInfoCallback = null;
var player = null;
var stage = 0; //0--connecting, 1-connected, loading data, have not started playing, 2--playing. 3--?, 4--ended
var downloadingPercent = 0;
var initiated = false;
this.item = null;
var playNext = function () {
if (isStopped)
return;
if (playTimerHandler != null)
clearTimeout(playTimerHandler);
var item = dataItems.shift();
if (item != null && item != undefined) {
player.item = item;
var urlPath = location.protocol + '//' + location.hostname + "/file/DF.aspx/sesID" + sesID + "/isGallery/share" + (shareID > 0 ? "true" : "false") + "/shareID" + shareID + "/fileID" + item.fileID + "/" + item.fileName;
debugInfo("path::" + urlPath);
//urlPath = "http://192.168.2.15/test/bb.mp4";
player.src(urlPath);
player.play();
} else {
updateInfoCallback(null, 0, 0, 1); // waiting.
playTimerHandler = setTimeout(function () { playNext() }, 1000);
}
};
// detection script for FF WMP plugin (http://www.therossman.org/experiments/wmp_play.html)
// (hat tip to Mark Ross for this script)
function isFirefoxWMPPluginInstalled() {
var plugs = navigator.plugins || [];
for (var i = 0; i < plugs.length; i++) {
var plugin = plugs[i];
if (plugin['filename'] == 'np-mswmp.dll')
return true;
}
return false;
}
/*
Initialize the canvas elements and data source.
*/
this.Init = function (_elemParent, playSpeed, _updateInfoCallback) {
this.PlayDelay = playSpeed;
$(_elemParent).empty();
if (!$.browser.msie) {
var msg = "Your browser does not support playing .avi / .mkv video files. Please use Microsoft Internet Explorer to view this camera.";
$(_elemParent).html("
" + msg + "
");
return;
}
updateInfoCallback = _updateInfoCallback;
var timeUdpFunc = function () {
var myPlayer = this;
if (myPlayer.item == null)
return;
updateInfoCallback(myPlayer.item, myPlayer.currentTime(), downloadingPercent, 2); //update progress;
debugInfo("progress::" + myPlayer.currentTime() + " percent::" + downloadingPercent);
};
var endedFunc = function () {
var myPlayer = this;
stage = 4;
debugInfo("Ended::" + myPlayer.currentTime());
playNext();
};
var loadedMetaFunc = function (myPlayer) {
var d = myPlayer.getDimension();
var h = d[1], w = d[0];
debugInfo("video:: h:" + h + " w:" + w);
if (h > 0 && w > 0) {
myPlayer.setDimension(w, h);
}
//$(_elemParent).show();
};
var errorFunc = function (msg) {
var myPlayer = this; //error; play next video;
var msg = myPlayer.error().message;
updateInfoCallback(msg, 0, 0, 3); //error...
debugInfo("error::" + msg);
playTimerHandler = setTimeout(function () { playNext() }, 2000); //wait 2s to start playing next video to let user see the error message.
return false;
};
//media downloading progress.
var progFunc = function (msg) {
var myPlayer = this;
updateInfoCallback(null, msg, 0, 4);
};
//Connecting, waiting for connected.
var loadStartFunc = function (filename) {
var myPlayer = this; //error; play next video;
debugInfo("load started...");
updateInfoCallback(null, "Downloading video file " + filename + " ...", 0, 4);
stage = 0;
downloadingPercent = 0;
return false;
};
var loadeddataFunc = function (msg) {
var myPlayer = this; //
//partially loaded successfully and start playing,
//so at this time, will hide the tips.
debugInfo("loaded data at current position...");
if (updateInfoCallback != null) {
updateInfoCallback(myPlayer.item, 0, 0, 0); //playing...
}
stage = 1;
return false;
};
//Connected, waiting for data
var waitingFunc = function (msg) {
var myPlayer = this;
debugInfo("waiting...");
stage = 2;
return false;
};
var ua = navigator.userAgent.toLowerCase();
var winOS = /windows/.test(ua);
if (winOS) {
if (/chrome/.test(ua) && false) {
player = new DoesNotSupportFormat(); ; // new WMPPlayer();
} else {
player = new WMPPlayer();
}
} else {
//player = new QuickTimePlayer();
player = new DoesNotSupportFormat();
}
player.init(_elemParent, timeUdpFunc, endedFunc, loadedMetaFunc, errorFunc,
progFunc, loadStartFunc, loadeddataFunc, waitingFunc, 640, 480, this.PlayDelay);
player.createPlayer();
};
/*
Start to play.
*/
this.Play = function (_dataItems) {
dataItems = _dataItems;
isStopped = false;
if (player.item != null && player.paused()) {
player.play();
} else {
playNext();
}
};
/*
Stop to play the images.
*/
this.Stop = function () {
if (playTimerHandler != null)
clearTimeout(playTimerHandler);
isStopped = true;
player.pause();
};
/*
Reset playing context.
*/
this.Reset = function () {
player.pause();
playNext();
player.item = null; //for playing next video;
}
/*
Request full screen
*/
this.FullScreen = function () {
player.requestFullscreen();
return true;
}
/*
Exit full screen.
*/
this.ExitFullScreen = function () {
player.exitFullscreen();
return true;
}
/*
Get video real dimension.
*/
this.Getdimension = function () {
if (player != null) {
return player.getDimension();
} else {
return new Array(0, 0);
}
}
this.GetPlayingVideo = function () {
return player.item;
}
this.Mute = function () {
player.Mute();
};
this.Seek = function (pos) {
player.Seek(pos);
};
this.SetFramerate = function (fps) {
player.SetFramerate(fps);
};
return this;
}
var prevWMPPlayer = null;
var WMPPlayer = function () {
var _parentElem,
_onTimeupdate,
_onEnded,
_onLoadedmetadata,
_onError,
_onProgress,
_onLoadStart,
_onLoadedData,
_onWaiting;
var _width, _height;
var _pos;
var player = null;
var thisPlayer = this;
var errorMsg = "", posTimer;
this.PlayDelay = 0;
var playstate = 0;
// detection script for FF WMP plugin (http://www.therossman.org/experiments/wmp_play.html)
// (hat tip to Mark Ross for this script)
function isFirefoxWMPPluginInstalled() {
var plugs = navigator.plugins || [];
for (var i = 0; i < plugs.length; i++) {
var plugin = plugs[i];
if (plugin['filename'] == 'np-mswmp.dll')
return true;
}
return false;
}
this.init = function (parentElem, onTimeupdate, onEnded, onLoadedmetadata, onError,
onProgress, onLoadStart, onLoadedData, onWaiting, width, height, speed) {
_parentElem = parentElem,
_onTimeupdate = onTimeupdate,
_onEnded = onEnded,
_onLoadedmetadata = onLoadedmetadata,
_onError = onError,
_onProgress = onProgress,
_onLoadStart = onLoadStart,
_onLoadedData = onLoadedData,
_onWaiting = onWaiting;
_width = width;
_height = height;
thisPlayer.PlayDelay = speed;
}
function updatePosition() {
if (posTimer != null)
clearTimeout(posTimer);
console.log("status::" + player.status);
//https://msdn.microsoft.com/en-us/library/windows/desktop/dd564085(v=vs.85).aspx
if (playstate != 3 &&
playstate != 4 &&
playstate != 5)//playing/fast forwarding.
return;
_onTimeupdate.call(thisPlayer);
posTimer = setTimeout(function () {
updatePosition();
}, 1000);
}
this.createPlayer = function () {
if (prevWMPPlayer != null) {
prevWMPPlayer.release();
prevWMPPlayer = null;
}
prevWMPPlayer = this;
var pluginspage = "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#version=5,1,52,701";
var a;
a = ['