- ID de l'analyse :
- b9ea35d4-d5e5-4323-9158-e659f9c43923Terminée
- URL soumise :
- https://vivamax.craffstream.com/player/dist/video-analytics-sdk.js
- Fin du rapport :
Liens : 0 trouvé(s)
Liens sortants identifiés à partir de la page
Variables JavaScript : 3 trouvée(s)
Les variables JavaScript globales chargées dans l'objet fenêtre d'une page sont des variables déclarées en dehors des fonctions et accessibles depuis n'importe quel endroit du code au sein du champ d'application actuel
Nom | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
Messages de journal de console : 1 trouvé(s)
Messages consignés dans la console web
Type | Catégorie | Enregistrement |
---|---|---|
error | network |
|
HTML
Le corps HTML de la page en données brutes
<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>