Fedora 42 pohledem cizince v cizí zemi

11. 4. 2025
Doba čtení: 15 minut

Sdílet

Dvaačtyřicáté vydání Fedory se blíží, máme tu beta verzi a jak všichni dobře víme, 42 je odpovědí na základní otázku všeho. Rozhodl jsem se tuto výzvu vyslyšet a opět po několik vydáních zkusit tuto oblíbenou distribuci.

Aby Fedora mohla žít životem svým, nikoli částečně zděděným po mnoha distribucích předchozích, které u mě takto dědí už letitý Ext4 diskový oddíl /home, dostalo se jí u mě výjimečné příležitosti, typově nového úložiště, u něhož jsem si propočítal, že migrace z původního by byla pracnější než ruční přenos dat.

Co se dozvíte v článku
  1. Co chystá Fedora 42
  2. První dojmy z Fedory 42
  3. Předběžné hodnocení po zhruba 10 dnech

Takže mohu s klidem prohlásit, že po 13 letech s PATA a 20 letech se SATA úložišti nyní s Fedorou 42 definitivně přecházím na M.2/NVMe úložiště. Konkrétní konfigurace, na které jsem Fedoru 42 instaloval, je tato:

  • deska s čipsetem AMD A520
  • Ryzen 5 4500, 6/12×3,6/4,1GHz, 7nm Zen2, TDP 65 W
  • 16 GB (2×8) DDR4–3200
  • Radeon RX 6500 XT, 4 GB GDDR5, 6nm, TBP 113W
  • 1 TB M.2/PCIe4.0×4 NVMe 1.3, 96layer TLC, 1 GB DDR4 cache, 600 TBW
  • 850 W ATX3.0, 16pin PCIe5, 80+ Bronze
  • 24" 1920×1080 LCD přes HDMI

Stroj jistě není žádný trhač asfaltu, procesor je ekvivalentem středně výkonných modelů roku 2019, Ryzenu 3500 či 3600, grafická karta šla na trh sice začátkem roku 2022, ale šlo o low-end výkonově mírně pod úrovní Radeonu RX 580 z dubna 2017, a ani nic dalšího na tomto PC zásadně neoslní. Plasma 5.27 či GNOME 44 v Mageie i Plasma 6.3 či GNOME 47 v Manjaru na tom běží skvěle, o LXDE či LXQt ani netřeba se zmiňovat. Zkrátka Fedora 42 by měla mít na růžích ustláno a já byl zvědav, jak se mi za to odmění.

Předně musím upřesnit, že jsem rovnou sáhl po edici Fedora Design Suite, protože pokud za mě někdo rovnou řeší GIMP a Darktable, tak jsem spokojen. Takže i na toto jsem byl zvědav, zejména na funkčnost konfigurace Darktable (včetně OpenCL na GPU) a také GIMPu. U něj mě ale kromě výchozího programu zajímá v podstatně jen JPEG XL a ten už je součástí trojkové řady.

Zkrátka nečekám problémy, nicméně jelikož jsem právě ve fázi, kdy po přibližně 15 letech s Rawtherapee zkouším přejít na Darktable, je tohle pro mě dosti důležitý bod. Problémy být mohou z principu neukončenosti vývoje Fedory 42, tento text zde na Rootu reflektuje aktuální stav, tedy den 11. dubna 2025, přičemž ostré vydání je naplánováno na 22. dubna 2025.

Co chystá Fedora 42

Vývojáři Fedory pouští s touto verzí mezi uživatele několik zajímavých novinek, které sice nejsou zásadní revolucí, ale posouvají Fedoru zase blíže ke stanoveným změnám architektury systému.

Instalátor Anaconda

Předně bychom jako uživatelé měli potkat změny v instalátoru Anaconda, který na všech architekturách bude jako výchozí systém diskových oddílů už používat GPT. Anaconda také bude běžet nativně na Waylandu a pro Fedoru Workstation se má stát výchozím UI to webové, WebUI. Pro běžného uživatele tak dojde ke zlepšení přehlednosti průběhu instalace systému, v popisu beta verze je zmíněna také lepší přehlednost nastavení diskových oddílů, kdy instalátor uživatele lépe provede celým procesem.

Mělo by být lepší automatické rozdělení oddílů na úložištích. Já jsem doteď ku spokojenosti používal rozdělení na 40GB oddíl / + nějaké množství swap oddílu (technicky vzato by nemusel být potřeba vůbec, ale kvůli hibernaci se hodí) a zbytek je oddíl  /home.

Případné problémy, kdy se daná linuxová distribuce „sesype“ řeším jednoduše rychlý přeinstalováním, kdy díky převzetí /home nejsou problémy s ničím (za poslední roky mohu říci, že na Mageie ani s účty v prohlížeči či službou Steam).

Mimochodem instalátor dostává volbu pro přeinstalování Fedory – to zní jako super věc přesně pro mě. Plus podpora dual-bootu, kdy pro druhý systém stačí jen vyhradit potřebné místo a Anaconda se postará o technické detaily.

Využití Btrfs pro balíčky, SDL3 atd.

Pojďme od instalátoru dál. Fedora 42 dále pro všechny varianty přináší DNF/RPM Copy on Write, což by mělo vést ke snížení I/O operací a zmírnění zátěže CPU při dekompresi balíčků. Fedora zde využívá reflinking souborového systému Btrfs, který už pár let používá jako výchozí. U beta verze je k tomuto poznámka, že věc není ve výchozím nastavení systému zapnutá.

Dále dvaačtyřicítka přináší podporu optimalizací pro architekturu AMD64 / x86_64 (v2), a to s použitím symlinků v /usr/bin, kdy se za běhu rozhodne, kterou variantu spustit. Balík SDL2 je nahrazen za sdl2-compact, který používá SDL3 – Fedora přechází na SDL3 umožňující nativní běh na Waylandu.

Plasma s verzí 6.x je nově oficiální edicí Fedory, Xfce varianta přináší Xfce 4.20, LXQt varianta zase novější LXQt 2.1 (zde si dovolím říci po letmém používání této verze v rámci Lubuntu 25.04, že je viditelně lepší než verze předcházející).

Novinky s GNOME 48

Největší kupa novinek viditelná běžnému uživateli standardní Workstation verze přichází do systému pochopitelně s novější verzí desktopového prostředí GNOME 48. Jemu jsme před časem věnovali samostatný článek.

Heslovitě tedy to podstatné. GNOME 48 podporuje sdružování upozornění hodící se zejména uživatelům, kterým upozornění chodí opravdu hodně. Dále je tu Dynamic Triple Buffering, který vede k plynulejšímu dojmu z UI v situacích, kdy se nestíhá jeho vykreslování. Novou hvězdou Wayland světa je podpora HDR a správy barev.

Změna přichází v přístupu k otevírání nových oken, kdy se nově bude používat otevírání oken na středu obrazovky. GNOME 48 také má nové písmo na bázi rodiny Inter (které vypadá zajímavě a hodnotím jej jako o něco čitelnější díky „kontrastnějšímu“ vzhledu oproti tomu, co mám nakoukáno z Mageiy a GNOME 44), jsou zde novinky kolem klávesových zkratek a dále třeba aplikace Digitální pohoda (na tu jsem se těšil a jsem zvědav, jak moc velkého závisláka ze mě jí sesbíraná data vykreslí).

Nově se také pro přehrávání hudby používá jednoduchý nástroj Decibels. Nedávno jsem ho někde v diskusi spíše kritizoval, nicméně od té doby mi došlo, že vlastně už dávno ani Audacious moc nevyužívám jinak, než že v něm otevřu jeden soubor či jedno album a pak to zase zavřu, protože jsem si paradoxně zvykl pro poslech v pozadí více na různé automaticky vytvářené playlisty, které mi generuje YouTube.

Takže možná jsem vlastně optimální člověk pro Decibels. Na Decibely (tedy přesněji řečeno „Zvukový přehrávač“) se zvykne celkem rychle, vylepšil bych ale jednu věc: aby to umělo přehrát, i když na to člověk přetáhne adresář / více označených souborů či archiv RAR. Jasně, je tu pořád Rhytmbox, ale tohle je zrovna tak drobounká funkcionalita, že mi přijde omezení na jeden přehrávaný soubor jako omezení umělé. Ostatně nejsem sám, komu by se podpora seznamu skladeb líbila.

Končí Eye of GNOME a jeho místo přebírá nová aplikace Loupe. Výchozí prohlížeč obrázků v GNOME mi historicky spíše nevyhovoval, až dosud jsem to typicky řešil tak, že jsem i do GNOME přidával GwenView z projektu KDE. Loupe vypadá dobře, funguje přesně tak, jak od nástroje pro jednoduché rychlé prohlížení fotek chci, takže za mě dobré. Za sebe bych zkrátil časovou prodlevu, než ve fullscreen režimu zmizí ovládací prvky rozhraní.

Textový editor byl pro mě vždy největší bolístka GNOME. Platilo to pro původní GTK2 Gedit, platilo to i pro GTK3 a platilo to i v GNOME 44 pro nový GTK4 editor „GNOME Text Editor“ . Vždy se 100% jistotou totiž trpím takovou hloupoučkou chybkou (kterou jsem líný nahlásit, protože: KWrite). Já typicky píšu články na Roota právě v takovém jednoduchém editoru, rovnou v HTML.

Když si například založím titulek článku a pak „si jdu udělat kafe“, tak když se vrátím a zahájím tagem <p>, tak si „chroupne disk“ a zruší se zvýraznění syntaxe, jakkoli zůstane nastavené HTML zvýrazňování. Řešením je přepnout na jiný typ, tedy ERB/HTML, nicméně když to děláte 20× za den, tak to není řešení, ale frustrace. Proto používám KWrite. Nechci to zakřiknout, ale prozatím se zdá, že tato chyba se mi ve Fedoře 42 s GNOME 48 neprojevuje. Takže přecházím na textový editor GNOME, vyřešeno, za což děkuji.

Neméně zvědav jsem byl na nástroj Exercise Timer pro intervalové tréninky, protože jako spíše posedávající ajťák vyrobený v 70. letech pociťuji už delší dobu nutnost se nějak hejbat a tudíž kromě jiného poslední dobou rád tyhle nástroje zkoumám. Nicméně na rukou mi sedící hodinky Suunto to asi netrumfne a beztak „mám bebí“ a tyto aktivity musí ještě několik týdnů počkat.

Vlastně tuto aplikaci zmiňuji pro dokreslení toho, co mě na GNOME poslední dobou vyhovuje: dělají jej lidé, kteří míří směrem k větší a větší podpoře nejen digitálního wellbeingu ale obecně wellbeingu jako takového. A řekl bych, že je vidět, že u toho přemýšlejí. Super.

První dojmy z Fedory 42

V GNOME jsem za posledních několik let spíše domorodec. Ve Fedoře jsem ale cizinec. Byl jsem tedy zvědav, jak si vede v oblastech, které mě zajímají. Dovolil jsem si je seřadit dle priorit, od nejvyšší k nejnižší.

Uživatelské priority

  1. Nechci řešit problémy – od toho je tu Fedora, aby fungovala, aniž by mě otravovala v nějakými rozhodováními o čemkoli technickém v pozadí.
  2. Chci plně stabilní systém – a je mi jedno, kdo může za případnou nestabilitu, je na Fedoře, aby mi ji zařídila.
    • Tento bod se řeší prakticky sám, nezaznamenávám žádné zásadní problémy či nestability ani s beta verzí.
  3. Chci dobře běžící prohlížeče Firefox a Chromium v aktuálních verzích.
    • Bod, který plnily a plní všechny linuxové distribuce, které jsem kdy používal; pro IE toto ne vždy platilo.
  4. Nepřetahování se se mnou o tom, v čem budu otevírat ty či ony soubory (zejména audio, video, fotky).
    • Po počátečním kolečku nastavení pro jednotlivé formáty to funguje. Ale chtělo by to nějaké centrální udělátko, počítejte se mnou: mkv, ogm, webm, avi, mp4, mov, asf, wmv, divx, vob, mpg/mpeg + mp3, ogg, aac, wma, opus, flac, wav + jpg/jpeg, png, gif, dng/orf, jxl, webp, heic/heif, … snad jsem na nic nezapomněl … – je to otrava.
  5. Nechci být omezen americkými softwarovými patenty – tedy pokud nejsou rovnou v základu systému, chci snadnou cestu pro zprovoznění všech audio / video / foto formátů.
    • Řešitelné relativně jednoduše, jakkoli to není pro líného uživatele optimální.
  6. Dobře fungující zobrazení Qt aplikací v GTK desktopu (či naopak), včetně správného zohledňování světlého/tmavého vzhledu – aby všechny lišty, ikony apod. vypadaly čitelně.
    • Tohle už naštěstí typicky nezlobí (ťuky-ťuk na nejbližší dřevo).
  7. Jednoduchý GUI instalátor aplikací a aktualizací.
    • Jako uživateli jiných systémů se mi jeví, že GNOME Software funguje dobře. Asi bych si dokázal představit nějaké změny v procesech jeho fungování, ale víceméně bych tím jen dal najevo, že můj způsob je limitovaný na mé potřeby a nedomyslel jsem související detaily.
  8. Dobrý jednoduchý textový editor.
    • Splněno.
  9. Podpora formátů jako AV1, JPEG XL, RAW, Opus přímo v systému – ale umím si to kdyžtak zařídit vlastní cestou.
    • AVIF i JPEG XL umí Darktable i GIMP, s RAWy pochopitelně není problém, Opus či Vorbis také fungují, takže tato nejnižší priorita je 100% řešena ve Fedoře, stejně jako v jakékoli jiné distribuci.

Nastavení rozložení klávesnice při instalaci, kdy se z Anacondy volá vnější GNOME dialog, je takové zvláštní. Proč, když mám nastavenu češtinu, musím ručně přidávat české rozložení? No, možná je to jen nonsens v beta verzi, každopádně uživatelsky řešitelný během asi tak 15 sekund. Nemám zásadních výhrad. Rozdělení disku, kdy systému poskytnete celé SSD pak spoléhá na Ext4 pro boot oddíly; na systém a /home je to jeden velký Btrfs se subvolume – asi logické, proč ne.

Instalace aplikací, které mi chyběly ve výchozím systému (tedy hlavně MPV) je otázkou naklikání v GNOME Software (kromě videa, viz dále). Většinou lze volit mezi RPM balíčkem, Flatpakem Fedory a Flatpakem z Flathubu, volba je na vás. Proces běží spolehlivě.

Stejné platí pro aktualizace, kdy Fedora používá jejich instalaci během restartu (je to zvláštně zajímavé: zatímco Fedora a jiné linuxové distribuce v tomto „microsoftovatí“, Microsoft v tomto „linuxovatí“ a chystá instalace aplikací v běžícím systému – ale to je jen takový postřeh, osobně jsem dospěl do bodu, kdy je mi jedno, jak si to distribuce řeší, hlavně aby to bylo spolehlivé.

Co mi vadí: tradiční trápení s video formáty a LibreOffice

Aktivace repozitářů třetích stran je v procesu instalace/nastavení systému otázka jednoho kliknutí. Kodeky fungují, resp. cokoli z videí mi v MPV z Flathubu jde bez potíží – tedy poté, co jsem napravil svoji fatální chybu spočívající v prvotní instalaci MPV od Fedory, nikoli z Flathubu. Toto MPV si neporadilo s H.265 apod. Po přeinstalování MPV z Flathubu vše funguje. Alternativně lze použít postup z RPM Fusion, který téměř vše rozchodí i v přehrávači GNOME Videa. Jak moc velký nepořádek ta sekvence příkazů nadělá v repozitářích, neřeším, chtěl jsem si hlavně vyzkoušet, jestli vůbec lze GNOME Videa dotáhnout do fáze, kdy by přehrávaly vše.

Slovo téměř je však důležité: mám na tyhle mezní scénáře několik speciálních videí. Jedním z nich je věc jménem Apollo 11 (2019) (2160p BluRay x265 10bit HDR Tigole).mkv (pozn.: tento dokument lze koupit jak na běžném Blu-ray disku za pár stovek, tak na UHD Blu-ray za něco přes tisícovku; je-li někde na online službách, jsem nezkoumal). To HDR v názvu souboru je podstatné. Ani dnes ve Fedoře 42 s GNOME 48, v podporou formátů zprovozněnou přes uvedené RPM Fusion, není toto video přehráváno správně.

Běží u mě na SDR zobrazení tak nějak „vypraně“, prostě jako když tupě oříznete HDR gamut do SDR, případně točíte foťákem video v nějakém log formátu, počítajícím s tím, že pak bude roztaženo na výrazně větší rozsah expozičních stupňů. Nikde v přehrávači nejde upravit nastavení, aby se video zobrazovalo správně. V MPV od Fedory se vůbec nepřehraje (protože Fedora sestavuje MPV bez H.265?). V MPV z Flathubu toto video naopak běží perfektně.

Vůbec tyhle video problémy jsou moje jediná velká výtka k Fedoře 42 a Fedoře obecně: když už se musíte držet amerických omezení plynoucích ze softwarových patentů, tak prosím dejte evropskému uživateli nějaký jednodušší způsob, jak to zprovoznit. Chybová hláška v přehrávači, že nemám kodek pro H.265 směřující do GNOME Software, kde ten kodek nejde doinstalovat, mi na GNOME vadí už dobrých 15 let a pořád je to takhle zvojtěné. Vyřešit, prosím!

Fedora 42

Fedora 42 a magický dialog při zprovozňování Google účtu.

Autor: David Ježek

Z výtek menších, kde si vůbec nejsem jistý, jestli nejde o chybku před-finálního systému, musím zmínit jeden podivný dialog týkající se Googlu: když jsem v systému mezi online účty chtěl přihlásit svůj Google, tak po vyplnění všeho v zobrazených Google oknech ohledně loginu a všech povolení přístupu na mě GNOME ve Fedoře vyhodilo jakousi podivnou hlášku, do které nepasovalo ani heslo od Googlu, ani heslo do Fedory. Jelikož jsem do Fedory nezadával žádné jiné heslo, nebyl jsem schopen rozklíčovat o co jde a tak jsem holt kvůli zprovoznění Google účtu musel googlit, abych zjistil, že řešením je smazat výchozí nenastavenou klíčenku. Pak vše funguje.

Druhá drobnost se pak týká LibreOffice, kdy já jsem zvyklý mít v hlavní liště pro rychlé spouštění jen „LibreOffice“ (tedy nikoli přímo Writer či Calc či Impress) a z nabídky si pak vybírat, jestli chci otevřít starší soubor, nebo nový textový / tabulkový / prezentační. Fedora 42 Beta mi ale „LibreOffice“ mezi aplikacemi nenabízí, ač jej nabízí v aplikacích při „Otevřít pomocí“. Tak holt mám v liště Writer a pak hned mačkám Ctrl+W. Může však i zde jít o chybku před-finálního vydání.

Skok jménem Darktable

Práce s fotografií je pro mě stěžejní oblast, u které chci, aby mi systém poskytoval co nejlepší podporu. Běžně jsem zvyknut se trápit s Rawtherapee + GIMPem (oba nástroje mají svá specifika, ale zvykl jsem si). Jak jsem zmiňoval minule, Rawtherapee a bezzrcadlovka Olympus je kombinace, která si vzájemně dosti nesedí. Popral jsem se v posledních týdnech trochu více s Darktable (a také přenastavil věci kolem barev v bezzrcadlovce) a mohu říci, že tahle kombinace je schopna dosahovat zhruba 90% nádhernosti podání barev, co Pentax. Ještě jsem nedošel k cíli, nicméně ten potenciál v Darktable je a hodlám jej dále prozkoumat.

Ano, jsem si vědom, že existuje Aurélien, který Darktable velmi kritizuje, až založil vlastní fork Ansel, nicméně já se potřebuji držet projektu, který není one-man-show s nejistou budoucností (na což zatím Ansel bohužel aspiruje). Bylo by super, kdyby se podařilo situaci urovnat a dál pokračovat jako jeden projekt, nikoli současná kombinace pětkového Darktable se vší oprávněnou kritikou, kterou na Darktable sype Aurélien, a k tomu alfa verze Anselu postavená na čtyřkovém Darktable a u mě víceméně neschopná stabilního běhu.

Jinými slovy: Darktable navenek funguje skvěle (a mě jako řadového uživatele netrápí případná hrůza ve zdrojácích tohoto projektu). Chtěl jsem jej mít rovnou i s OpenCL akcelerací na Radeonu, ale to ve výchozí konfiguraci na Fedoře nefungovalo. Avšak existuje Wiki záznam, kdy za pomoci řady několika příkazů jsem do Fedory přidal AMD ROCm a aktivoval podporu v Darktable. Při nejbližším spuštění už si Darktable všechno „očuchal“ a zkonfiguroval. Jestli to běží, nevím/neumím ověřit, ale všechny akce v Darktable nad 16Mpix RAWy shledávám bleskurychlými.

Předběžné hodnocení po zhruba 10 dnech

Fedoru jsem tu a tam zkoušel po celá léta s relativní pravidelností už od vydání vůbec první verze. Vždycky na ní něco oproti (v dávnějších dobách) Ubuntu nefungovalo či zlobilo, případně byla viditelně pomalejší než ekvivalentní natavení Mandrivy / Mageiy (v letech pozdějších). Vždy se našlo něco, kvůli čemu jsem v podstatě po pár dnech sklapl krovky a vracel se (zejména) k Mageie.

V tuto chvíli riskuji, že zase všechno zkazím, že pokouším vrtkavou štěstěnu příliš, ale poprvé mohu říci, že se tak neděje. Fedora 42 je na mém primárním PC nyní jako jediný systém. Nastavená, zkonfigurovaná, upravená k obrazu mému, prostě zabydlená se vším všudy. Nic nedrhne, vše funguje, neobjevují se nenadálé problémy. Přetrvává jen ten mnohaletý zvyk, že „nejsem u sebe doma“, u Mageiy. Ale i ve Fedoře 42 se bydlí dobře, a to pořád nejde o finální vydání. Jsem potěšen.

Pod tímto odstavcem už dávám jen stručné bodové shrnutí. Kdybych však měl Fedoru 42 hodnotit jako ve škole, pak jako „operační systém jako celek“ si u mě Fedora 42 Design Suite odnáší známku 1-. Ten mínus je hodně malý a je vlastně není úplně fér, protože přístup Fedory k formátům chráněným v části světa softwarovými patenty není chyba, ale vlastnost distribuce. Takže mínus klidně ignoruje.

+ dobře fungující systém
+ pěkně vyladěné GNOME 48
+ návody existují, fungují a nevedou na chybné výsledky

bitcoin_smenarna


- jednoduché zprovoznění video/audio formátů stále ne
- některé zbytečné složitosti v instalátoru systému (výběr rozložení klávesnice)

- podivné zprovozňování Googlu


- chybějící holá aplikace „LibreOffice“
? pořád ve widgetu počasí nevidím Poděbrady (Prahu, Podgoricu či Pardubice mi to nabídne)

Autor článku

Příznivec open-source rád píšící i o ne-IT tématech. Odpůrce softwarových patentů a omezování občanských svobod ve prospěch korporací.

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