- 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
As ligações de saída identificadas na página
Variáveis JavaScript · 3 encontradas
Variáveis JavaScript globais carregadas no objeto janela de uma página são variáveis declaradas fora das funções e acessíveis de qualquer parte do código dentro do âmbito atual
Nome | Tipo |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
Mensagens de registo da consola · 1 encontradas
Mensagens registadas na consola web
Tipo | Categoria | Registo |
---|---|---|
error | network |
|
HTML
O corpo HTML em bruto da página
<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 && define.amd ? define(b) : "object" == typeof exports && (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 < 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 < 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 => 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)=>event.t === constantsObj.Playback.PLAYER_STATE);
if (lastPlayerStateEvent && lastPlayerStateEvent.ps === eventData) {
return;
}
clearInterval(session.bufferingTimer);
session.bufferingTimer = null;
session.countTime(timeCurrent);
event.ps = eventData;
if (!session.isFirstPlay && eventData === constantsObj.PlayerState.PLAYING) {
session.isFirstPlay = 1;
}
if (eventData === constantsObj.PlayerState.ERROR && msg) {
event.msg = msg;
if (session.isFirstPlay) {
session.isVPF = true;
} else {
session.isVSF = true;
}
}
if (eventData === constantsObj.PlayerState.BUFFERING && !session.isSeeking) {
let lct = session.lastReportPlayerTime;
let ct = Math.floor(session.video.currentTime);
session.bufferingTimer = setInterval(function () {
if (!session.isSeeking && 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 && 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 && 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 > 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>