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 = [''); a.push(''); a.push(''); a.push(''); a.push(''); //a.push(''); a.push(''); // Alternate HTML var title = "Windows Media Player"; a.push('
' + title + ' is required to view this media. Download Here.
'); a.push(''); $(_parentElem).append(a.join(' ')); player = document.getElementById("pluginPlayer"); //player.uiMode = "none";//hide control bar.https://msdn.microsoft.com/en-us/library/windows/desktop/dd564089(v=vs.85).aspx player.uiMode = "none"; if (player.attachEvent) { console.log('attachEvent is used'); player.attachEvent('Buffering', function (event) { if (event) { console.log('buffering... download:' + player.network.downloadProgress + ", buffering:" + player.network.bufferingProgress); if (player.network.downloadProgress > 0) { if (player.playSate != 3) {//3 means playing. _onProgress("Downloading video file " + thisPlayer.item.fileName + " ... " + player.network.downloadProgress + "%"); } } if (player.network.bufferingProgress > 0) { } } }); //https://msdn.microsoft.com/en-us/library/windows/desktop/dd564085(v=vs.85).aspx player.attachEvent("PlayStateChange", function (NewState) { playstate = NewState; console.log("PlayStateChange::" + NewState); var speedChanged = false; switch (NewState) { case 1://ended; setTimeout(function () { _onEnded.call(thisPlayer); }, 500); player.stretchToFit = true; speedChanged = false; break; case 4://ScanForward case 5://ScanReverse _onLoadedData.call(thisPlayer); break; case 6://buffering. //setFrameRate(thisPlayer.PlayDelay); break; case 8: break; case 10://ready to play. //setFrameRate(thisPlayer.PlayDelay); break; case 3://playing updatePosition(); if (!speedChanged) { speedChanged = true; setTimeout(function () {//fix bug sometime the player will show blank. setFrameRate(thisPlayer.PlayDelay); }, 1500); } break; } }); //https://msdn.microsoft.com/en-us/library/windows/desktop/dd564037(v=vs.85).aspx player.attachEvent("OpenStateChange", function (NewState) { console.log("OpenStateChange::" + NewState); switch (NewState) { case 8://MediaChanging // _onEnded.call(thisPlayer); break; case 11://MediaLoading case 12://MediaOpening _onLoadStart(thisPlayer.item.fileName); break; case 13://MediaOpen _onLoadedmetadata(thisPlayer); break; } }); player.attachEvent("Error", function () { console.log("Error::"); errorMsg = player.error.item(0).errorDescription _onError.call(thisPlayer); }); player.attachEvent("MediaError", function () { console.log("Error::"); errorMsg = "An media error occured"; _onError.call(thisPlayer); }); player.attachEvent("PositionChange", function (oldPosition, newPosition) { console.log("position: old:" + oldPosition + " new::" + newPosition); }); } else { console.log('IE11 attachEvent is removed. Using event listener'); } } function setFrameRate(fps) { if (player.settings.isAvailable("rate")) { if (fps != 0) { player.settings.rate = fps; } else { } } } this.src = function (url) { //player.close(); //console.log("New URL:" + url); player.URL = (url); //var item = new Object(); //item.sourceURL = url; //player.currentPlaylist.appendItem(url); //player.controls.next(url); } this.getDimension = function () { return Array(player.currentMedia.imageSourceWidth, player.currentMedia.imageSourceHeight); } this.setDimension = function(w, h){ if (player != null) { player.style.height = h + "px"; player.style.width = w + "px"; _height = h; _width = w; } } this.Seek = function (pos) { //player.pause(); //player.currentTime(pos); //player.play(); }; this.SetFramerate = function (fps) { if (fps > 5) fps = 5; thisPlayer.PlayDelay = fps; if (player.playState != 10) {//10 - means ready return; } setFrameRate(thisPlayer.PlayDelay); }; this.Mute = function () { player.settings.mute = true; }; this.play = function () { //player.controls.stop(); player.controls.play(); } this.pause = function () { player.controls.pause(); } this.paused = function () { return player.status == "paused"; //?? } this.currentTime = function () { return player.controls.currentPosition; } this.duration = function () { return player.currentMedia.duration; } this.error = function () { return errorMsg; } this.release = function () { player.close(); } this.requestFullscreen = function () { player.fullScreen = 'true'; } this.exitFullscreen = function () { player.fullScreen = 'false'; } } var QuickTimePlayer = function () { var _parentElem, _onTimeupdate, _onEnded, _onLoadedmetadata, _onError, _onProgress, _onLoadStart, _onLoadedData, _onWaiting; var _width, _height; var _pos; var player = null, errorMsg, thisPlayer, posTimer; function checkPlayInitilized() { if (typeof (player.GetDuration) == "function") { return true; } else { return false; } } function checkMediaEnded() { if (checkPlayInitilized()) return true; if (player.GetDuration() == player.GetTime()) { return true; } else { return false; } } function updatePosition() { if (posTimer != null) clearTimeout(posTimer); if (checkPlayInitilized()) { //http://www.filibeto.org/unix/macos/lib/dev/documentation/QuickTime/Conceptual/QTScripting_JavaScript/QTScripting_JavaScript.pdf console.log("duration::" + player.GetDuration()); console.log("status::" + player.GetIsLooping() ? "playing" : "stopped"); console.log("time::" + player.GetTime()); _onTimeupdate.call(thisPlayer); if (checkMediaEnded()) { _onEnded.call(thisPlayer); return; } //play next one; } posTimer = setTimeout(function () { updatePosition(); }, 1000); } this.init = function (parentElem, onTimeupdate, onEnded, onLoadedmetadata, onError, onProgress, onLoadStart, onLoadedData, onWaiting, width, height) { _parentElem = parentElem, _onTimeupdate = onTimeupdate, _onEnded = onEnded, _onLoadedmetadata = onLoadedmetadata, _onError = onError, _onProgress = onProgress, _onLoadStart = onLoadStart, _onLoadedData = onLoadedData, _onWaiting = onWaiting; _width = width; _height = height; } this.createPlayer = function () { var src = "http://192.168.2.15/test/videofiles/bb.mp4"; var a = []; a = [''); a.push(''); a.push(''); a.push(''); a.push(''); a.push(''); // Alternate HTML //a.push('

' + o.title + ' Required

' + o.title + ' is required to view this media. Download Here.

'); a.push(''); $(_parentElem).append(a.join(' ')); thisPlayer = this; player = document.qPlayer; } this.src = function (url) { //player.src = url; //$("#qPlayer_src").attr('value', url); //$("#qPlayerEmbed").attr('src', url); } this.play = function () { if (checkPlayInitilized()) { player.Play(); } updatePosition(); } this.pause = function () { if (checkPlayInitilized()) { player.Stop(); } } this.paused = function () { if (checkPlayInitilized()) { return !player.GetIsLooping(); //todo; } return true; //return player.status == "paused"; //?? } this.currentTime = function () { if (checkPlayInitilized()) { var ts = player.GetTimeScale(); var t = player.GetTime() / ts; return t; } return 0; } this.error = function () { return errorMsg; } this.release = function () { //player.close(); } this.requestFullscreen = function () { player.fullScreen = 'true'; } this.exitFullscreen = function () { player.fullScreen = 'false'; } } var DoesNotSupportFormat = function () { var _parentElem, _onTimeupdate, _onEnded, _onLoadedmetadata, _onError, _onProgress, _onLoadStart, _onLoadedData, _onWaiting; var _width, _height; var _pos; var player = null, errorMsg, thisPlayer, posTimer; this.init = function (parentElem, onTimeupdate, onEnded, onLoadedmetadata, onError, onProgress, onLoadStart, onLoadedData, onWaiting, width, height) { _parentElem = parentElem, _onTimeupdate = onTimeupdate, _onEnded = onEnded, _onLoadedmetadata = onLoadedmetadata, _onError = onError, _onProgress = onProgress, _onLoadStart = onLoadStart, _onLoadedData = onLoadedData, _onWaiting = onWaiting; _width = width; _height = height; } this.createPlayer = function () { var a = []; a = ['
'); $(_parentElem).append(a.join(' ')); thisPlayer = this; player = document.qPlayer; } this.src = function (url) { $(".NoPlayer").html("No properly player found to play " + url + "!"); } this.play = function () { } this.pause = function () { } this.paused = function () { } this.currentTime = function () { } this.error = function () { } this.release = function () { } this.requestFullscreen = function () { } this.exitFullscreen = function () { } }