diff options
Diffstat (limited to 'localwebsite/htdocs/assets/app.js')
-rw-r--r-- | localwebsite/htdocs/assets/app.js | 319 |
1 files changed, 0 insertions, 319 deletions
diff --git a/localwebsite/htdocs/assets/app.js b/localwebsite/htdocs/assets/app.js deleted file mode 100644 index 37f1307..0000000 --- a/localwebsite/htdocs/assets/app.js +++ /dev/null @@ -1,319 +0,0 @@ -(function() { -var RE_WHITESPACE = /[\t\r\n\f]/g - -window.ajax = { - get: function(url, data) { - if (typeof data == 'object') { - var index = 0; - for (var key in data) { - var val = data[key]; - url += index === 0 && url.indexOf('?') === -1 ? '?' : '&'; - url += encodeURIComponent(key) + '=' + encodeURIComponent(val); - } - } - return this.raw(url); - }, - - post: function(url, body) { - var opts = { - method: 'POST' - }; - if (body) - opts.body = body; - return this.raw(url, opts); - }, - - raw: function(url, options) { - if (!options) - options = {} - - return fetch(url, Object.assign({ - headers: { - 'X-Requested-With': 'XMLHttpRequest', - } - }, options)) - .then(resp => { - return resp.json() - }) - } -}; - -window.extend = function(a, b) { - return Object.assign(a, b); -} - -window.ge = function(id) { - return document.getElementById(id); -} - -var ua = navigator.userAgent.toLowerCase(); -window.browserInfo = { - version: (ua.match(/.+(?:me|ox|on|rv|it|ra|ie)[\/: ]([\d.]+)/) || [0,'0'])[1], - //opera: /opera/i.test(ua), - msie: (/msie/i.test(ua) && !/opera/i.test(ua)) || /trident/i.test(ua), - mozilla: /firefox/i.test(ua), - android: /android/i.test(ua), - mac: /mac/i.test(ua), - samsungBrowser: /samsungbrowser/i.test(ua), - chrome: /chrome/i.test(ua), - safari: /safari/i.test(ua), - mobile: /iphone|ipod|ipad|opera mini|opera mobi|iemobile|android/i.test(ua), - operaMini: /opera mini/i.test(ua), - ios: /iphone|ipod|ipad|watchos/i.test(ua) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1), -}; - -window.isTouchDevice = function() { - return 'ontouchstart' in window || navigator.msMaxTouchPoints; -} - -window.hasClass = function(el, name) { - if (!el) - throw new Error('hasClass: invalid element') - - if (el.nodeType !== 1) - throw new Error('hasClass: expected nodeType is 1, got' + el.nodeType) - - if (window.DOMTokenList && el.classList instanceof DOMTokenList) { - return el.classList.contains(name) - } else { - return (" " + el.className + " ").replace(RE_WHITESPACE, " ").indexOf(" " + name + " ") >= 0 - } -} - -window.addClass = function(el, name) { - if (!hasClass(el, name)) { - el.className = (el.className ? el.className + ' ' : '') + name; - return true - } - return false -} - -window.Cameras = { - hlsOptions: null, - h265webjsOptions: null, - host: null, - proto: null, - hlsDebugVideoEvents: false, - - getUrl: function(name) { - return this.proto + '://' + this.host + '/ipcam/' + name + '/live.m3u8'; - }, - - setupHls: function(video, name, useHls) { - var src = this.getUrl(name); - - // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled. - - // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element through the `src` property. - // This is using the built-in support of the plain video element, without using hls.js. - - if (useHls) { - var config = this.hlsOptions; - config.xhrSetup = function (xhr,url) { - xhr.withCredentials = true; - }; - - var hls = new Hls(config); - hls.loadSource(src); - hls.attachMedia(video); - hls.on(Hls.Events.MEDIA_ATTACHED, function () { - video.muted = true; - video.play(); - }); - } else { - console.warn('hls.js is not supported, trying the native way...') - - video.autoplay = true; - video.muted = true; - video.playsInline = true; - video.autoplay = true; - if (window.browserInfo.ios) - video.setAttribute('controls', 'controls'); - - video.src = src; - - var events = ['canplay']; - if (this.hlsDebugVideoEvents) - events.push('canplay', 'canplaythrough', 'durationchange', 'ended', 'loadeddata', 'loadedmetadata', 'pause', 'play', 'playing', 'progress', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'waiting'); - - for (var i = 0; i < events.length; i++) { - var evt = events[i]; - (function(evt, video, name) { - video.addEventListener(evt, function(e) { - if (this.debugVideoEvents) - console.log(name + ': ' + evt, e); - - if (!window.browserInfo.ios && ['canplay', 'loadedmetadata'].includes(evt)) - video.play(); - }) - })(evt, video, name); - } - } - }, - - setupH265WebJS: function(videoContainer, name) { - var containerHeightFixed = false; - var config = { - player: 'video-'+name, - width: videoContainer.offsetWidth, - height: parseInt(videoContainer.offsetWidth * 9 / 16, 10), - accurateSeek: true, - token: this.h265webjsOptions.token, - extInfo: { - moovStartFlag: true, - readyShow: true, - autoPlay: true, - rawFps: 15, - } - }; - - var mediaInfo; - var player = window.new265webjs(this.getUrl(name), config); - - player.onSeekStart = (pts) => { - console.log(name + ": onSeekStart:" + pts); - }; - - player.onSeekFinish = () => { - console.log(name + ": onSeekFinish"); - }; - - player.onPlayFinish = () => { - console.log(name + ": onPlayFinish"); - }; - - player.onRender = (width, height, imageBufferY, imageBufferB, imageBufferR) => { - // console.log(name + ": onRender"); - if (!containerHeightFixed) { - var ratio = height / width; - videoContainer.style.width = parseInt(videoContainer.offsetWidth * ratio, 10)+'px'; - containerHeightFixed = true; - } - }; - - player.onOpenFullScreen = () => { - console.log(name + ": onOpenFullScreen"); - }; - - player.onCloseFullScreen = () => { - console.log(name + ": onCloseFullScreen"); - }; - - player.onSeekFinish = () => { - console.log(name + ": onSeekFinish"); - }; - - player.onLoadCache = () => { - console.log(name + ": onLoadCache"); - }; - - player.onLoadCacheFinshed = () => { - console.log(name + ": onLoadCacheFinshed"); - }; - - player.onReadyShowDone = () => { - // console.log(name + ": onReadyShowDone:【You can play now】"); - player.play() - }; - - player.onLoadFinish = () => { - console.log(name + ": onLoadFinish"); - - player.setVoice(1.0); - - mediaInfo = player.mediaInfo(); - console.log("onLoadFinish mediaInfo===========>", mediaInfo); - - var codecName = "h265"; - if (mediaInfo.meta.isHEVC === false) { - console.log(name + ": onLoadFinish is Not HEVC/H.265"); - codecName = "h264"; - } else { - console.log(name + ": onLoadFinish is HEVC/H.265"); - } - - console.log(name + ": onLoadFinish media Codec:" + codecName); - console.log(name + ": onLoadFinish media FPS:" + mediaInfo.meta.fps); - console.log(name + ": onLoadFinish media size:" + mediaInfo.meta.size.width + "x" + mediaInfo.meta.size.height); - - if (mediaInfo.meta.audioNone) { - console.log(name + ": onLoadFinish media no Audio"); - } else { - console.log(name + ": onLoadFinish media sampleRate:" + mediaInfo.meta.sampleRate); - } - - if (mediaInfo.videoType == "vod") { - console.log(name + ": onLoadFinish media is VOD"); - console.log(name + ": onLoadFinish media dur:" + Math.ceil(mediaInfo.meta.durationMs) / 1000.0); - } else { - console.log(name + ": onLoadFinish media is LIVE"); - } - }; - - player.onCacheProcess = (cPts) => { - console.log(name + ": onCacheProcess:" + cPts); - }; - - player.onPlayTime = (videoPTS) => { - if (mediaInfo.videoType == "vod") { - console.log(name + ": onPlayTime:" + videoPTS); - } else { - // LIVE - } - }; - - player.do(); - // console.log('setupH265WebJS: video: ', video.offsetWidth, video.offsetHeight) - }, - - init: function(opts) { - this.proto = opts.proto; - this.host = opts.host; - this.hlsOptions = opts.hlsConfig; - this.h265webjsOptions = opts.h265webjsConfig; - - var useHls; - if (opts.hlsConfig !== undefined) { - useHls = Hls.isSupported(); - if (!useHls && !this.hasFallbackSupport()) { - alert('Neither HLS nor vnd.apple.mpegurl is not supported by your browser.'); - return; - } - } - - for (var camId in opts.camsByType) { - var name = camId + ''; - if (opts.isLow) - name += '-low'; - var type = opts.camsByType[camId]; - - switch (type) { - case 'h265': - var videoContainer = document.createElement('div'); - videoContainer.setAttribute('id', 'video-'+name); - videoContainer.setAttribute('style', 'position: relative'); // a hack to fix an error in h265webjs lib - videoContainer.className = 'video-container'; - document.getElementById('videos').appendChild(videoContainer); - try { - this.setupH265WebJS(videoContainer, name); - } catch (e) { - console.error('cam'+camId+': error', e) - } - break; - - case 'h264': - var video = document.createElement('video'); - video.setAttribute('id', 'video-'+name); - document.getElementById('videos').appendChild(video); - this.setupHls(video, name, useHls); - break; - } - } - }, - - hasFallbackSupport: function() { - var video = document.createElement('video'); - return video.canPlayType('application/vnd.apple.mpegurl'); - }, -}; -})();
\ No newline at end of file |