Proč se normální lidé dívají na nenormální porno? A kdy s tím jít k lékaři

19. 2. 2021

Sdílet

ROZHOVOR – Nedávné kauzy ukázaly, že na pornografických stránkách je řada videí, které lze označit za „extrémní“ či „deviantní“. Jejich aktéři o natáčení nevěděli, byli k němu přinuceni, jsou nezletilí, v bezvědomí, vystavováni násilí… Jsou diváci takového porna spoluviníky? Sexuolog Ivo Procházka je dělí do několika skupin.

Psychiatr Ivo Procházka se zabývá lidskou sexualitou v Sexuologickém ústavu VFN a 1. LF UK a připravuje také odborné posudky pornografie pro policii v případě podezření na spáchání trestného činu. Proto se něj obracím při hledání odpovědí na otázky spojené s aktuálními kauzami velkých serverů „pro dospělé“. Nejprve ve stručnosti jejich připomenutí.

Zneužívání, děti, násilí

Americký novinář Nicholas Kristof ve svém sloupku v deníku The New York Times na začátku loňského prosince upozornil, za jakých podmínek vznikají některá z videí na velkém pornoserveru Pornhub. Tyto stránky vedle profesionální pornografie vydělávají na šmírování, zveřejňování soukromých videí, ale i znásilňování, sexuálním násilí na dětech a nezletilých, týrání dospělých. Popsal, jak obětem, nedobrovolným či nevědomým aktérům publikovaných nahrávek, tato videa ničí životy, končí na psychiatrii, páchají sebevraždy.

Na další případy upozornili v tuzemsku novináři Deníku N Lukáš Prchal a Jakub Zelenka, kdy v sérii článků popsali fungování serveru Xvideos. Zde mělo docházet k natáčení „extrémní“ pornografie bez předchozího souhlasu žen k podobným praktikám. „Několik jich popsalo, že odešly roztrhané, krvácející a bez možnosti ovládat vyměšování,“ píší autoři. I na tyto stránky pak bylo možné nahrávat jakýkoliv obsah, bez kontroly se tak na web může dostávat nelegální pornografie znázorňující oběti násilí, mladistvé či tzv. revenge porno (zveřejnění intimních záběrů coby pomsta bývalému partnerovi ap.).

Kauzy vedly a snad ještě povedou k upřesňování pravidel a standardů, které by měly na podobných webech platit, k osvětě například mezi uživateli sociálních sítí a dospívajícími, opatřením technického rázu i finančním dopadům na provozovatele stránek (podrobněji se jim věnuje například David František Wagner v článku Spravedlivější porno je možné na webu Heroine.cz). To vše ve snaze o eliminaci podobných případů do budoucna.

Kdo se na „to“ dívá?

Ale je tu ještě jeden aspekt, kterému dosud nebyla věnována pozornost. Tyto a podobné stránky mají miliardy návštěvníků. Neexistují data o tom, kolik z nich se dívá nejen na běžné porno, ale právě na „extrémní“ videa. Bez nich by však tento byznys nemohl fungovat.

Kdo jsou lidé, kteří se ukájejí nad zneužívanými dětmi, dusícími se ženami či dívkami, které křičí bolestí? Považují scénky za nahrané, nebo tuší či vědí, že jde o realitu? A lze je – spolu s těmi, kdo tato videa produkují, publikují a vydělávají na nich – považovat za spoluviníky?

„Často skutečně není lehké poznat, zda jde o nelegální pornografii, týká se to zejména věku aktérů,“ říká sexuolog Ivo Procházka. „A když už divák ‚deviantní‘ pornografie tuší, jak se věci mají, vždycky si najde nějakou výmluvu, že je to nakašírované, není to doopravdy…“ Pak jsou ti, kdo vědí…


Autor: Vitalia.cz / Karel Choc

„Porno nemusí být vždy o sexu. Někoho vzrušuje jen násilí v něm,“ říká psychiatr a sexuolog Ivo Procházka

Můžeme na úvod zkusit vymezit, kde leží hranice? Jaká pornografie je ještě v pořádku? Je to taková, se kterou dal aktér souhlas?

U nás je celkem jednoznačně dané, co je nelegální pornografie. Jsou to tři okruhy: spojení agrese a sexuality; dětí a sexuality; a pornografie ponižující lidskou důstojnost.

Může někdo nevidět, že to, na co se dívá, není v pořádku? Nebo je vzrušující právě to, že je „za hranou“?

Pro velkou část lidí je to otázka zvědavosti. Kliknou si jednou a již se nikdy nevrátí. Jen menší část začne podobný obsah vyhledávat. Distributoři také „nahánějí“ diváky tím, že k běžné pornografii přibalí malou část s obsahem na pomezí legálnosti nebo už za ní. Měl jsem pacienta, který si stáhl velký balík pornografie, devadesát procent tvořil klasický heterosexuální obsah, k tomu desetina byla videa s mladistvými. Obsah nesmazal, v jeho počítači jej našla policie a byla mu uložena ochranná léčba.

Pro účely pornografie je hranice osmnáct let, nikoli patnáct jako pro legální pohlavní styk. Nemusí být snadné poznat, že osoby na videu jsou mladší. V téhle branži se hodně lže, herci o svém věku, firmy se chrání a uvedou „všechny naše objekty jsou starší osmnácti let“. Jindy zas dvacetileté ženy „hrají“ náctileté holčičky. Udělají si culíčky a už z nich máte školačky.

Copak se nedá vycítit, co je zahrané a co realita?

Věk se v mnoha případech poznává špatně, i další věci lze zahrát. Samozřejmě, když vidíte skutečné poranění, skutečný pláč, je to něco jiného – ale ne vždy to musíte poznat.

Kdo se na podobné věci dívá? Je to „normální“, nebo to je známka problému? Dá se tu mluvit o nějaké poruše?

Může jít o poruchu, ale nemusí. Může jít třeba o sadismus. Vzpomínám si na případ, kdy produkce oslovovala v ČR mladé muže, kteří vycházeli z vězení. Souhlasili s natáčením, které pak ale bylo mnohem násilnější, než tušili. Mlčeli, protože podepsali pro ně velmi nevýhodné smlouvy. Na případ se přišlo až na upozornění ze zahraničí, kde byla videa distribuována, někdo je nahlásil tamním orgánům a rozjelo se vyšetřování.

U sadomasochistické pornografie jsou různé stupně, může být spíše na symbolické úrovni, s dominou, která muže švihá bičíkem, až po velmi drsné praktiky. To je třeba odlišovat.

A nemusí jít jen o sadomasochismus, také agresivní psychopaty vzrušuje násilná pornografie, ale ne sexuálně. Porno totiž nemusí být vždy jen o sexu. Vzrušuje je jen to násilí. Vezměte si i některé nepornografické filmy, to je často docela síla, co všechno se tam odehrává…

Ale to jsou klasické filmy, herci vědí, do čeho jdou. Mně jde právě o tu pornografii, kdy protagonisté jsou oběti, nehrají, je na nich skutečně pácháno násilí…

Diváci takové deviantní pornografie někdy věří, jindy si namlouvají, že to je nahrané. Když už se někdo dívá a ví, že to hrané není, tam už musí nějaká motivace být.


Autor: Vitalia.cz / Karel Choc

Pomoc odborníků vyhledá ve spojitosti s deviací jen velmi málo lidí. Mají strach nebo se stydí. „Přijďte včas. Váš stav akceptujeme a dodržujeme lékařské tajemství,“ vzkazuje sexuolog.

Pokud divák extrémního porna ví, že je skutečné, cítí se třeba provinile?

Kdo toto vyhledává cíleně, může se někdy, ne vždy, cítit provinile. Říká si: „Už jsem to zase nevydržel. Zase jsem se díval, jak zneužívají jedenáctileté děti…“

Vyhledá takový člověk pomoc?

Málokdy. Spíše ne. Občas se někdo chce poradit, jestli je normální, že se dívá na určité věci. Společenská stigmata s tímto spojená jsou tak velká, že lidí, kteří s podobným problémem sami vyhledají odbornou pomoc, je strašně málo; mluvíme tu o jednotkách případů. Přijít k lékaři, nebo třeba ke knězi, a přiznat: „Já se sexuálně vzrušuji, když vidím soulož s malou holčičkou…“ to udělá málokdo. Nevědí, jestli to lékař musí hlásit, bojí se.

Co byste jim v podobném případě doporučil?

Lidé by měli vědět, že my jejich stav akceptujeme. Že pokud přijdou dobrovolně, je velká šance, že nikdy nic neprovedou. Nemusí mít strach se na nás obrátit, s ničím, a to ani tehdy, když ještě nejsou plnoletí. Dokonce, pokud již došlo k nějaké dejme tomu drobné trestné činnosti, je takto možné předejít něčemu vážnějšímu. Není to tak, že pokud se někdo svěří, že se třeba obnažuje v parku, okamžitě bychom ho hlásili policii.

Myslíte si, že divák extrémní pornografie vůbec pomyslí na oběť daného videa? Pocítí empatii?

Dost často ne. Možná ti, kteří mají výčitky svědomí ze sledování podobného obsahu. Právě pro pachatele sexuálních deliktů je jedním z typických rysů nedostatek empatie. Kdo ji má, snaží se podobnému obsahu i chování vyhnout. Někdy je nutkání, deviace silnější a člověk je nezvládne. A může to být takový ten „slušný člověk“, který do té doby nic neprovedl. Setkal jsem se s případem muže, který měl tak dlouho sadistické představy, až napadl ženu a velmi těžce ji poranil. Když si uvědomil, co provedl, skočil v sebevražedném úmyslu ze čtvrtého patra.

To jsme se již dostali od sledování extrémní pornografie k závažnému trestnému činu. Může se násilí z porna přenést i do reálného sexuálního života dotyčného?

Podle studie, která se tímto zabývala, to není vázáno ani tak na to, jestli jde o porno, ale na zpodobnění násilí. Jde o lidi, kteří nejsou deviantní, ale například bijí svoji partnerku, jsou násilní při sexu, často to bývá ve spojení s alkoholem, porno se jim třeba i líbí, ale zejména jim jde o agresi, ta je pro ně to hlavní.

Agresivní filmy, ať pornografické, nebo ne, vliv zřejmě mít mohou; klasické porno nikoli, na to se dívá v určitém věku asi většina mladíků a mužů. Naopak, pokud nám někdo, zejména když se dopustil sexuálního deliktu, řekne: „Na porno jsem se nikdy nedíval, je to hnusný,“ zvažujeme u něj sexuální deviaci. Ukazuje to, že má se sexualitou nějaký problém. Ale to mluvíme o klasickém pornu.


Autor: Vitalia.cz / Karel Choc

„Na sledování klasické pornografie není nic špatného, ale jako učebnice sexuální výchovy to ideální není.“

Je tu možnost, že deviant své nekalé myšlenky uspokojí „deviantní“ pornografií, a neuškodí díky tomu v reálném životě? Že porno zafunguje jako ventil?

To je velká otázka. Pokud je někdo pedofil, je to dobře, aby se díval na dětské porno, nebo není? Muži většinou sledují porno jako určitou substituci. Muž má chuť na sex, není s kým ho realizovat, tak si pustí porno. Když jde o pedofila, má touhu po deviantním sexu, mohl by se podívat na takové porno, uklidnit se, uvolnit se a zase fungovat dál. Ale ne u všech to takhle funguje. U někoho může pornografie působit jako start sexuální aktivity. Je tedy otázka, co to udělá s deviantem – jestli ho to spíše rozjede do deviantní aktivity, nebo jestli zafunguje jako substituce, kdy ztratí zájem o deviantní aktivitu. Ve většině případů je to tahle možnost, ale nelze vyloučit, že to u jiného může působit povzbudivým způsobem.

Každopádně není sporu o tom, že když někdo natočí porno, při kterém zneužije dítě, je to špatně. S dnešními technologiemi by se to dalo udělat zcela jinak, nicméně i tak je to nelegální.

V současnosti mají prý mladí muži zkreslené představy o tom, co je normální sex právě vlivem pornografie…

Existuje vtip: „Porno dává mladým lidem nezdravou a nereálnou představu, jak rychle přijde instalatér do vašeho domu.“ Ale je to tak, porno skutečně vede k určitým mylným předpokladům, třeba pokud jde o všeobecnou ochotu k pohlavnímu styku. Na sledování klasické pornografie není nic špatného, ale jako učebnice sexuální výchovy to ideální není.

Je pornografie čím dál násilnější?

Nezdá se. Je ovšem něco pravdy na feministických teoriích, že v podstatě každé porno, každá prostituce, je násilím na ženách, dělá z nich sexuální objekt. Na druhou stranu, pokud se k tomu žena sama rozhodne, je to její věc. Samozřejmě pokud ji nikdo nenutí, nepodvádí, nezneužívá. Komerční sex je v tomto vždycky na hraně.

Mohlo by pomoci, aby tu byly alespoň určité limity. Pokud se někdo dívá na podobný obsah, o jakém jsme mluvili, na extrémní pornografii, je spoluviníkem toho, co se děje. Dá se to takto říct?

Samozřejmě. Když se na to nebude nikdo dívat, nebude to vznikat. Je to byznys. Pokud je zákazník, je i zboží.

MUDr. Ivo Procházka, CSc.

Psychiatr a sexuolog, pracuje v Sexuologickém ústavu Psychiatrické kliniky Všeobecné fakultní nemocnice v Praze a 1. lékařské fakulty Univerzity Karlovy. Vedoucí lékař ústavu, věnuje se zejména transgender problematice, HIV pacientům i otázkám sexuální orientace.

Autor článku

Redaktorka, editorka, dlouholetá šéfredaktorka serveru Vitalia.cz (do června 2022)

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »