Srovnání cen streamovacích platforem: bude Oneplay nejlevnější možností na trhu?

06.03.2025 | , Finance.cz
Spotřebitel


perex-img Zdroj: Depositphotos

Streamovací platformy Voyo a O2TV se spojí od 10. března ve streamovací platformu Oneplay. Bude nejlevnější možností na českém trhu? Podívejte se na cenové srovnání streamovacích služeb.

sluchatka

Poslechněte si článek v audio verzi

00:00 / 00:00

Tento článek pro vás načetl robotický hlas. Jestliže v něm najdete chybu ve výslovnosti, dejte nám prosím vědět.

Streamovací služby se již zabydlely v českých obývácích i ložnicích. Jaké zážitky a ceny nabízí jednotlivé streamovací platformy na českém trhu? Pořadí je sestaveno podle návštěvnosti z konce roku 2024.

Netflix – nejlevnější předplatné za 239 Kč

Nejvíce využívanou streamovací službou v českých domácnostech byl na konci loňského roku Netflix, který nabízí řadu svých seriálových hitů (Hra na oliheň, Stranger Things, Koruna), zábavy pro děti (Zvířecí případy či Prasátko Peppa) i filmové hity z vlastní produkce (Irčan, Naše planeta), evropské i hollywoodské tvorby (aktuálně Vykoupení z věznice Shawshank, Kmotr či Transformers).

Netflix nabízí klasicky tři balíčky předplatného.

Základní za 239 Kč měsíčně

Základní předplatné nabízí neomezený výběr filmů, TV pořadů a mobilních her bez reklam. Můžete jej sledovat a stahovat na 1 podporovaném zařízení v rozlišení 720p (HD).

Standardní za 309 Kč měsíčně

Tarif Standardní nabízí neomezený výběr filmů, TV pořadů a mobilních her bez reklam. Můžete jej sledovat a stahovat na 2 podporovaných zařízeních v rozlišení 1080p (Full HD).

Lze přidat 1 člena navíc, který s vámi nebydlí, a to za 99 Kč měsíčně.

Premium za 379 Kč měsíčně

Tarif Premium nabízí neomezený výběr filmů, TV pořadů a mobilních her bez reklam. Můžete jej sledovat na 4 podporovaných zařízeních v rozlišení 4K (Ultra HD) + HDR, lze stahovat až na 6 zařízení. Dále je v tomto tarifu dostupný Prostorový zvuk Netflix.

Lze přidat 2 členy navíc, kteří s vámi nebydlí, a to za 99 Kč měsíčně na osobu.

Oneplay – Voyo a O2TV v jednom, již od 199 Kč měsíčně

Od 10. března bude spuštěna nová streamovací platforma, která nahradí Voyo a O2TV.

Nabídne exkluzivní obsah, který většina diváků zná z Voyo (například Iveta, Metoda Markovič: Hojer), pro sportovní fanoušky pak nabídne například Ligu mistrů UEFA, NHL či nejvyšší českou fotbalovou a hokejovou soutěž.

Navíc lze v rámci Oneplay sledovat televizní pořady až 7 dní nazpět.

Tarif Komfort – 199 Kč měsíčně, s mobilním tarifem Ovýhodněji

Tarif Komfort nabízí 55 programů, knihovnu s více než 2000 filmy a televizními pořady.

Tarif Extra Zábava – 399 Kč měsíčně, s mobilním tarifem O2 349 Kč měsíčně

Tarif Extra Zábava rozšiřuje programovou nabídku o knihovnu pořadů National Geographic a další programy (včetně sportovních stanic), kterých je více 100.

Tarif Extra Sport – 599 Kč měsíčně, s mobilním tarifem O2 499 Kč měsíčně

Pro sportovní fanoušky je určen tarif Extra Sport, který nabízí rozšířenou paletu programů (celkem 90). V tomto tarifu jsou všechny dostupné sportovní kanály a soutěže z Oneplay.

Přibližně 80 % obsahu je zaměřeno na živé sportovní přenosy včetně hokejové Tipsport extraligy a fotbalové Chance Ligy či Ligy mistrů UEFA. Dále nabízí sportovní přenosy z ATP Tour, F1 a dalších lig a soutěží.

Tarif Maximum – 799 Kč měsíčně, s mobilním tarifem O2 699 Kč měsíčně

Nejdražší tarif Maximum nabízí veškerý dostupný obsah ze všech ostatních balíčků, tedy přes 140 programů a možnost sledování až na 3 zařízeních současně.

U ostatních tarifů (Komfort, Extra Zábava a Extra Sport) mají zákazníci možnost navýšení počtu zařízení s možností současného sledování na 3 zařízeních za cenu 99 Kč měsíčně.

Tip: Co se stane 10. března s vaším předplaceným Voyem či O2TV?

Disney+ – nejlevnější předplatné 199 Kč

U streamovací platformy Disney+ si lze vybrat dobu předplatného, jestli chcete roční, či měsíční. Na Disney+ najdete vedle světoznámých animovaných filmů (Toy Story, Luca či Lvího krále) Marvelovky, Hvězdné války či oceněné seriály (Medvěd, Shogun).

Disney+ Standard za 199 Kč měsíčně či 1990 Kč ročně

Disney+ v tarifu Standard nabízí kvalitu přehrávání videa až 1080p Full HD a kvalitu zvuku až 5.1.

V tomto tarifu lze streamovat až na 2 zařízeních najednou, stahovat pak lze až na 10 zařízení.

Disney+ Premium za 299 Kč měsíčně či 2990 Kč ročně

Disney+ u předplatného Premium nabízí kvalitu přehrávání až 4K UHD a HDR, kvalitu zvuku pak až Dolby Atmos.

V tarifu Premium lze streamovat až na 4 zařízeních najednou, stahovat pak lze až na 10 zařízení.

Jestliže chcete sdílet Disney+ s kamarádem či příbuzným, za přidání dalšího člena do předplatného zaplatíte 119 Kč měsíčně.

Akce do konce března za 49 Kč

Společnost Disney přechodně snížila cenu předplatného Standard u streamovací služby Disney+ na 49 Kč měsíčně po dobu 4 měsíců. Toto snížení potrvá do 30. března a platí pro nové i vracející se zákazníky.

Prima+: nejlevněji? Zdarma, ale s reklamami

Streamovací služba Prima+ nabízí celkem 3 verze, které jsou odstupňovány hlavně podle množství reklamního obsahu.

Free – zdarma, ale s reklamami

Tarif Free je zdarma, ale musíte počítat s reklamami, navíc nenabízí pořady Prima+ Originals a pouze část knihovny (přes 150 titulů). Kvalita obrazu v tarifu Free je SD.

Light – 99 Kč měsíčně, 50 % reklam

Tarif Light za 99 Kč měsíčně nabízí pořady Prima+ Originals, předpremiéry seriálů i filmotéku s více než 2000 tituly v HD kvalitě. Nicméně je nutno počítat s poloviční částí reklamního obsahu.

Premium – 199 Kč měsíčně bez reklam

Takřka totožný obsah jako tarif Light nabízí i tarif Premium, ten je zcela bez reklam a v kvalitě obrazu až ve Full HD.

Max: nejlevněji za 219 Kč měsíčně či 2190 Kč ročně

Bývalá streamovací platforma HBO (HBO Max), nyní již jen Max, nabízí řadu kultovních titulů (Pán prstenů, Přátelé, Sex ve městě či svět Harryho Pottera), ale i současnou oceňovanou tvorbu (Stále v kurzu, Duna, Last of Us, Bílý lotos).

K tarifu Premium lze přikoupit rozšíření Sport (za 70 Kč měsíčně), na kterém můžete sledovat řadu vrcholných sportovních událostí (olympijské hry, Rolland Garros, US Open, Australian Open).

Standard za 219 Kč měsíčně či 2190 Kč ročně

V rámci tarifu Standard si užijete obsah ve Full HD (1080p) kvalitě, lze jej sledovat na 2 zařízeních současně. A lze stáhnout až 30 položek.

Premium za 299 Kč měsíčně či 2999 Kč ročně

Tarif Premium nabízí kvalitu přehrávání v rozlišení 4K UHD a standardech Dolby Atmos, Dolby Vision a HDR 10 (u vybraných titulů), kterou lze sledovat až na 4 zařízeních současně. Můžete stáhnout až 100 položek.

Prime Video: za 149 Kč měsíčně

Prime Video z dílny Amazonu nabízí širokou filmotéku, ale i zajímavé pořady vlastní tvorby (Boys/Banda, Rings of Power či film Třináct životů).

Cena za streamovací platformu Prime Video činí 149 Kč měsíčně, společnost Vodafone pro své zákazníky nabízí Prime Video za 79 Kč měsíčně.

Apple TV+: za 199 Kč měsíčně

Apple TV+ má v nabídce širokou filmotéku, často s nejnovějšími filmy, ale i vlastní zajímavou a oceňovanou tvorbu (The Morning Show, Prehistorická planeta).

Cena předplatného Apple TV+ činí 199 Kč měsíčně. Při nákupu zařízení Apple máte možnost do 90 dnů uplatnit Apple TV+ na 3 měsíce zdarma.

Další možností je si předplatit Apple One, což je balíček čtyř služeb (včetně Apple TV+) společnosti Apple v jednom měsíčním předplatném. Tarify Apple One začínají na 339 Kč měsíčně.

Tip: Do Chorvatska letadlem? Z Prahy odstartuje už čtvrtá linka

Sky Showtime: nejlevněji za 159 Kč, ale s reklamou

Sky Showtime nabízí řadu originálních děl (Den Šakala, Nabídka či Yellowstone) a širokou filmotéku (např. Oppenheimer, Kaskadér a další).

Sky Showtime má poměrně širokou nabídku, která je odstupňována podle délky a počtu reklam. Nabídku předplatného shrnujeme v následující tabulce.

Tarif Měsíční 6 měsíců Roční
Standardní s reklamou 159 Kč 629 Kč 1259 Kč
Standard 219 Kč 879 Kč 1759 Kč
Prémiový 299 Kč 1199 Kč 2399 Kč

Zdroj: Sky Showtime

V rámci Standardního tarifu s reklamou můžete sledovat Sky Showtime souběžně na 1 zařízení ve Full HD kvalitě, ale s reklamami.

U tarifu Standard nejsou reklamy a Sky Showtime můžete sledovat souběžně na 2 zařízeních ve Full HD kvalitě, rovněž lze provést až 30 stažení.

U nejvyššího Prémiového tarifu lze sledovat na 5 zařízeních souběžně ve 4K UHD kvalitě a můžete provést až 100 stažení, a to zcela bez reklam.

iVysílaní: Česká televize nabízí rovněž zajímavý obsah za koncesionářské poplatky

Na iVysilání můžete sledovat seriálovou tvorbu České televize (Vlastně se nic nestalo, Limity, Mlsné medvědí příběhy či Případy 1. oddělení) i tu zahraniční (Most, SpongeBob v kalhotách, Prasátko Peppa).

Rovněž iVysílání nabízí filmy a seriály z programu svých televizí (ČT1, ČT2, ČT24, ČT sport, ČT :D), ale pouze některé a na poměrně krátkou dobu (aktuálně Teroristka, Vášeň a cit).

iVysilání je zdarma, za veřejnoprávní službu České televize se platí televizní poplatek ve výši 135 Kč měsíčně.

Při sledování většinou počítejte s krátkou reklamou na začátku spuštění.

Canal+

Streamovací platformu Canal+ znají hlavně fanoušci anglického fotbalu, protože nabízí zápasy anglické Premier League. Vedle toho mohou předplatitelé sledovat i přímé přenosy tenisových turnajů WTA.

Samozřejmostí je nabídka programů Canal+, celkem tak můžete sledovat 8 filmových a sportovních TV programů a videotéku CANAL+, kde můžete najít například filmy jako Ferrari, John Wick či Jeden život.

V rámci předplatného si můžete pořídit ještě i Apple TV+, za ten si ovšem musíte mírně připlatit v rámci tarifu Canal+ Komplet.

Předplatné Měsíční Roční
Canal+ 239 Kč 2390 Kč
Canal+ Komplet 289 Kč* 2890 Kč

*Sleva na první 3 měsíce je 25 %, předplatné tak činí 216 Kč měsíčně
Zdroj: Canal+

Jak ušetřit za streamovací platformy?

Dobré je využít různé zkušební akce a balíčky, které streamovací platformy či jejich partneři nabízejí. Po „okoukání“ obsahu dané streamovací platformy pak můžete snadno přejít k druhé.

Ušetřit se dá i na ročním předplatném, které je o pár stovek korun výhodnější. Jestliže tedy víte, že streamovací platformu budete využívat dlouhodobě, zvolte například roční předplatné.

Výhodné je v rámci rodiny využívat i možnosti sledovaní jednotlivých platforem na více zařízeních.

Můžete se rovněž podívat na nabídku vašeho mobilního operátora či poskytovatele internetu, kteří často nabízí různé balíčky streamovacích služeb.

Štítky:

Autor článku

Michal Bureš

Michal Bureš  

Šéfredaktor Finance.cz


Pomohl vám tento obsah? Dejte mu hodnocení:

Průměrné hodnocení: 3
Hlasováno: 6 krát

Články ze sekce: Spotřebitel


'; document.getElementById('preroll_iframe').onload = function(){ preroll_setupIframe(); } } function preroll_setupIframe() { prerollDocument = document.getElementById('preroll_iframe').contentWindow.document; let el = prerollDocument.createElement('style'); el.type = 'text/css'; prerollDocument.head.appendChild(el); el.innerText = "#preroll_adContainer>div:nth-of-type(1),#preroll_adContainer>div:nth-of-type(1) > iframe {width: 99% !important;height: 99% !important;max-width: 100%;}#preroll_videoContent,body{width:100vw;height:100vh}body{font-family:'Helvetica Neue',Arial,sans-serif}#preroll_videoContent{overflow:hidden;background:#000}#preroll_adMuteBtn{width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; preroll_videoContent = prerollDocument.getElementById('preroll_contentElement'); preroll_videoContent.style.display = 'none'; preroll_videoContent.volume = 1; preroll_videoContent.muted = false; const playPromise = preroll_videoContent.play(); if (playPromise !== undefined) { console.log('PREROLL sound forbidden');preroll_videoContent.volume = 0;preroll_videoContent.muted = true;preroll_setUpIMA(false); //playPromise.then(function () { console.log('PREROLL sound allowed');preroll_setUpIMA(true); }).catch(function () { console.log('PREROLL sound forbidden');preroll_videoContent.volume = 0;preroll_videoContent.muted = true;preroll_setUpIMA(false); }); } } function preroll_setUpIMA(sound) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. preroll_createAdDisplayContainer(); // Create ads loader. preroll_adsLoader = new google.ima.AdsLoader(preroll_adDisplayContainer); // Listen and respond to ads loaded and error events. preroll_adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, preroll_onAdsManagerLoaded, false); preroll_adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, preroll_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() { preroll_adsLoader.contentComplete(); }; preroll_videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (sound && preroll_iinfoVastUrlIndex <= preroll_iinfoVastUrls.length-1) { adsRequest.adTagUrl = preroll_iinfoVastUrls[preroll_iinfoVastUrlIndex]; console.log('Preroll advert: ' + preroll_iinfoVastUrls[preroll_iinfoVastUrlIndex]); preroll_current = 0; preroll_videoContent.muted = false; preroll_videoContent.volume = 1; } else { adsRequest.adTagUrl = preroll_iinfoVastUrlsMuted[preroll_iinfoVastUrlIndexMuted]; console.log('Preroll advert: ' + preroll_iinfoVastUrlsMuted[preroll_iinfoVastUrlIndexMuted]); preroll_current = 1; preroll_videoContent.muted = true; preroll_videoContent.volume = 0; } adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; preroll_adsLoader.requestAds(adsRequest); } function preroll_createAdDisplayContainer() { prerollDocument.getElementById('preroll_videoContent').style.display = 'none'; preroll_adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('preroll_adContainer'), preroll_videoContent); } function preroll_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. preroll_adsManager = adsManagerLoadedEvent.getAdsManager(preroll_videoContent, adsRenderingSettings); // Add listeners to the required events. preroll_adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, preroll_onAdError); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, preroll_onContentPauseRequested); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, preroll_onContentResumeRequested); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, preroll_onAdEvent); // Listen to any additional events, if necessary. preroll_adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, preroll_onAdEvent); preroll_adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, preroll_onAdEvent); preroll_adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, preroll_onAdEvent); preroll_playAds(); } function preroll_playAds() { // Initialize the container. Must be done through a user action on mobile // devices. preroll_videoContent.load(); preroll_adDisplayContainer.initialize(); try { preroll_adsManager.init(preroll_width_init, preroll_height_init, google.ima.ViewMode.NORMAL); preroll_adsManager.start(); } catch (adError) { } } function preroll_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('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: prerollDocument.getElementById('preroll_adContainer').style.width = '100%'; prerollDocument.getElementById('preroll_adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('preroll_adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: prerollDocument.getElementById('preroll_adMuteBtn').style.display = 'block'; preroll_init_container.style.display = 'none'; try { adsManager.pause(); } catch (error) { } break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: preroll_play_yt(); break; case google.ima.AdEvent.Type.COMPLETE: preroll_play_yt(); break; } } function preroll_onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); preroll_last_error = adErrorEvent.getError().getErrorCode(); console.log(preroll_last_error); if (!preroll_loadNext()) { preroll_play_yt(); } } function preroll_onContentPauseRequested() { preroll_videoContent.pause(); } function preroll_onContentResumeRequested() { preroll_videoContent.play(); } function preroll_loadNext() { if (preroll_current === 0) { preroll_iinfoVastUrlIndex++; if (preroll_iinfoVastUrls.length > preroll_iinfoVastUrlIndex) { preroll_init(); } else { return false; } } else { preroll_iinfoVastUrlIndexMuted++; if (preroll_iinfoVastUrlsMuted.length > preroll_iinfoVastUrlIndexMuted) { preroll_init(); } else { return false; } } preroll_adVolume = 1; return true; } function preroll_unmuteAdvert() { preroll_adVolume = !preroll_adVolume; if (preroll_adVolume) { preroll_adsManager.setVolume(1); prerollDocument.getElementById('preroll_adMuteBtn').innerHTML = ''; } else { preroll_adsManager.setVolume(0); prerollDocument.getElementById('preroll_adMuteBtn').innerHTML = ''; } } function tryToInicializePreroll() { preroll_init(); } function preroll_play_yt() { preroll_videoElement.style.display = 'block'; const youTubeUrlQueryString = preroll_videoElement.src.includes('?'); const firstLetterOfAddedUrl = youTubeUrlQueryString ? '&' : '?'; preroll_videoElement.src += firstLetterOfAddedUrl + 'autoplay=1&mute=0'; preroll_init_container.style.display = 'none'; document.querySelectorAll('.preroll-container').forEach(e => e.remove()); finance_init_container.style.display = 'block'; try { adsManager.pause(); } catch (error) { } }

'; document.getElementById('outstream-iframe').onload = function(){ setupIframe(); } } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); el.type = 'text/css'; 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 (!outstream_direct_played) { console.log('Setup iframe: direct'); setUpIMA(true); } else if (iinfoOutstreamAllowed) { console.log('Setup iframe: allowed article'); const playPromise = videoContent.play(); playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { renderPassback(); }); } else { console.log('Setup iframe: passback'); renderPassback(); } } /** * 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 = iinfoVastDirect; console.log('Outstream DIRECT CAMPAING advert: ' + iinfoVastDirect); videoContent.muted = true; videoContent.volume = 0; outstream_direct_played = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } /** * 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(1); 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(); try { adsManager.init(outstream_width_init, outstream_height_init, google.ima.ViewMode.NORMAL); adsManager.start(); } catch (adError) { } } /** * 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(); }, 300); // every 300ms } //unmuteAdvert(); outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstream_last_error == 303) { renderPassback(); } 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 (true) { renderPassback(); } break; } } function renderPassback() { console.log('Outstream Spouštím Passback'); advertContainer.innerHTML = ""; advertContainer.appendChild(passBackDiv); } /** * Handles ad errors. * @param {!google.ima.AdErrorEvent} adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstream_last_error = adErrorEvent.getError().getErrorCode(); console.log(outstream_last_error); if (!loadNext()) { renderPassback(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrls.length > iinfoVastUrlIndex) { outstream_init(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { console.log('outstream onActiveView()'); var wrapper = document.getElementsByClassName('outstream-container')[0]; if (wrapper) { var containerOffset = wrapper.getBoundingClientRect(); var windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstream_paused) { adsManager.resume(); outstream_paused = false; /*window.removeEventListener('scroll', onActiveView);*/ console.log('Outstream: ad resume()'); } return true; } else { if (!outstream_paused) { adsManager.pause(); outstream_paused = true; /*window.removeEventListener('scroll', onActiveView);*/ console.log('Outstream: ad pause()'); } } } return false; } let outstream_initialize_interval = setInterval(tryToInicializeOutstream, 100); function tryToInicializeOutstream() { console.log(cpexPackage.adserver.displayed); var wrapper = document.getElementsByClassName('outstream-container')[0]; if (wrapper) { var containerOffset = wrapper.getBoundingClientRect(); var windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstream_initialize_interval); outstream_init(); } } } }
OSZAR »