Po koronavirové pauze ožívají i soukromé hrady a zámky. Máme přehled akcí

15. 6. 2020
Doba čtení: 7 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos.com, podle licence: Rights Managed
Ilustrační obrázek
Skoro tři měsíce prožily soukromé hrady a zámky v uzavření a ve znamení rušení a odkládání naplánovaných akcí. Teď se v nich sezóna zase postupně rozbíhá.

O tom, že bude jiná, není pochyb. O mnohé akce přišly nenávratně, různá omezení je stále sužují. Přizpůsobují se. Na co navzdory potížím vsadily a na co lákají?

Co se dozvíte v článku
  1. Musíme se napasovat do vývoje a je to výzva
  2. Pozvánky do hradů a zámků
  3. Po období rušení se lidé i akce pomalu vrací
  4. Letošní sezóna? Třetinová
  5. Menší odliv lidí z Česka pomůže
  6. Návštěvníků je méně, spoléháme na zahrady
  7. Nejen virus, trápí i kůrovec a sucho

Musíme se napasovat do vývoje a je to výzva

Markéta Slezák vlastní se svým mužem Mirem Slezákem Zámek Berštejn nedaleko Máchova jezera a provozují ho jako rodinný hotel. Významnou část jejich hostů tvoří Němci a Britové. Zásadně je proto zasáhlo rušení letů, zavřené hranice a zákaz ubytování. Zámek jsme ale naštěstí nikdy neprovozovali s tím, že bychom očekávali zisk nebo na něm byli přímo závislí. Šlo nám o záchranu zdevastovaného zámku odsouzeného k demolici, jeho oživení a vytvoření místa pro život a pro setkávání s lidmi. V tomto smyslu zámek prospívá a dělá nám radost, říká Markéta, ale zároveň nezastírá, že současná krize je i pro ně zlá. Dotkla se každého, koho známe, včetně našich klientů. Ekonomické dopady budeme pociťovat dlouho. Pro přežití v našem oboru je důležité mít dostatečné rezervy, být flexibilní, vidět nové příležitosti a dobře se napasovat na budoucí vývoj. I pro nás je to výzva, tvrdí.

Podívejte se také do Zámku Loučeň, kde je zámeckou paní Kateřina Šrámková:

Na Berštejně proto počítají s tím, že se letos uvidí hlavně se stálými hosty, kteří jezdí každý rok. I když i mnoho z nich se sem nejspíš nedostane. Brání jim v tom nejrůznější důvody a také obavy z komplikací, které by je mohly čekat po návratu do jejich země, dodává. Nic podle ní nenasvědčuje tomu, že by teď pobytové balíčky na zámku masivně objednávali noví hosté, rezervací je méně. Snažíme se netrápit tím, co neovlivníme, a více se koncentrujeme na rekonstrukce dalších budov v protějším areálu panského dvora, který jsme vloni koupili. Je tam mimo jiné pět kulturních památek v zoufalém stavu, a tak řešíme možnosti jejich oživení a smysluplného využití pro budoucnost, vysvětluje Markéta, na co se nyní soustředí.

Pozvánky do hradů a zámků

  • Do Zámku Dobřenice zve Romana Bertelsová již nyní na zámecký vánoční trh (21. a 22. 11.).
  • Michaela Fremundová zve na Barokní večer na Zámku Hrádek, který se bude konat v pátek 31. 7.
  • Na Kulturní víkend na zámku Blatná, který se odehraje od 28. do 30. 8., zve Edvard Oberfalcer – v zámeckém parku bude koncert Symfonického orchestru Českého rozhlasu, poloscénické provedení opery Rusalka nebo divadlo O Palečkovi v podání Jihočeského divadla.
  • Markéta Slezák z Berštejna zve na zářijovou víkendovou akci pro ženy, které pracují a podnikají v řemeslech a službách. V plánu jsou společné diskuse, síťování, spolupráce, vzájemná pomoc i zdravotní cvičení, relaxace, dobré jídlo a víno u krbu.
  • Karolína Malá a Hana Brodská ze Zámku Lnáře zvou na odborné přednášky Poznejte Lnářské lesy a rybníky, které organizují pro společnosti nebo skupiny nad 15 osob, když se na zámku ubytují. K dispozici je tu i muzeum Kočky, výstava paličkovaných obrazů a v červenci koncert harf.
  • Do Nových Hradů zve Petr Kučera v červnu milovnice a milovníky růží. Právě jich tu rozkvétá více než tisíc keřů ve 200 druzích.
  • Kamila Svobodová z Hradu a zámku Dolní Kounice se ve své pozvánce obrací na OSVČ a další podnikatele i zájmová uskupení, pro která je otevřená možnost zapojit se do obnovy a využití hradu a zámku skrze Hradní Spolek, a to jako partneři a společníci – mohou tak památku rozvíjet, využívat a podílet se na výnosech.

Po období rušení se lidé i akce pomalu vrací

Na Zámku Dobřenice nedaleko Pardubic a Hradce Králové byly duben, květen i část června ve znamení přesunů svateb na podzimní termíny a na příští rok. Jak vypráví Romana Bertelsová, která se tu o eventy stará, čekají sezónu, která se bude od těch dosavadních lišit. Bude rozhodně opatrnější ze strany našich klientů. Co se týče kulturních akcí, ty jsme museli oproti plánu omezit, jelikož nám prostě dva a půl měsíce chybí, vysvětluje.

Rušilo se a na dobu neurčitou se odkládalo také na Zámku Hrádek u Sušice. Zde se to však podle Michaely Fremundové týkalo hlavně investic do provozu, které plánovali. Tím, jak došlo k uzavření provozu ze dne na den, vznikly ztráty v podobě znehodnocení zásob, zrušení akcí, ubytování. Společnost měla nulové příjmy, ale náklady zůstaly – příjmy zaměstnanců, faktury od dodavatelů, provozní náklady…, vypočítává. Teď už však podle ní vypadá nadějně obsazenost zámeckého hotelu a chodí objednávky na nové svatby a soukromé akce. Nacházíme se blízko Šumavy, věříme, že je naše oblast pro návštěvníky a turisty atraktivní a projeví se to příznivě na návštěvnosti restaurace a dalších služeb, které nabízíme, ať už je to adventure golfové hřiště, bazén nebo zámecká herna pro rodiny s dětmi, říká.

Letošní sezóna? Třetinová

Z koronavirových omezení, která i na ně tvrdě dopadla, se zotavují na jihočeském Zámku Blatná, kde museli uzavřít prohlídkové trasy, zrušit mnoho nasmlouvaných zájezdů, uzavřít kavárnu Oh My Deer Café, zrušit všechny kulturní akce, pronájmy, firemní akce i svatby. Nikdo z nás to nepředvídal, popisuje situaci Edvard Oberfalcer. Když byl omezený volný pohyb osob a povolené procházky v přírodě, nechali tu pro veřejnost otevřený alespoň zámecký park zdarma. Když se nám sezóna zkrátila z šesti měsíců na čtyři, bude to mít samozřejmě negativní vliv na celkový hospodářský výsledek letošního roku. Tu ztrátu nebude možné dohnat, dodává Edvard.

Pokud se nic nezvrtne a omezení se budou dál rozvolňovat, sezóna se podle něj pomalu rozeběhne. Zatím je to však stále složité. Například aktuální omezení prohlídkových tras, na kterých musíme dodržovat rozestupy mezi návštěvníky, snižují kapacitu prohlídkových skupin téměř na jednu třetinu, což je v porovnání s normálním stavem skutečně málo, vysvětluje a poukazuje i na omezení kulturních akcí, kdy u koncertu symfonického orchestru, plánovaného na poslední červencový den, museli snížit původní kapacitu 1500 lidí na 500. Letošní sezóna tedy bude, ale v porovnání s plány třetinová, shrnuje.

Menší odliv lidí z Česka pomůže

Na jihomoravském Hradu a zámku Dolní Kounice se sezóna běžně rozjíždí v březnu. Jen co tedy letos začala, pandemie jí dala stopku. Odnesly to každoroční akce pro veřejnost jako Výstava vín, Kounice v Pohybu nebo hradní trhy poctivých lokálních produktů POLOPRO, stejně jako svatby a hostiny. Také byly zrušeny všechny objednané zážitkové výlety pro školky a základní školy, kdy jsme očekávali asi 2000 dětí. Pandemie tedy měla a bude mít zásadní vliv na náš letošní výsledek hospodaření, uvádí Kamila Svobodová, která má na starosti program a koordinuje svatby.

Přesto věří, že z hlediska turistiky bude letošní rok stejně úspěšný, nebo dokonce úspěšnější než loňský. A to proto, že by nemusel být tak velký odliv Češek a Čechů do zahraničí. Soukromé akce, jako jsou svatební obřady a hostiny i oslavy narozenin, se již od června normálně konají a tak až do konce listopadu tu mají skoro každý víkend nějakou soukromou akci. Na některé víkendy chystají i lokální trhy (s tradicí od 13. století), které na hradní louce organizuje neziskovka Hradní Spolek spolu s Farmou pod kaštany.

Návštěvníků je méně, spoléháme na zahrady

Opožděné zahájení návštěvnické sezóny ovlivní letošní ekonomiku i na Zámku Nové Hrady ve východních Čechách. Jako chybu tu hodnotí rozhodnutí vlády provázat otevření zahrad s prodejem pouze on-line vstupenek. A to v situaci, kdy osobní pokladny fungovaly ve velkém v obchodech, u benzinových pump.  Rozumíme tomu tak, že ve snaze řešit případný problém pražské zoologické zahrady podvázaly úřady činnost všech ostatních menších a malých zahrad. Naši návštěvníci tak přišli o možnost zhlédnutí květů tisíců jarních květin, jejichž kolekce jsme obohatili o řadu holandských cibulovin, pozastavuje se majitel Petr Kučera nad událostmi s tím, že v jejich desetihektarovém areálu rozhodně nehrozilo přelidnění.

Podle toho, jak vidí zahájení letošní sezóny, přitom zatím usuzuje, že se bude rozbíhat jen velmi pomalu, a to hlavně v interiérech zámku nebo v místním muzeu motokol – návštěvníků je výrazně méně. Je naší výhodou, že většina dává dlouhodobě přednost návštěvě našich zahrad, máme jich na deset typů, a tak prázdninové měsíce mohou ekonomickou situaci areálu vylepšit, doufá.

WT100 25_SE

Nejen virus, trápí i kůrovec a sucho

Karolínu Malou a Hanu Brodskou z jihočeského Zámku Lnáře zastihla pandemie koronaviru ještě v průběhu příprav na sezónu 2020. Tvrdí, že i přes hromadné rušení velkých akcí se snaží brát vzniklou situaci jako výzvu v pozitivním smyslu a soustředí se na obnovu nabídky zámku, revizi procesů a úpravy uvnitř zámku i v přilehlém parku. Zámek je úzce spjat s hospodářstvím, které se skládá převážně z lesů a rybníků, proto na nás má dopad nejen Covid-19, ale i kůrovcová kalamita a extrémní sucho, dávají nahlédnout do toho, co všechno teď řeší.

A jakou tedy očekávají ve Lnářích sezónu? Podobně jako jinde přišli o většinu hromadných akcí. Pandemie se podle nich podepsala i na návštěvnosti zámku, objednané prohlídky ruší hlavně různé kluby seniorů – bojí se o své zdraví. Zájem o ubytování očekáváme v letošní sezóně především u individuálních hostů, spíše než od velkých skupin, a tomu se snažíme provoz zámku přizpůsobit, říkají Karolína s Hanou.

'; 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 »