Co nám dala a vzala televizní krize? Její následky pociťujeme dodnes

28. 12. 2020
Doba čtení: 7 minut

Sdílet

Autor: Facebook Jany Bobošíkové
Vyhrocené dění na Kavčích horách před 20 lety způsobilo dodnes nezhojené rány. Někdy utrpělo jen ego toužící po vyrovnání účtů, především se však důsledky opakovaně projevují při debatách o společenské roli České televize, podstatě svobody médií a jejich nezávislosti.

Moderátorka Jana Bobošíková letos v létě zveřejňovala na sociálních sítích své vzpomínky na období televizní krize na přelomu let 2000 a 2001. Vrátila se mimo jiné k tomu, jak její působení v České televizi skončilo, když se prozatímním ředitelem stal z rozhodnutí sněmovny Jiří Balvín. „Bylo mi jasné, že mohu být kdykoliv odvolána, a byla jsem stále připravena. Netrvalo to dlouho a přišel za mnou Jiří Balvín s odboráři a odborářským právníkem. Nemuseli ani nic říkat, hned jsem jim dala předávací protokol a Jiří Balvín mi ‚šlechetně‘ nabídl, že by mohl využít mého ekonomického vzdělání na post evidence toaletního papíru a čistících prostředků. S díky jsem odmítla. S Jiřím Balvínem jsme se znali jenom povšechně, žádné emoce mezi námi nebyly, jen mi bylo líto, že odborářům ustoupil, a věděla jsem, že to bude mít dalekosáhlé důsledky,“ napsala ve svém letním seriálu.

V roce 20. výročí televizní krize jako by se Jana Bobošíková dočkala svérázného zadostiučinění. Do Rady České televize usedla její blízká spolupracovnice Hana Lipovská, jíž v době televizní krize bylo deset let. Moderátorka dění na Kavčích horách komentuje často prostřednictvím sociálních sítí, stanoviska a postoje Hany Lipovské aktivně hájí. Založila s ní Institut svobody a demokracie, jehož jménem se obě ženy už dvakrát obrátily do Bruselu se stížností na české politiky, kteří kritizovali chování Hany Lipovské v Radě České televize. Averze Jany Bobošíkové zejména vůči některým redaktorům zpravodajství a publicistiky je z jejích vystoupení znát dodnes.

„Věřím, že by se Hana Lipovská nezlobila, když řeknu, že se čas od času snažím spíš rozředit její někdy velmi nemilosrdnou kritiku ČT. Nemohu říct, že jí radím, ona se řídí vlastním rozumem, ale čas občas jí sdělím, jak se některé věci v televizi vytvářejí, co nemusí být zlý záměr, ale naopak chyba. Je to otázka vzájemné diskuse,“ tvrdila Jana Bobošíková v rozhovoru pro XTV.  

Z týmu někdejší „Bobovize“ je Jana Bobošíková rozhodně nejaktivnější, nejhlasitější a nejviditelnější. Vyzkoušela si práci europoslankyně, dvakrát kandidovala na prezidentku, zakládala politická hnutí, na Nově moderovala diskusní relaci Sedmička a v posledních dvou letech byla jednou z tváří už zmíněné internetové televize XTV. Z té teď na konci roku odchází.

O ostatních jejích spolupracovnících toho tolik známo není. Moderátorka Dana Makrlíková, jež byla jednou z tváří „alternativních“ Událostí, podniká v oblasti návrhů a realizace zahrad. Jako odbornice na zahradnictví se na ČT1 objevuje v pořadu Polopatě. Po televizní krizi byla moderátorkou TV3 a televize Prima, od roku 2003 spolupracovala s Přemkem Podlahou v Receptáři prima nápadů. Čtenáři DigiZone ji znají také jako bývalou tiskovou mluvčí Českého telekomunikačního úřadu (2006–2010), v letech 2008 až 2014 také zasedala v Radě České televize.

Letos do televizní rady kandidovala znovu. Při té příležitosti okomentovala dění v roce 2000. „Jsou tam určité zájmové skupiny, které jsou na televizi přisáté jako na kravičku k cecíkům. Stojím si za tím, že pokud Rada ČT zvolí generálního ředitele, měl by dostat prostor, aby ukázal, co umí,“ řekla poslancům. Vzpomínala na vyhrocenou atmosféru, ve které jako by měl svobodu slova jen někdo. „Moje svoboda slova nebyla tehdy důležitá: měla jsem vyrytý kosočtverec na autě, s mým jménem vycházely falešné inzeráty a podobně,“ poznamenala. Přes to všechno však považuje Českou televizi za ostrov demokracie a kritizuje politiky, kteří si představují, že o nich bude veřejnoprávní médium informovat jen pozitivně.

Moderátorka Alena Veliká mimo jiné pracovala pro tiskový odbor prezidenta Václava Klause, pak byla až do letošního roku dlouholetou posilou moderátorského týmu dopoledního pořadu Sama doma. Další z tváří Bobovize Dušica Zimová byla tiskovou mluvčí hnutí Nezávislí, v posledních letech se její jméno objevovalo především pod stanovisky národně konzervativního sdružení Akce DOST. Také redaktor Antonín Zelenka nejprve přešel do oblasti PR, když se stal mluvčím výstavby Sazka Areny. Poté působil v dnes už neexistující stanici TV24.cz, byl redaktorem Regionální televizní agentury nebo vedoucím vydání zpravodajství TV Barrandov, jeho jméno se objevuje rovněž v souvislosti s tiskovým odborem ministerstva školství. V letech 2007 až 2013 byl členem Rady Českého rozhlasu.

A krátkodobý generální ředitel Jiří Hodač? Ten podle dostupných informací žije ve Velké Británii. „Čas od času spolu telefonujeme, Českou republiku od doby televizní krize nenavštívil,“ napsala v létě Jana Bobošíková ve svém vzpomínkovém seriálu.

Politické změny

Klíčovým požadavkem stávkujících redaktorů během televizní krize byla změna zákona o České televizi, aby veřejnoprávní médium nebylo pod přímým vlivem politiků. Ačkoliv hned v lednu 2001 odsouhlasila sněmovna novelu zákona, která změnila systém volby Rady České televize, výsledek je rozpačitý. Formálně byl do celého procesu vsunut jeden krok navíc, kdy kandidáty navrhují různé organizace a zástupci občanské společnosti. Reálně však o výběru radních a jejich podpoře rozhodují politické dohody ve sněmovně. Diskuse o dalším vylepšení tohoto systému se od té doby vedou prakticky neustále a stejně tak se střídavě objevují a zase mizí různé návrhy na změnu systému či financování veřejnoprávních médií.

Chuť politiků ovlivňovat chod Kavčích hor nezmizela, spíše v průběhu posledních dvou dekád změnila barvy. Jestliže na přelomu let 2000 a 2001 byla formujícím prvkem politického a společenského dění takzvaná opoziční smlouva mezi ODS a ČSSD, po ztrátě jejich síly a nástupu nových aktérů se nejdrsnější kritika ozývá především z národoveckých pozic a od populistických hnutí. ODS ještě v roce 2009 navrhovala zrušit televizní a rozhlasové poplatky. Dnes patří ODS mezi zastánce principu veřejnoprávních médií a modelu jejich financování, k čemuž ji přiměla především mediální síla Andreje Babiše.

Z první televizní digitalizace, tedy přechodu z analogového na digitální vysílání, vzešla Česká televize posílená. Protože byla lídrem celého procesu, byla tehdejší politická reprezentace svolná ke zvýšení poplatků na částku, která platí dodnes. Za vedení Petra Dvořáka televize výrazně zefektivnila své fungování, rozšířila počet programů a dosahuje nejlepších hodnot sledovanosti. Musela se však také vypořádat s kritikou, zaznívající od části redaktorů zpravodajství, že jde příliš na ruku prezidentu Miloši Zemanovi a jeho okolí. Tehdejší kritici zčásti Českou televizi opustili a dnes paradoxně poslouchá Česká televize od hlavy státu pravý opak. Prezident opakovaně vyzývá ke zrušení poplatků a odvolání generálního ředitele. A o zvyšování poplatků nebo jejich valorizaci současná politická reprezentace nechce ani slyšet.

Vést debatu o úloze, fungování, přednostech a chybách České televize je dost složité, a to i třicet let poté, co poslanci schválili první verzi zákona o veřejnoprávní podobě této instituce. Z jedné strany se ozývají výpady, že veřejnoprávní média jsou nesmyslný slepenec, další si je stále pletou se státní nebo vládní propagandistickou vlnkou, pak je tu spousta lidí, jimž je situace kolem České televize jedno, a také je tu velká skupina obhájců médií veřejné služby. Problém je v tom, že i obhájci jsou nezřídka zakopaní v příkopech vyhloubených před 20 lety a vystartují kvůli každé ostřejší kritice ČT. Na druhou stranu, věcné a podložené kritiky je málo, zato v éře sociálních sítí má kdejaký popletený výrok stejnou hlasitost a dopad jako profesionální rozbor. Pokud se kritici mýlí, nechtějí to slyšet – zacpou si uši a křičí, že se zase chystají „spacáky v newsroomu“. Pokud se splete Česká televize, ani ta to ovšem nechce moc slyšet.

Kam teď dál?

Českou televizi teď čeká velmi náročné období, protože inflace dál neúprosně snižuje reálnou hodnotu televizních poplatků. Snižuje se počet televizních přijímačů přihlášených v českých domácnostech a je zcela namístě debata o úpravě poplatkového systému, aby nebyl vázán přímo na přijímač. K takovému kroku přistoupili už před lety v Německu, kde zkrátka příspěvek na veřejnoprávní vysílání platí každá domácnost bez ohledu na to, jakou formou má možnost programy veřejné služby sledovat. V tuzemském politickém prostředí je však tato debata vždy provázena podmínkou „něco za něco“ – v minulosti například Česká televize prakticky přišla o možnost vysílat klasické reklamní bloky, jejichž množství a umístění je zásadně omezené.

Takže se nutně nabízí otázka, jaká cena za změny by byla tentokrát.

MM Influenceři

Technologické proměny, zhoršující se výchozí ekonomické podmínky a měnící se zvyklosti diváků navíc podněcují diskusi o formě a rozsahu programové nabídky České televize. I její vedení upozorňuje, že brzy nastane doba, kdy se bude muset společnost rozhodnout, co ČT nemá dělat – protože na to, aby dělala všechno, už jednoduše nebudou peníze.

Na jaře 2021 se obmění další část členů Rady České televize a politická atmosféra provázející jejich výběr ve sněmovně může ledacos napovědět. Jana Bobošíková s Hanou Lipovskou už ostatně dříve ohlásily, že Institut demokracie a svobody některé kandidáty poslancům rád doporučí. V říjnu pak budou sněmovní volby – a vláda, která z nich vzejde, bude muset chtě nechtě položit na stůl svou představu o fungování, prioritách a financování veřejnoprávních médií. Čtyřleté období od roku 2021 do roku 2025 bude formované dalšími technologickými posuny a novými normami z Evropské unie. Nepůjde jen o Českou televizi, rozhodnout se musí také o digitálním rozhlasovém vysílání nebo platnosti licencí komerčních rádií. Ale dost možná se zase debata zasekne jen u toho, jestli bychom neměli okopírovat systém mediálních rad z Bavorska…

Autor článku

Novinář se zaměřením na média. Dlouholetý účastník i pozorovatel českého mediálního cirkusu. Pracoval v Marketing & Media, Hospodářských novinách a Českém rozhlase.

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