https://vivamax.craffstream.com/player/dist/video-analytics-sdk.js

ID da verificação
67cd93ca-79bd-47fd-be69-1f5ff0da8170Concluído
URL enviado:
https://vivamax.craffstream.com/player/dist/video-analytics-sdk.js
Relatório concluído:

Ligações · 0 encontradas

Variáveis JavaScript · 3 encontradas

NomeTipo
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject

Mensagens de registo da consola · 1 encontradas

TipoCategoriaRegisto
errornetwork
URL
https://vivamax.craffstream.com/favicon.ico
Texto
Failed to load resource: the server responded with a status of 403 (Forbidden)

HTML

<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">!function(a, b) {
  if ("function" == typeof define &amp;&amp; define.amd ? define(b) : "object" == typeof exports &amp;&amp; (module.exports = b()), "undefined" != typeof a) {
    if (void 0 !== a.VideoAnalytics) return;
    if (a.VideoAnalyticsLoading) return;
    a.VideoAnalyticsLoading = !0,
      a.VideoAnalytics = b(), delete a.VideoAnalyticsLoading
  }
}(this, function() {
  var a = {};
  return function() {
    "use strict";
    !function() {
      // constants
      var constantsObj = a.Constants = {
        "GATEWAY_URL": "gateway-url",
        "ASSET_NAME": "asset-name",
        "STREAM_URL": "stream-url",
        "VIEWER_ID": "viewer-id",
        "BITRATE": "bitrate",
        "DEVICE_OS": "device-os",
        "DEVICE_OS_VERSION": "device-os-version",
        "DEVICE_MODEL": "device-model",
        "DEVICE_BRAND": "device-brand",
        "DEVICE_MANUFACTURER": "device-manufacturer",
        "DEVICE_TYPE": "device-type",
        "DEVICE_UUID": 'device-uuid',
        "VIDEO_WIDTH": "video-width",
        "VIDEO_HEIGHT": "video-height",
        "STREAM_URL": "stream-url",
        "STREAM_TYPE": "stream-type",
        "NETWORK": "network",
        "TAGS": "tags",
        "PLAYER_FRAMEWORK_NAME": 'player-framework-name',
        "PLAYER_FRAMEWORK_VERSION": 'player-framework-version',
        "PLAYER_NAME": 'player-name',
        "StreamType": {
          "VOD": "vod",
          "LIVE": "live",
        },
        "Playback": {
          "PLAYER_STATE": "CwsStateChangeEvent",
          "PLAYER_SEEK": "CwsSeekEvent",
          "SESSION_END": "CwsSessionEndEvent",
          "DATA_SAMPLES": "CwsDataSamplesEvent",
          "TRACK_CHANGE": "CwsTrackChangeEvent",
          "SEEK_STARTED": "seek-started",
          "SEEK_ENDED": "seek-ended",
          "SESSION_UPDATE": "playback-session-update",
          "BITRATE": "playback-bitrate"
        },
        "PlayerState": {
          "INIT": "INIT",
          "PLAYING": "PLAYING",
          "PAUSED": "PAUSED",
          "BUFFERING": "BUFFERING",
          "STOPPED": "STOPPED",
          "ERROR": "ERROR",
          "SEEKING": "SEEKING",
          "ENDED": "ENDED",
        }
      };

      // VideoAnalytics.Analytics
      var analyticsObj = a.Analytics = {};
      var configsObj = {};
      analyticsObj.init = function(viewerId, configs) {
        if (!viewerId) {
          viewerId = '';
        }

        var deviceOs = configs[constantsObj["DEVICE_OS"]].toLowerCase().includes('linux') ? 'Linux' : configs[constantsObj["DEVICE_OS"]];

        setConfigsObj("VIEWER_ID", viewerId);
        setConfigsObj("GATEWAY_URL", configs[constantsObj["GATEWAY_URL"]]);
        setConfigsObj("DEVICE_OS", deviceOs);
        setConfigsObj("DEVICE_OS_VERSION", configs[constantsObj["DEVICE_OS_VERSION"]]);
        setConfigsObj("DEVICE_MODEL", configs[constantsObj["DEVICE_MODEL"]]);
        setConfigsObj("DEVICE_BRAND", configs[constantsObj["DEVICE_BRAND"]]);
        setConfigsObj("DEVICE_MANUFACTURER", configs[constantsObj["DEVICE_MANUFACTURER"]]);
        setConfigsObj("DEVICE_TYPE", configs[constantsObj["DEVICE_TYPE"]]);
        setConfigsObj("PLAYER_FRAMEWORK_NAME", configs[constantsObj["PLAYER_FRAMEWORK_NAME"]]);
        setConfigsObj("PLAYER_FRAMEWORK_VERSION", configs[constantsObj["PLAYER_FRAMEWORK_VERSION"]]);
        setConfigsObj("PLAYER_NAME", configs[constantsObj["PLAYER_NAME"]]);
        setConfigsObj("DEVICE_UUID", configs[constantsObj["DEVICE_UUID"]]);
      }
      analyticsObj.buildVideoAnalytics = function() {
        if (Object.keys(configsObj).length &lt; 1) {
          reportError("VideoAnalytics.Analytics.buildVideoAnalytics: Call VideoAnalytics.Analytics.init() first");
          return;
        }
        return new VideoAnalytics();
      }

      const setConfigsObj = function(id, data) {
        if (data) {
          configsObj[constantsObj[id]] = data;
        }
      }

      const getConfigsObj = function(id) {
        return configsObj[constantsObj[id]];
      }

      // class VideoAnalytics
      const VideoAnalytics = function() {
        var session = this;
        session.id = Math.floor(Math.random() * 900000000000) + 100000000000;
        session.initTime = new Date();
        session.assetName = null;
        session.bitrate = 0;
        session.avgBitrate = 0;
        session.bitrateCount = 0;
        session.streamUrl = null;
        session.events = [];
        session.streamType = null;
        session.videoWidth = null;
        session.videoHeight = null;
        session.video = null;
        session.eventCount = 0;
        session.reportCount = 0;
        session.tags = {};
        session.network = null;
        session.lastState = null;
        session.isSeeking = false;
        session.reportTimer = null;
        session.bufferingTimer = null;
        session.lastReportPlayerTime = 0; // player currentTime
        session.isFirstPlay = 0; // not yet played = 0, first played = 1, reported vst = 2
        session.isVSF = false; // only need to report once
        session.isVPF = false; // only need to report once
        session.lastEventTime = session.initTime;
        session.totalPlayingTime = 0;
        session.totalPauseTime = 0;
        session.totalBufferingTime = 0;
        session.totalErrorTime = 0;

        const sendToServer = function() {
          var timeCurrent = new Date();
          var xhr = new XMLHttpRequest();
          xhr.open("POST", getConfigsObj("GATEWAY_URL"), true);
          xhr.setRequestHeader('Content-Type', 'application/json');
          xhr.timeout = 10000;

          if (session.events.length &lt; 1) {
            session.events = [{
              "t": constantsObj.Playback.DATA_SAMPLES,
              "st": timeCurrent - session.initTime,
              "pht": Math.floor(session.video.currentTime * 1000),
              "seq": session.eventCount,
              "ps": session.lastState,
            }];
            session.eventCount += 1;
            session.countTime(timeCurrent);
          }
          var reportData = {
            "reportTime": timeCurrent.getTime(),
            "seq": session.reportCount,
            "tags": session.tags,
            "pht": Math.floor(session.video.currentTime * 1000),
            "br": session.bitrate,
            "ct": session.network ? session.network : "WiFi",
            "an": session.assetName,
            "url": session.streamUrl,
            "vid": getConfigsObj("VIEWER_ID"),
            "sid": session.id,
            "pn": getConfigsObj("PLAYER_NAME"),
            "pm": {
              "os": getConfigsObj("DEVICE_OS"),
              "dvm": getConfigsObj("DEVICE_MODEL"),
              "dvb": getConfigsObj("DEVICE_BRAND"),
              "dvt": getConfigsObj("DEVICE_TYPE"),
              "dvma": getConfigsObj("DEVICE_MANUFACTURER"),
              "osv": getConfigsObj("DEVICE_OS_VERSION"),
              "sno": getConfigsObj("DEVICE_UUID"),
            },
            "fw": getConfigsObj("PLAYER_FRAMEWORK_NAME"),
            "fwv": getConfigsObj("PLAYER_FRAMEWORK_VERSION"),
            "evs": session.events,
            "lv": session.streamType === constantsObj.StreamType.LIVE,
            "w": session.video.videoWidth,
            "h": session.video.videoHeight,
            "contentLength": Math.floor(session.video.duration),
            "rs": "ONLINE",
            "sdk": "WebJS-2.0",
          };
          if (session.avgBitrate) {
            reportData.accdata = session.avgBitrate * 10;
          }
          reportLog('reportToServer: '+JSON.stringify(reportData))

          let lastEventNo = session.events[session.events.length-1].seq;
          xhr.send(JSON.stringify(reportData));
          xhr.onload = function() {
            let idx = session.events.findIndex(d =&gt; d.seq === lastEventNo);
            session.events = session.events.slice(idx + 1);
            session.reportCount += 1;
            session.isVSF = false;
            session.isVPF = false;
            if (session.isFirstPlay === 1) {
              session.isFirstPlay = 2;
            }
          }
        }

        session.reportPlaybackMetadata = function(metadata, video) {
          session.video = video;
          session.assetName = metadata[constantsObj.ASSET_NAME];
          session.streamUrl = metadata[constantsObj.STREAM_URL];
          session.streamType = metadata[constantsObj.STREAM_TYPE];
          session.network = metadata[constantsObj.NETWORK];
          session.tags = metadata[constantsObj.TAGS];
          session.tags.NetStatus = metadata[constantsObj.NETWORK];
        }

        session.reportPlaybackEvent = function(eventType, eventData, msg) {
          if (eventType === constantsObj.Playback.BITRATE) {
            if (eventData) {
              session.bitrate = eventData;
            }
            return;
          }
          let timeCurrent = new Date();
          let event = {
            "t": eventType,
            "st": timeCurrent - session.initTime,
            "pht": Math.floor(session.video.currentTime * 1000),
            "seq": session.eventCount,
            "ps": session.lastState, // player state
            "br": session.bitrate,
          }
          if (eventType === constantsObj.Playback.PLAYER_STATE) {
            let lastPlayerStateEvent = session.events.findLast((event)=&gt;event.t === constantsObj.Playback.PLAYER_STATE);
            if (lastPlayerStateEvent &amp;&amp; lastPlayerStateEvent.ps === eventData) {
              return;
            }
            clearInterval(session.bufferingTimer);
            session.bufferingTimer = null;
            session.countTime(timeCurrent);
            event.ps = eventData;
            if (!session.isFirstPlay &amp;&amp; eventData === constantsObj.PlayerState.PLAYING) {
              session.isFirstPlay = 1;
            }
            if (eventData === constantsObj.PlayerState.ERROR &amp;&amp; msg) {
              event.msg = msg;
              if (session.isFirstPlay) {
                session.isVPF = true;
              } else {
                session.isVSF = true;
              }
            }
            if (eventData === constantsObj.PlayerState.BUFFERING &amp;&amp; !session.isSeeking) {
              let lct = session.lastReportPlayerTime;
              let ct = Math.floor(session.video.currentTime);
              session.bufferingTimer = setInterval(function () {
                if (!session.isSeeking &amp;&amp; lct !== ct) {
                  clearInterval(session.bufferingTimer);
                  session.reportPlaybackEvent(constantsObj.Playback.PLAYER_STATE, constantsObj.PlayerState.PLAYING);
                } else if (session.isSeeking) {
                  clearInterval(session.bufferingTimer);
                }
                lct = session.lastReportPlayerTime;
                ct = Math.floor(session.video.currentTime);
              }, 1000);
            }
            session.lastReportPlayerTime = Math.floor(session.video.currentTime);
          } else if (eventType === constantsObj.Playback.SEEK_STARTED) {
            event.t = constantsObj.Playback.PLAYER_SEEK;
            event.ps = constantsObj.PlayerState.SEEKING;
            event.act = 'pss';
            event.skto = Math.floor(session.video.currentTime);
            session.isSeeking = true;
          } else if (eventType === constantsObj.Playback.SEEK_ENDED) {
            event.t = constantsObj.Playback.PLAYER_SEEK;
            event.ps = constantsObj.PlayerState.SEEKING;
            event.act = 'pse';
            event.skto = Math.floor(session.video.currentTime);
            session.isSeeking = false;
          /* } else if (eventType === constantsObj.Playback.BITRATE) {
            if (!eventData &amp;&amp; eventData !== 0) return;
            session.bitrate = eventData;
            session.avgBitrate = Math.floor((session.avgBitrate * session.bitrateCount + eventData) / (session.bitrateCount + 1));
            session.bitrateCount += 1; */
          } else if (eventType === constantsObj.Playback.TRACK_CHANGE) {
            event.t = constantsObj.Playback.TRACK_CHANGE;
            event.w = session.video.videoWidth;
            event.h = session.video.videoHeight;
            event.br = eventData.bitrate;
            session.bitrate = eventData.bitrate;
          } else if (eventType === constantsObj.Playback.SESSION_END) {
            event.ps = constantsObj.PlayerState.ENDED;
          }
          reportLog('reportPlaybackEvent: '+JSON.stringify(event))
          session.events.push(event);
          session.eventCount += 1;
          session.lastState = event.ps;

          if (eventType === constantsObj.Playback.PLAYER_STATE &amp;&amp; eventData === constantsObj.PlayerState.INIT) {
            sendToServer();
            session.reportTimer = setInterval(function() {
              sendToServer();
            }, 10000);
          }
        }

        session.reportPlaybackError = function(msg) {
          session.reportPlaybackEvent(constantsObj.Playback.PLAYER_STATE, constantsObj.PlayerState.ERROR, msg);
        }

        session.reportPlaybackEnded = function() {
          session.reportPlaybackEvent(constantsObj.Playback.SESSION_END);
        }

        session.release = function() {
          clearInterval(session.reportTimer);
          session.reportTimer = null;
          if (session.events.length &gt; 0) {
            sendToServer();
          }
        }

        session.countTime = function(timeCurrent) {
          if (session.lastState === constantsObj.PlayerState.PLAYING) {
            session.totalPlayingTime = session.totalPlayingTime + (timeCurrent - session.lastEventTime);
          } else if (session.lastState === constantsObj.PlayerState.PAUSED) {
            session.totalPauseTime = session.totalPauseTime + (timeCurrent - session.lastEventTime);
          } else if (session.lastState === constantsObj.PlayerState.BUFFERING) {
            session.totalBufferingTime = session.totalBufferingTime + (timeCurrent - session.lastEventTime);
          } else if (session.lastState === constantsObj.PlayerState.ERROR) {
            session.totalErrorTime = session.totalErrorTime + (timeCurrent - session.lastEventTime);
          }
          session.lastEventTime = timeCurrent;
        }
      }

      // common functions
      const reportError = function(message) {
        console.error('Video Analytics: '+message);
      }

      const reportLog = function(message) {
        if (window.video_debug) {
          console.log('Video Analytics: '+message);
        }
      }
    }()
  }(), a
});
</pre></body></html>