Fiat, nebo Lada? Honda, nebo Rover? aneb když má jedno auto několik identit

2 nové názory

Znáte Saab-Lancia 600, Peugeot P4, Citroën C44, Dauphine Alfa Romeo nebo Daewoo Royale Prince? Že vám ta jména nic neříkají? Nesou je přitom auta známých tvarů. Jsou výsledkem jakési „autopůjčovny“ mezi automobilkami, která funguje již mnoho let. Kvůli úspoře peněz a času vznikla takových čtyřkolých chameleonů nepřeberná řada.

autowp.ru_mitsubishi_jeep_3 Legendární Jeep Willys se donedávna vyráběl v licenci Mitsubishi. Jedním z prvních případů přeznačkování byl ve 20. letech Nash Light Six, původně Ajax Six

Praxe, že koncerny sdílejí své platformy, motory, převodovky a další komponenty, není záležitostí jen posledních let. Není divu, snížit vývojové a výrobní náklady a rychle zaplnit volné místo v portfoliu se firmy snažily odjakživa. Mnohdy si auto formátu, který jim zrovna chyběl v nabídce a potřebovaly ho rychle, zkrátka „půjčily“ – koupily licenci –, nalepily na něj svůj znáček a vymyslely pro něj nějaké sexy jméno.

autowp.ru_daewoo_arcadia_2 Druhá generace Hondy Legend v Jižní Koreji vozila znak Daewoo a označení Arcadia
daewoo_royale_prince_1 Daewoo Royale Prince bylo zase přeznačený licenční Opel Rekord

Hojně se tato praxe používala zejména v rámci velkých koncernů se širokou paletou značek, ať už těch ze Severní Ameriky, či Velké Británie. Čilý výměnný obchod dosti často probíhal i mezi velkými rivaly. A to i mezi kontinenty. A mnohdy vznikala nečekaná spojení. Případy tzv. badge engineeringu se vyskytly v Severní Americe již před sto lety. Prvním významnějším byl Ajax Six z 20. let minulého století, který nešel dostatečně dobře na odbyt, a tak se ho v rámci Nash Motors rozhodli přeznačkovat na Nash Light Six, a to i již vyrobené vozy. Naplno jej ale začaly giganty jako General Motors a Chrysler uplatňovat u svého širokého portfolia značek od 50. let, aby vyhověly rozkastování společnosti.

Premier Padmini Fiat 1100 Fiaty se vyráběly pod různými značkami po celém světě. Modely Premier Padmini...
autowp.ru_premier_118ne_1 ...a 118 NE byly kdysi k dostání v indických autosalonech

A rovněž British Motor Corporation po soustředění domácích značek pod jednu střechu v 60. letech. Asi žádné auto v historii nemělo tolik variant jako legendární Mini, které existovalo mj. jako Austin Mini, Leyland Mini, Morris Mini, ARO Mini, Riley Elf či Wolseley 1000. Pro příklady badge engineeringu nemusíme ani v našem případě chodit daleko. Jawa Minor II se po reorganizaci tuzemského průmyslu v období po II. světové válce proměnila na Aero Minor.

https://autobible.euro.cz/retro-vyhynule-evropske-sedany-se-zadnim-pohonem-ktere-uz-skoro-nepotkame/

Mladoboleslavská značka v 90. letech vyráběla Felicii Pickup také jako VW Caddy. Lada VAZ 2101 a její pokračovatelé mají původ ve Fiatu 124, který se licenčně vyráběl i ve Španělsku jako Seat 124, v Turecku jako Tofaş Murat 124 a v Indii vznikal jako Premier 118 NE.

IMG_2647 Hindustan Ambassador udělal v Indii mnohem větší kariéru (1958 až 2014) než ve Velké Británii výchozí Morris Oxford III. série

A z italských originálů vycházely i polské Fiaty a jugoslávské Zastavy. Samozřejmě nesmíme zapomenout ani na Oltcit 11, který se na západoevropských trzích prodával jako Citroën Axel, ani na Dacie – v licenci vyráběné Renaulty. Rumuni začínali s produkcí Renaultu 8, který nesl označení Dacia 1100. Mnohem déle se vyráběla Dacia 1300 (licenční Renault 12), která se dovážela i k nám. Zajímavou epizodou je i licenční montáž Renaultů a modelů Alpine v Bulharsku na konci 60. let pod značkami Bulgarrenault a Bulgaralpine (mj. i model A 110). V sousedním Rakousku na linkách firmy Steyr-Daimler-Puch vznikaly pod značkou Puch modely Fiat 500 a 126.

NCA001000902_009, 05-09-2007, 16:37, 8C, 8000x7970 (0+1346), 100%, NCA_08-08-07, 1/80 s, R56.7, G30.6, B32.5 Zastava 750 byl Fiat určený pro v Jugoslávii...
vaz_2101_zhiguli_2 ...a dobře známý VAZ 2101 byl Fiatem pro SSSR

Ve společném podniku s Mercedesem pak i Mercedes G a Puch G. Vůz určený původně primárně pro armádní účely se vyráběl i v civilní verzi. Pro své ozbrojené síly si ho vyhlédli i Francouzi. V zemi galského kohouta ho tak od 80. let vyráběl v licenci Peugeot v Sochaux s vlastními motory jako model P4, než ho v roce 1985 „přehrál“ na svou filiálku pro vojenskou výrobu Panhard. Vznikla i civilní verze P4, ta se však prodejně neujala.

https://autobible.euro.cz/retro-motor-vr6-od-volkswagenu-unikat-pohanel-nejen-golfy-passaty/

Speciál s motorem PRV se zúčastnil i Rallye Paříž–Dakar. Francouzi však vyráběli pro svou armádu i další německý model – VW Iltis, který nesl označení Citroën C44. Jednalo se o licenční Volkswagen Iltis. Renault zase pro změnu pod označením TRM 500 vyráběl model Fiat Campagnola. A Land Rover Defender se zase vyráběl ve Španělsku i pod značkou Santana (tu ale nesly např. i modifikované vozy Suzuki Vitara). Jeho dalším vývojem vznikl i další derivát – Iveco Massif.

autowp.ru_citroen_n_axel_4 V Rumunsku zdomácněly francouzské značky

Občas se tato metoda dokázala i hodně vymstít. Kupříkladu snaha o lidový Cadillac Cimarron na dlouhá léta pošramotila pověst této prestižní značky GM. Jednalo se v podstatě jen o načinčaný laciný Chevrolet Cavalier. Příliš se nepovedl ani záměr Saabu s modelem Saab-Lancia 600 z doby spolupráce s Fiatem na projektu vozů Saab 9000, Fiat Croma a Lancia Thema. Přeznačená Lancia Delta pro dánský, norský a švédský trh byla totálním propadákem. Pověsti Saabu neprospěly experimenty s upravenými SUV od GM ani s modifikovaným Subaru Impreza. Model 9-2X si vysloužil hanlivou přezdívku Saabaru.

autowp.ru_dacia_1100_1 Vše odstartovala Dacia 1100...
2018 - Collection Heritage Dacia ...následovaná modelem 1300

Naopak Opel Frontera, upravené Isuzu Rodeo, udělal v 90. letech v Evropě velkou kariéru. Produkce španělského Seatu představovala od 50. do 80. let až na výjimky jen přeznačené modely Fiatu. Velmi úzká spolupráce panovala v 80. a 90. letech také mezi Hondou a Roverem, kterému Japonci pomohli prakticky s celým výrobním programem. Z Hondy Civic se nejdříve stal Triumph Acclaim a poté následovala celá řada přeznačených a upravených Roverů 200, 400, 600, 800. Honda pro změnu na některých trzích „adoptovala“ Land Rover Discovery a měla ho ve svém portfoliu pod označením Crossroad.

autowp.ru_rover_420gsi_sport_turbo_1 Produkci britského Roveru v 80. a 90. letech představovaly upravené modely od Hondy...
autowp.ru_rover_800_2 ...ať už se jednalo o Rovery 400, 800 a 600, nebo sesterský Triumph Acclaim

Na japonském trhu je ostatně badge engineering mezi domácími značkami hojně využíván. Úspěšné modely dosti často dožívaly pod novou identitou v méně průmyslově rozvinutých zemích. Do důchodu se nechtělo ani Peugeotu 405, evropskému autu roku 1988, který ještě nedávno sjížděl z výrobních linek v Egyptě a Íránu. Na posledně jmenovaném trhu se dlouho po ukončení produkce ve Francii vyráběl i Citroën Xantia coby Saipa Xantia. Fiat Uno se v letech 1990 až 1998 na základě licence montoval v JAR pod značkou Nissan. Řada starších, mnohdy upravených modelů renomovaných výrobců se vyráběla i v Číně. Patří k nim kupříkladu i Chery Amulet, vycházející z první generace Seatu Toledo, či Dongfeng Elysée, což byl upravený Citroën ZX.

saab_lancia_600_2 Neúspěšný Saab-Lancia 600 pro dánský, norský a švédský trh
saab_lancia_600_1 Pochází z doby spolupráce s Fiatem na projektu Saab 9000/Fiat Croma/Lancia Thema

„Půjčené“ přeznačkované modely se tak mnohdy dočkaly mnohem delší kariéry než jejich původní předlohy, což je třeba příklad indického Hindustanu Ambassador, který patří k typickému obrazu indických silnic již po více než pět desetiletí. Místní automobilová ikona, vyráběná v Indii v letech 1958 až 2014, vycházela z britského Morrisu Oxford III. série. S nostalgicky zaobleným vozem jezdili především zástupci vlády, ministerští úředníci a taxikáři. V letech 1970 až 2000 vznikal v Indii i další obstarožní sedan Premier Padmini, licenční Fiat 1100. Od poloviny 80. let, kdy začala svůj model 800 (staré Suzuki Alto) v licenci Suzuki vyrábět nová automobilka Maruti, podíl Ambassadoru rychle klesal.

peugeot_p4_1 Mercedes G pro potřeby své armády vyráběli i Francouzi, civilní verze Peugeotu P4 se ale moc neujala. Později licenční výrobu převzal Panhard
autowp.ru_mazda_proceed_levante_4-door_2 Čilá výměna mezi značkami funguje v Japonsku. Suzuki Vitara první generace jako Mazda Proceed Levante

Zajímavostí je fakt, že se díky firmě Merlin Garages Ambassador v 90. letech dovážel i do Velké Británie. V Indii se ostatně ještě nedávno vyráběla v licenci pod značkou Bajaj i archaická tříkolka Tempo Hanseat, vyvinutá v Německu ještě za dob Adolfa Hitlera. Velmi dlouho se vyráběl v licenci i legendární JeepWillys. Mitsubishi ho vyrábělo ještě nedávno a indická Mahindra až do 90. let. Její dnešní modely Roxor a Thar zase vycházejí z Jeepu CJ.

10 - SEAT 1977 Seaty byly od 50. do 80. let až na výjimky (zelené kupé 1200 Sport) jen přeznačené Fiaty. První generace Toleda pokračovala v Číně jako Chery Amulet

Opely se v rámci koncernu GM ve Velké Británii vyráběly pod značkou Vauxhall, v Austrálii jako Holdeny a v USA jako Chevrolety, Saturny či Buicky. Čilá kooperace probíhala i mezi GM a jihokorejským Daewoo. To například vyrábělo Opel Rekord jako Royale Prince a Kadett pod různými značkami, dokonce s logem britského výrobce užitkových vozů Bedford (Astramax). Našinec si ale určitě vzpomene na tuzemský hit revolučního roku 1989 – Daewoo Racer.

https://autobible.euro.cz/retro-chevrolet-impala-1959-vs-lincoln-continental-1963/

Daewoo mělo ve svém porfoliu i jiné přeznačkované modely, převážně od GM, ale také druhou generaci Hondy Legend s označením Arcadia. Není bez zajímavosti, že konkurenční Hyundai začínal s licenčními modely od Fordu (Cortina, 20M, Granada), ale nechával na nich původní logo. A jeden velmi neobvyklý model nesl v 90. letech i logo další jihokorejské značky Kia. Roadster Kia Elan byl licenční verzí britského Lotusu Elan.

autowp.ru_alfa_romeo_dauphine_2 Alfa Romeo model Dauphine se na přelomu 50. a 60. let vyráběl v Miláně
alfa_romeo_arna_sl_4 Arna na bázi Nissanu Cherry v Pratole Seře o dvě dekády později

Také pod značkou Alfa Romeo bylo možné pořídit roztodivné věci. Renault Dauphine se na přelomu 50. a 60. let vyráběl v milánské továrně v Portellu jako Dauphine Alfa Romeo a dalším neobvyklým zástupcem milánské značky byl ve společném projektu Alfa Romeo Nissan Autoveicoli vytvořený propadák jménem Arna, v letech 1983 až 1987 v Itálii vyráběný technicky modifikovaný hatchback Nissan Cherry.

aero_minor_ii_1 Badge enginering po česku: z Jawy Minor II se stalo Aero Minor
autowp.ru_volkswagen_caddy_28 Felicia Pickup se v 90. letech vyráběla i coby VW Caddy

Těch automobilových chameleonů bylo samozřejmě mnohem více, než se může vejít do jednoho článku. Ostatně jen vývoj portfolia severoamerických značek v průběhu let by vydal na několik svazků knih.

Foto: archiv

  • Našli jste v článku chybu?
'; 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'; } }
'; 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 »