123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /**
- * Interface with h5s websocket pb ctonrol API
- * @constructor
- * @param
- var pbconf1 = {
- begintime: '2019-03-23T120101+08',//{string} begintime 0 for fileplayback
- endtime: '2019-03-23T150101+08',//{string} endtime 0 for fileplayback
- serverpb: 'true', //'true' or 'false' playback from h5stream record, default false
- filename: 'token1.mp4', // file name need to playback (begintime == 0 & endtime == 0 and serverpb is true)
- callback: PlaybackCB, //{function}(event(string), userdata(object))
- userdata: user data // user data
- };
-
- var conf = {
- protocol: window.location.protocol, // {string} - 'http:' or 'https:'
- host: window.location.host, //{string} - 'localhost:8080'
- rootpath:window.location.pathname, // {string} - path of the app running
- token:'token1', // {string} - token of stream
- streamprofile: 'main', // {string} - stream profile, main/sub or other predefine transcoding profile
- pbconf: pbconf1, //This is optional, if no pbconf, this will be live.
- session:'c1782caf-b670-42d8-ba90-2244d0b0ee83', //{string} - session got from login
- consolelog: 'true' // 'true' or 'false' enable/disable console.log
- };
- */
- function H5sPbControl(conf)
- {
- this.wsSocket;
- this.keepaliveTimerId;
- this.bDisConnected = false;
-
- this._debug = true;
- if (conf.consolelog !== undefined)
- {
- if (conf.consolelog === 'false')
- {
- this._debug = false;
- }
- }
-
- this._conf = conf;
- if(this._debug === true) console.log("[PBCONTROL] Websocket Conf:", conf);
-
- this._pbconf = conf.pbconf;
-
- this._token = conf.token;
- }
-
- H5sPbControl.prototype.H5SWebSocketClient = function(h5spath)
- {
- var socket;
- if(this._debug === true) console.log("[PBCONTROL] H5SWebSocketClient");
- try {
- //alert(this._conf.protocol);
- if (this._conf.protocol == "http:")
- {
- if (typeof MozWebSocket != "undefined")
- {
- socket = new MozWebSocket('ws://' + this._conf.host + h5spath);
- }else
- {
- socket = new WebSocket('ws://' + this._conf.host + h5spath);
- }
- }
- if (this._conf.protocol == "https:")
- {
- //alert(this._conf.host);
- if(this._debug === true) console.log(this._conf.host);
- if (typeof MozWebSocket != "undefined")
- {
- socket = new MozWebSocket('wss://' + this._conf.host + h5spath);
- }else
- {
- socket = new WebSocket('wss://' + this._conf.host + h5spath);
- }
- }
- if(this._debug === true) console.log(this._conf.host);
- } catch (e) {
- alert('error');
- return;
- }
- return socket;
- }
- H5sPbControl.prototype.keepaliveTimer = function()
- {
- try {
- var j = {};
- j.cmd = "H5_KEEPALIVE";
- this.wsSocket.send(JSON.stringify(j));
- } catch (e) {
- if(this._debug === true) console.log(e);
- }
- }
- H5sPbControl.prototype.onWebSocketData = function(msg)
- {
- if(typeof msg.data === 'string')
- {
- if(this._debug === true) console.log("[PBCONTROL] string");
- if (this._pbconf != undefined && this._pbconf.callback != undefined)
- {
- this._pbconf.callback(msg.data, this._pbconf.userdata);
- }
- return;
- }
-
- if (this.bDisConnected === true)
- {
- return;
- }
- }
- H5sPbControl.prototype.setupWebSocket = function(token)
- {
- var h5spath = "api/v1/h5spbcontrolapi";
- var streamprofile = 'main';
- if (this._conf.streamprofile === undefined)
- {}else
- {
- streamprofile = this._conf.streamprofile;
- }
-
- if (this._pbconf === undefined)
- {
- h5spath = this._conf.rootpath + h5spath + "?token=" + token
- + "&profile=" + streamprofile + '&session=' + this._conf.session;
- }else
- {
- var serverpb = 'false';
- var filename = 'fake';
- if (this._pbconf.serverpb === undefined)
- {}else
- {
- serverpb = this._pbconf.serverpb;
- }
- if (this._pbconf.filename === undefined)
- {}else
- {
- filename = this._pbconf.filename;
- }
-
- h5spath = this._conf.rootpath + h5spath + "?token=" + token
- + "&playback=true"
- + '&profile=' + streamprofile
- + "&serverpb=" + serverpb
- + "&begintime=" + encodeURIComponent(this._pbconf.begintime)//this._pbconf.begintime
- + "&endtime=" + encodeURIComponent(this._pbconf.endtime)//this._pbconf.endtime
- + "&filename=" + filename//file name
- + '&session=' + this._conf.session;
- } + '&session=' + this._conf.session;
-
-
- if(this._debug === true) console.log(h5spath);
-
- this.wsSocket = this.H5SWebSocketClient(h5spath);
- if(this._debug === true) console.log("[PBCONTROL] setupWebSocket", this.wsSocket);
- this.wsSocket.binaryType = 'arraybuffer';
- this.wsSocket.h5 = this;
- this.wsSocket.onmessage = this.onWebSocketData.bind(this);
-
- this.wsSocket.onopen = function()
- {
- if(this.h5._debug === true) console.log("[PBCONTROL] wsSocket.onopen", this.h5);
- this.h5.keepaliveTimerId = setInterval(this.h5.keepaliveTimer.bind(this.h5), 1000);
- var j = {};
- j.type = "H5S_WS_CONNECTED";
- if (this.h5._pbconf != undefined && this.h5._pbconf.callback != undefined)
- {
- this.h5._pbconf.callback(JSON.stringify(j), this.h5._pbconf.userdata);
- }
- }
-
- this.wsSocket.onclose = function () {
- if(this.h5._debug === true) console.log("[PBCONTROL] wsSocket.onclose", this.h5);
-
- var j = {};
- j.type = "H5S_WS_DISCONNECTED";
- if (this.h5._pbconf != undefined && this.h5._pbconf.callback != undefined)
- {
- this.h5._pbconf.callback(JSON.stringify(j), this.h5._pbconf.userdata);
- }
-
- this.h5.CleanupWebSocket(this.h5);
- }
- }
-
- H5sPbControl.prototype.CleanupWebSocket = function(h5sPlayer)
- {
- if(h5sPlayer._debug === true) console.log('[PBCONTROL] CleanupWebSocket', h5sPlayer);
- clearInterval(h5sPlayer.keepaliveTimerId);
- }
- /**
- * Connect a websocket Stream to videoElement
- */
- H5sPbControl.prototype.connect = function() {
- /* start connect to server */
- this.setupWebSocket(this._token);
- }
- /**
- * Disconnect a websocket Stream and clear videoElement source
- */
- H5sPbControl.prototype.disconnect = function() {
- if(this._debug === true) console.log("[PBCONTROL] disconnect", this);
- this.bDisConnected = true;
- clearInterval(this.reconnectTimerId);
-
- try {
- if (this.wsSocket != null)
- {
- this.wsSocket.close();
- this.wsSocket = null;
- }
- }
- catch (e){}
-
- if(this._debug === true) console.log("[PBCONTROL] disconnect", this);
- }
- H5sPbControl.prototype.start = function(){
- try {
- var j = {};
- j.cmd = "H5_START";
- this.wsSocket.send(JSON.stringify(j));
- } catch (e) {
- if(this._debug === true) console.log(e);
- }
- }
- H5sPbControl.prototype.pause = function(){
- try {
- var j = {};
- j.cmd = "H5_PAUSE";
- this.wsSocket.send(JSON.stringify(j));
- } catch (e) {
- if(this._debug === true) console.log(e);
- }
- }
- H5sPbControl.prototype.resume = function(){
- try {
- var j = {};
- j.cmd = "H5_RESUME";
- this.wsSocket.send(JSON.stringify(j));
- } catch (e) {
- if(this._debug === true) console.log(e);
- }
- }
- H5sPbControl.prototype.seek = function(nTime){
- try {
- var j = {};
- j.cmd = "H5_SEEK";
- j.nSeekTime = nTime;
- this.wsSocket.send(JSON.stringify(j));
- } catch (e) {
- if(this._debug === true) console.log(e);
- }
- }
- H5sPbControl.prototype.speed = function(nSpeed){
- try {
- var j = {};
- j.cmd = "H5_SPEED";
- j.nSpeed = nSpeed;
- this.wsSocket.send(JSON.stringify(j));
- } catch (e) {
- if(this._debug === true) console.log(e);
- }
- }
|