· 5 years ago · Nov 02, 2020, 12:16 PM
1<!DOCTYPE html>
2<html lang="ru">
3<head>
4 <meta charset="utf-8"/>
5 <title></title>
6 <script type="text/javascript" src="//imasdk.googleapis.com/js/sdkloader/ima3.js"></script>
7 <script src="https://static.kost.tv/player/playerjs.js"></script>
8 <style>
9 html,
10 body {
11 height: 100%;
12 margin: 0;
13 }
14
15 body {
16 overflow: hidden;
17 }
18
19 #player {
20 height: 100%;
21 }
22 </style>
23</head>
24<body>
25<div id="player"></div>
26
27<script>
28 var origin = location.origin || "";
29 var ancestorOrigins = location.ancestorOrigins || [];
30 var ancestorOriginsArray = [];
31 if (ancestorOrigins.length) {
32 origin = ancestorOrigins[ancestorOrigins.length - 1];
33 for (var i = 0; i < ancestorOrigins.length; i++) {
34 ancestorOriginsArray.push(ancestorOrigins[i]);
35 }
36 }
37
38 ancestorOriginsArray.unshift(location.origin);
39
40 var player = new Playerjs({
41 id: "player",
42 file: "https://cdn.kost.tv/kintavr/blank.mp4",
43 preroll: "js:getPreroll",
44 autoplay: 0,
45 volume: 0
46 });
47
48 var isPlayerReady = false;
49 var shouldStartAfterInit = false;
50
51 var target = parent;
52 var config = {};
53
54 var sentAdStarted = false;
55 var adImp = false;
56 var adStarted = false;
57
58 var prerollsRequested = 0;
59 var completes = 0;
60 var attempts = 0;
61 var views = 0;
62
63 var sentLoaded = false;
64 var sentReady = false;
65
66 var vastArray = [];
67
68 var visibility = null;
69
70 window.addEventListener("message", function (e) {
71 var event = e.data;
72 console.log(event);
73 if (event.target === "_ve_iframe") {
74 switch (event.event) {
75 case "config":
76 if (!sentReady) {
77 sentReady = true;
78 config = event.info;
79 sendMessage("gotConfig");
80 }
81 break;
82 case "target":
83 if (!sentLoaded) {
84 sentLoaded = true;
85 target = e.source;
86 sendMessage("load");
87 }
88 break;
89 case "start":
90 if (isPlayerReady) {
91 player.api("play");
92 } else {
93 shouldStartAfterInit = true;
94 }
95 break;
96 case "changeVolume":
97 player.api('volume', event.info); // For change player volume through api
98 break;
99 }
100 }
101 });
102
103 function PlayerjsEvents (event, type, value) {
104 switch (event) {
105 case "init":
106 isPlayerReady = true;
107 if (shouldStartAfterInit) {
108 player.api("play");
109 }
110 break;
111 case "play":
112 console.log('Reached cont');
113 sendMessage("_ve_sequence_end");
114 break;
115 case "end":
116 break;
117 case "vast_load":
118 adImp = false;
119 break;
120 case "vast_start":
121 if (!sentAdStarted) {
122 sendMessage("_ve_sequence_start");
123 sentAdStarted = true;
124 }
125 sendMessage('_ve_ad_start')
126 case "vast_Impression":
127 if (!adImp) {
128 adStarted = true
129 views++
130 sendMessage("_ve_ad_imp", views);
131 adImp = true;
132 }
133 break;
134 case "vast_click":
135 sendMessage("click");
136 break;
137 case "vast_complete":
138 if (adImp) {
139 completes++;
140 sendMessage("complete", completes);
141 }
142 break;
143 case 'visibility':
144 if (type === 'player') {
145 visibility = value
146 }
147 break;
148 case 'vast_volume':
149 var playerValue = JSON.parse(value);
150 var volume = playerValue.volume || 0;
151 sendMessage("_ve_ad_volume", volume);
152 }
153 }
154
155 function getPreroll () {
156 console.log('Preroll lookup');
157 var firstPack = config.vastPacks[0];
158
159 if (!firstPack) {
160 console.log("no pack for current turn");
161 sendMessage("_ve_sequence_end");
162 return "";
163 }
164
165 if (!vastArray.length) {
166 vastArray = firstPack;
167 }
168
169 if (adStarted) {
170 adStarted = false;
171 var nextPack = config.vastPacks[views];
172
173 if (nextPack) {
174 vastArray = vastArray.concat(nextPack)
175 }
176 }
177
178 if (prerollsRequested >= vastArray.length) {
179 prerollsRequested = 0;
180 attempts++
181 }
182
183 prerollsRequested++;
184
185 console.log("views:", views);
186 console.log("attempts:", attempts);
187 console.log("prerollsRequested:", prerollsRequested);
188
189 if (views >= config.maxViews) {
190 console.log("reached max views");
191 sendMessage("_ve_sequence_end");
192 return "";
193 }
194
195 if (attempts >= config.maxAttempts) {
196 console.log("all attempts are used");
197 sendMessage("_ve_sequence_end");
198 return "";
199 }
200
201 var currentPreroll = vastArray[prerollsRequested - 1];
202 console.log("currentPreroll:", currentPreroll);
203 if (currentPreroll) {
204 currentPreroll = updateUrlParameter(
205 currentPreroll,
206 "dc",
207 btoa(JSON.stringify(ancestorOriginsArray))
208 );
209 currentPreroll = updateUrlParameter(currentPreroll, "dl", origin);
210 currentPreroll = addSizeParams(currentPreroll);
211 currentPreroll = addVisibilityParams(currentPreroll);
212
213 console.log('Found PR:' + currentPreroll || "");
214 return currentPreroll || "";
215 }
216 console.log('Reached end');
217 sendMessage("_ve_sequence_end");
218 return "";
219 }
220
221 function sendMessage (event, info) {
222 console.log("sending message to parent");
223 target.postMessage(
224 {
225 target: "_ve_vpaid",
226 event: event,
227 info: info
228 },
229 "*"
230 );
231 }
232
233 function updateUrlParameter (uri, key, value) {
234 value = encodeURIComponent(value);
235 var i = uri.indexOf("#");
236 var hash = i === -1 ? "" : uri.substr(i);
237 uri = i === -1 ? uri : uri.substr(0, i);
238
239 var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
240 var separator = uri.indexOf("?") !== -1 ? "&" : "?";
241 if (uri.match(re)) {
242 uri = uri.replace(re, "$1" + key + "=" + value + "$2");
243 } else {
244 uri = uri + separator + key + "=" + value;
245 }
246 return uri + hash;
247 }
248
249 function getCurrentSize () {
250 var playerElement = document.getElementById('player');
251
252 if (playerElement) {
253 var currentWidth = playerElement.clientWidth || "";
254 var currentHeight = playerElement.clientHeight || "";
255
256 return { width: currentWidth, height: currentHeight };
257 }
258 return null;
259 }
260
261 function addSizeParams (url) {
262 if (url) {
263 var currentSize = getCurrentSize();
264
265 if (currentSize) {
266 var updatedUrl = updateUrlParameter(url, "width", currentSize.width);
267 updatedUrl = updateUrlParameter(updatedUrl, "height", currentSize.height);
268
269 return updatedUrl;
270 }
271 }
272 return url
273 }
274
275 function addVisibilityParams (url) {
276 if (visibility !== null) {
277 return updateUrlParameter(url, "vi", visibility);
278 }
279 return url;
280 }
281
282 // initSentry('Player.html')
283 // function initSentry (tag) {
284 // Sentry.init({
285 // dsn: "https://1f831a1bd92f4337bb29f20f0f3b21da@sentry.kost.tv/5",
286 // environment: JSON.stringify("player"),
287 // whitelistUrls: [/static\/player/],
288 // })
289 //
290 // Sentry.configureScope((scope) => {
291 // scope.setTag('project-type', tag)
292 // })
293 // }
294</script>
295
296<!-- pixels -->
297<img alt="" src="https://redirect.frontend.weborama.fr/rd?url=https%3A%2F%2Fpixel.kost.tv%2Fweborama%2F%3Fweborama_id%3D%7BWEBO_CID%7D" />
298
299</body>
300</html>