Za drogovým rituálem do pralesa. Lékař zkoumá, zda ayahuasca může léčit deprese

9. 5. 2025

Sdílet

Dokáží některé drogy léčit mysl? A mohou západní medicíně pomoci rituály amazonských šamanů? Odpovědi hledá skupina českých vědců a lékařů, kteří se zabývají léčbou deprese. Část jejich snahy zachycuje dokument Doktor na tripu režiséra Davida Čálka.

Do kin míří hodinu a půl trvající dokumentární film Doktor na tripu režiséra a kameramana Davida Čálka. Ten se skupinou vedenou vědcem a psychiatrem z Národního ústavu duševního zdraví (NUDZ) Tomášem Páleníčkem do Jižní Ameriky podíval v roce 2019. Páleníčkovi se tehdy po čtyřech letech snažení podařilo získat povolení navštívit tamější indiánský kmen Huni Kuin. Byli vůbec prvními bělochy, kteří svolení úřadů dostali.

Co se dozvíte v článku
  1. EEG z džungle
  2. Letadlem i kánoí
  3. A mysl se rozjasnila
  4. Jen s odborníkem
  5. Terapií prošel i režisér
  6. S ayahuascou zatím ne
  7. Rituál spojí mysl účastníků
  8. Dokument míří do kin

EEG z džungle

Neurovědce a jeho kolegy do pralesa přivedl výzkum halucinogenních drog neboli psychedelik, které mají potenciál léčit deprese a úzkosti. 

Do Jižní Ameriky se skupina vydala, aby její členové prošli rituálem s požitím odvaru známého pod názvem ayahuasca, jenž obsahuje halucinogenní dimethyltryptamin (DMT). Kromě toho bělošským účastníkům expedice vědci monitorovali s pomocí elektroencefalografie (EEG) aktivitu mozku, aby zjistili, co se v něm odehrává při rituálu a požití drogy. Ayahuasca se získává z jednoho druhu lián

Rozhodli jsme se uspořádat expedici, v rámci které bychom přímo v pralese nahrávali EEG u účastníků původních ceremonií, při kterých byla podána ayahuasca, a podívali se na to, jaký je vliv ceremonie na prožívání a fyziologii mozku účastníků experimentu, vysvětluje v dokumentu psychiatr a neurovědec Jiří Horáčekpřednosta Kliniky psychiatrie a lékařské psychologie 3. lékařské fakulty Univerzity Karlovy a NUDZ.

Předpokládáme, že šaman a písně synchronizují lidi mezi sebou. To je něco, co bychom měli být schopni změřit s pomocí EEG. Podívat se na to, jestli se mozková aktivita jednotlivých lidí navzájem napojuje jedna na druhou, dodal před expedicí Páleníček s tím, že pro účinek psychedelik je nesmírně důležité, v jakém prostředí a s jakými lidmi jsou aplikované.

Nová léčba depresí a dalších duševních nemocí. Ketamin funguje jako rychlé antidepresivum Přečtěte si také:

Nová léčba depresí a dalších duševních nemocí. Ketamin funguje jako rychlé antidepresivum

Letadlem i kánoí

Informace o expedici Neuron do Brazílie a Peru se na veřejnost před pár lety dostala písemně, k přečtení byly například expediční deníky, a ve formě fotografií. Nyní poprvé její některé části může divák vidět na filmových záběrech.

Dokument ukazuje, jak indiánský náčelník přilétá do zasněženého Česka a jak mu Páleníček za účasti kolegů předvádí a v portugalštině vysvětluje, proč a jakým způsobem by chtěli zachytit elektrickou aktivitu mozku při rituálu s ayahuascou.

S odstupem času se pak zhruba desetičlenná výprava včetně Evy Césarové, zakladatelky České psychedelické společnosti, vydává do Brazílie a Peru. Dokumentární film zachycuje jejich putování dodávkou, miniaturním letadlem, kánoí po řece Purus i pěšky pralesem. 

Zajímavým detailem je pak rituál u posvátného stromu, kdy samotnému podání ayahuascy předchází ne moc příjemné šňupání rostlinného pudru, indiány nazývaného rapé.

A mysl se rozjasnila

Druhá linka dokumentu se odehrává v tuzemsku – v Praze a v Klecanech, kde má zázemí NUDZ. 

Deprese není špatná nálada

Dokumentární snímek ukazuje, že deprese je onemocnění, nikoliv špatná nálada, která sama odezní. Depresi pacienti neovlivní vůlí. Jde o stavy, které mění nejen jeho vnímání, ale mohou bolet i fyzicky a pacienta zcela paralizovat.

Přibližuje cesty tří pacientů s depresemi. Popisují, jak z nich není úniku, protože polykání běžných antidepresiv sice prožívání utlumí, ale radost ze života nepřinese. Navíc se často musí brát celý život.

V mozku přestanou fungovat některé procesy a člověk se začne trápit, že není schopný prožívat radost, a dostane se do spirály, kde neustále přemýšlí nad negativními věcmi, popisuje depresi herečka a dokumentaristka Lucie Ingrová, která onemocněla ve třinácti letech.

Právě to, že se lidé zasažení depresí léta pohybují v pomyslné tíživé mlze, je přivede k doktoru Páleníčkovi. V NUDZ pak pacienti sledovaní ve filmu podstupují několik sezení a po nich také kontrolované podání ketaminu, který patří mezi léčiva používaná k navození anestezie. To je další z látek, jejíž vliv na léčbu depresí lékaři zkoumají, není to ale psychedelikum,

Po půl roce (od podání ketaminu, pozn. red.) najednou začal přicházet klid. Úzkosti byly menší a skrytě a plíživě se moje mysl, depresivní a tmavá, začala rozjasňovat. Věcí, kterých jsme se bál, jsem se bát přestal. Věci, které mě rozčilovaly, mě rozčilovat přestaly, vypráví ve filmu Tibor Abel, jenž po smrti syna s manželkou založil nadační fond Úsměv nejen pro Kryštofa (příběh Abelových jsme popisovali zde).

Jen s odborníkem

Zkoumání psychedelik jako slibného léčiva by nemělo povzbuzovat k jejich nelegálnímu užívání. Léčebné použití drogy je vždy spojeno s terapií, kontrolovaným užitím individuálně stanovené dávky, bezpečným prostředím a přítomností odborníka. V opačném případě může být výsledkem třeba rozvinutí duševní nemoci nebo zhoršení úzkostí a depresí.

Diváci by si z filmu neměli udělat závěr, že domácí aplikace jakékoli drogy je může vyléčit z psychické nepohody, dokonce snad z nemoci. To je velice riskantní jen zkoušet, podotýká režisér David Čálek. 

Každý z pacientů, kteří se studie zúčastnili, museli projít sítem důkladných testů, které odhalí případné predispozice k rozvinutí psychických poruch. Navíc psychedelika neúčinkují na všechny typy duševních nemocí, ale pouze na některé. Při léčbě deprese se pak podává nižší než psychoaktivní dávka halucinogenu.

Terapií prošel i režisér

David Čálek záběry pro film sbíral sedm let. K tématu jej přivedla jeho žena, dětská psychiatrička. Nápad sledovat cestu léčby s pomocí drog se zrodil na odborné konferenci v Jeseníku. Tam jsem se poprvé setkal s Tomášem Páleníčkem. Tehdy přemýšlel, že vyrazí mezi původní obyvatele, kteří psychedelika používají stovky let. Byl to jeho sen, ten se ale stával reálnějším a reálnějším, popisuje pro Vitalia.cz režisér Čálek.

Bylo to dobrodružné, protože výzkum jsem začal natáčet v době, kdy jsme nevěděli, jak to všechno dopadne – po konci testů na zvířatech, kdy do výzkumu měli vstoupit zdraví dobrovolníci, vzpomíná. Cestu psychedelik, ač stále pokračuje, dále nenatáčí, i když často dostává otázku, zda bude mít dokument pokračování. To zásadní se stalo v kontaktu s původními obyvateli, kteří s mezinárodním týmem lékařů sdíleli svá tajemství, domnívá se s tím, že Indiáni, kteří v Peru užívají od 13 let ayahuascu každý týden, mají schopnost vnímat realitu šířeji než my.

David Čálek absolvoval kromě studie v NUDZ (s podáním psilocybinu) také rituál v džungli, protože v určitou chvíli se šamanem nemohl být nikdo, kdo látku nepožije. To, že byl účastníkem studie i rituálu, ovlivnilo i směřování jeho filmu.

Na otázku, co pro něj bylo při natáčení nejsilnější, překvapivě dodává, že nešlo o rituál s ayahuascou, ale setkání s pacienty. Otevřeli se našemu natáčení a sdíleli před kamerou psychické těžkosti, vzpomíná. Film přitom zachycuje autentické projevy. Nepostupovali jsme tak, že by ty zážitky byly zachycené zpětně, zahrané, říká režisér, jehož snímek na konci dubna získal cenu za nejlepší komunikaci vědy festivalu Academia film Olomouc.

Cena i to, že projekce byly plné, ukazují, že film nějaký efekt má. Co si z něj má divák odnést, nechávám na něm. Pro mě z práce na něm vyplývá závěr, že moderní technologie nás odvádí od podstaty života. Důležité zůstávají kontakt s člověkem, láska mezi lidmi, opravdové city. Ty pomáhají léčbě i prevenci duševních onemocnění, míní režisér.

S ayahuascou zatím ne

Expedice Neuron je jen zlomkem, byť důležitým, aktivit vědců a lékařů. Například v NUDZ nyní probíhá další studie, tentokrát zaměřená na onkologické pacienty, v níž psychiatři podávají dobrovolníkům další psychedelikům – psilocybin (o studii Psiket jsme psali zde). 

Účinnou látku, která je středobodem rituálů s ayahuascou, nyní vědci v tuzemsku nepoužívají. S DMT zatím nepracujeme, ale předpokládám, že výhledově se to změní, říká pro Vitalia.cz Tomáš Páleníček s tím, že dominantní je nyní terapie s psilocybinem, což je psychedelikum získávané z hub

Aby bylo možné vědecké aktivity financovat, trojice lékařů – spolu s Páleníčkem také Jiří Horáček a Martin Brunovský – před devíti lety založili Nadační fond Psyres. Jeho cílem je shromažďovat finanční prostředky, které by posunuly vědění dál směrem k využití psychedelik v klinické praxi. Psyres rovněž podpořil vznik dokumentárního filmu Doktor na tripu.

Video: Trailer k filmu Doktor na tripu

Zdroj: Youtube.com

Rituál spojí mysl účastníků

Na konci snímku divák vidí, že data naměřená v džungli skutečně ukázala po určitou dobu shodnou aktivitu mozků účastníků rituálu. Výsledky z Jižní Ameriky máme zčásti zanalyzované, ale ještě jsme nedošli do stádia k publikaci v odborném tisku, říká lékař nyní pro Vitalia.cz. Výsledky EEG jsou si podobné. Krom toho, že se mozky v určitém ohledu aktivitou připodobní, tak máme data z hlediska toho, jak vypadala fenomenologie té zkušenosti, i data, jak moc se na konektivitě podílí to, když se zpívá, nebo naopak, když se nezpívá, dodává Páleníček.

Studie ovšem stále není zcela uzavřena. Data analyzujeme a studii chceme dotáhnout v celém kontextu všech účastníků včetně indiánů, protože větší smysl dává podívat se na dynamiku celé té skupiny, vysvětluje s odstupem lékař a vědec. Navíc to, co se odehrálo v džungli, je podle něj důležité nasimulovat při podání DMT také v tuzemsku, aby vědci ověřili, že jde o přenositelnou a v Česku aplikovatelnou zkušenost.

Už nyní je ale jasné, že léčba psychedeliky pomůže jen části pacientů, na další bude mít jen částečný vliv a určité části nepomůže vůbec

Máme první zmínky od kolegů ve Švýcarsku. Říkají, že to v podstatě funguje stejně jako u běžných léků – u třetiny pacientů to vypadá, že odpovídají velmi dobře, u třetiny tak napůl, a u třetiny je efekt minimální nebo žádný, potvrzuje Tomáš Páleníček.

Dokument míří do kin

Dokumentární film o hledání cesty k léčbě depresí a úzkostí budou moci diváci vidět od července v síti kin CineStar. Vhodný je pro dospělé a dospívající od 12 let.

Předpremiéra se uskuteční 27. května od 19:00 v CineStar Praha-Anděl, kdy po promítání bude následovat debata s režisérem a dalšími hosty.

Podle Davida Čálka na předpremiéru naváží projekce s debatami, kterých se zúčastní jak odborníci, tak pacienti. Plošně půjde Doktor na tripu do kin od 24. července.

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 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 »