How to embed a video on a website using HTML5 markup?

HTML5 Video na iOS: Autoplay a Řešení Problémů

02/12/2022

Rating: 4.72 (5760 votes)

V dnešní době je video nedílnou součástí webového obsahu. Od reklam po tutoriály, dynamické vizuály dokážou zaujmout uživatele jako nic jiného. Nicméně, pro webové vývojáře se často stává noční můrou zajistit, aby se HTML5 videa chovala konzistentně napříč všemi zařízeními a prohlížeči, zejména pak na zařízeních s iOS, jako jsou iPhony a iPady. Často se setkáváme s problémy s automatickým přehráváním nebo s tím, že se video jednoduše vůbec nenačte. Tento článek se ponoří do specifik HTML5 videa na iOS 10 a novějších verzích, vysvětlí, proč se věci chovají jinak, a nabídne praktická řešení, jak překonat běžné překážky, včetně klíčových aspektů přístupnosti.

Does Safari support HTML5 video?
First things first, let's check if your Safari version supports HTML5 video. Based on your note, it does, so that's a good start. Now, let's move on to potential causes: Video Format: Safari has specific requirements for video formats. Check if your videos are encoded in the proper formats such as MP4, Ogg, and WebM.
Obsahový index

iOS 10 a automatické přehrávání HTML5 videa: Co se změnilo?

S příchodem iOS 10 a následnými aktualizacemi Apple zavedl přísnější pravidla pro automatické přehrávání médií v prohlížeči Safari. Hlavním důvodem byla snaha zlepšit uživatelský zážitek, šetřit data mobilních uživatelů a prodloužit životnost baterie. To znamenalo, že videa, která dříve hrála automaticky na desktopu, se na iOS zařízeních najednou přestala spouštět. Klíčem k úspěšnému automatickému přehrávání na iOS se staly specifické atributy v HTML5 značce <video>.

Pro automatické přehrávání videa na iOS je nezbytné, aby video splňovalo dvě hlavní podmínky:

  • Musí být ztišené (muted).
  • Musí mít atribut playsinline.

Bez těchto atributů Safari na iOS obvykle vyžaduje interakci uživatele (např. klepnutí na tlačítko přehrát), aby se video spustilo, nebo se může pokusit přehrát video na celou obrazovku. Atribut playsinline je obzvláště důležitý, protože umožňuje videu přehrávat se přímo v rámci webové stránky, aniž by se automaticky přepnulo do režimu celé obrazovky, což je pro uživatelský zážitek často preferované.

Vytvoření inkluzivního ovládání videa: Tlačítka Přehrát/Pozastavit

I když se video může automaticky přehrávat, je klíčové poskytnout uživateli plnou kontrolu nad jeho přehráváním. To znamená implementovat intuitivní tlačítka pro přehrání a pozastavení. Pro zajištění maximální přístupnosti je vhodné použít samostatná tlačítka pro přehrát a pozastavit, namísto jednoho přepínacího tlačítka s měnící se ikonou. Proč? Pro uživatele, kteří spoléhají na čtečky obrazovky, je mnohem jasnější, když je každá akce spojena s jednoznačně popsaným tlačítkem.

Při tvorbě těchto tlačítek je důležité dbát na následující atributy:

  • aria-pressed: Tento atribut slouží k indikaci stavu tlačítka. Hodnota true znamená, že tlačítko je „stisknuté“ (např. video hraje a tlačítko pozastavit je aktivní), zatímco false značí opak. Tento stav se dynamicky aktualizuje pomocí JavaScriptu.
  • aria-label: Poskytuje textový popis tlačítka pro čtečky obrazovky. Mělo by jasně popisovat funkci tlačítka, např. „Přehrát video“ nebo „Pozastavit video“.
  • title: Zobrazuje text po najetí myši na tlačítko, což je užitečné pro vizuální uživatele.

Příkladem takové struktury by mohla být dvě tlačítka, jedno s popiskem „Přehrát video“ a druhé „Pozastavit video“, s příslušnými SVG ikonami a atributy aria-pressed, které se mění, aby odrážely aktuální stav přehrávání.

Stylování a skrytí tlačítek: Progresivní vylepšení

Progresivní vylepšení je klíčovým principem webového vývoje, který zajišťuje, že webový obsah je přístupný všem uživatelům, bez ohledu na jejich prohlížeč nebo zařízení. V kontextu tlačítek pro přehrávání videa to znamená, že pokud prohlížeč uživatele nepodporuje JavaScript nebo má JavaScript vypnutý, tlačítka by měla být skryta, protože by neplnila žádnou funkci. Toho lze dosáhnout jednoduchým CSS pravidlem, které skryje tlačítka, pokud je na elementu html přítomna třída jako no-enhance. Tato třída je pak odstraněna pomocí JavaScriptu, jakmile se ověří, že prohlížeč podporuje potřebné funkce.

Základní stylování tlačítek a video kontejneru:

Tlačítka by měla být vizuálně atraktivní a snadno klikatelná, ideálně ve formě kruhu s ikonou uprostřed. Video samotné by mělo být responzivní a vyplňovat dostupnou šířku. Důležitým CSS pravidlem je také to, které skryje aktuálně „stisknuté“ tlačítko (např. když video hraje, tlačítko „Přehrát“ by mělo být skryto a naopak).

.m-video__button[aria-pressed="true"] { display: none; }

Toto pravidlo zajišťuje, že se vždy zobrazí pouze relevantní tlačítko – buď pro přehrání, nebo pro pozastavení.

Does iOS 10 support auto-playing HTML5 video?
Unfortunately, it does mean more work on our part to set up the markup needed to create an auto-playing HTML5 video. It’s also worth noting, prior to iOS10 auto-playing HTML5 video wasn’t possible on iOS devices. But that changed when Apple implemented the playsinline attribute (which needs to be added to our element to autoplay on iOS).

JavaScript pro interaktivní přehrávání

Aby tlačítka skutečně fungovala a video reagovalo na uživatelské vstupy, je nezbytné přidat JavaScript. Moderní JavaScript (ES6 a novější) nabízí elegantní způsoby, jak spravovat interakce s videem. Základní logika zahrnuje:

  1. Detekce funkcí prohlížeče: Před spuštěním jakéhokoli JavaScriptu je dobré zkontrolovat, zda prohlížeč podporuje potřebné funkce (např. querySelector, addEventListener, classList). Pokud ano, odstraní se třída no-enhance z HTML elementu, čímž se tlačítka zobrazí.
  2. Inicializace video objektů: Pro každé video na stránce se vytvoří nová instance třídy, která bude spravovat jeho chování.
  3. Přidání posluchačů událostí: Tlačítkům přehrát a pozastavit se přidají posluchači událostí kliknutí. Když uživatel klikne na tlačítko, zavolá se příslušná metoda (playVideo() nebo pauseVideo()).
  4. Metody playVideo() a pauseVideo(): Tyto metody volají nativní metody HTML5 videa (videoElement.play() a videoElement.pause()) a zároveň aktualizují atributy aria-pressed na příslušných tlačítkách, aby se správně skryla/zobrazila a poskytla zpětnou vazbu čtečkám obrazovky.

Důležité: prefers-reduced-motion

Jednou z klíčových funkcí pro zlepšení přístupnosti je media query prefers-reduced-motion. Tato funkce umožňuje webovým stránkám reagovat na uživatelské nastavení operačního systému, které signalizuje preferenci pro omezení animací a pohybu. Je to nesmírně důležité pro uživatele trpící vestibulárními poruchami nebo citlivostí na pohyb, u kterých může nadměrný pohyb na obrazovce vyvolat závratě, nevolnost, migrény nebo ztrátu rovnováhy.

V JavaScriptu můžete tuto preferenci detekovat pomocí matchMedia("(prefers-reduced-motion)").matches. Pokud je tato preference nastavena na true, je dobré automatické přehrávání videa vypnout a video pozastavit, aby se předešlo nepříjemným pocitům u citlivých uživatelů. Toto nastavení je v současné době podporováno v Safari a dalších moderních prohlížečích.

Jak zapnout omezený pohyb na Macu a iOS:

Na Macu:

  1. Otevřete Nastavení systému (System Settings) nebo Předvolby systému (System Preferences).
  2. Klikněte na Zpřístupnění (Accessibility).
  3. Vyberte Displej (Display).
  4. Zaškrtněte políčko Omezit pohyb (Reduce Motion).

Na iOS (iPhone/iPad):

  1. Otevřete aplikaci Nastavení (Settings).
  2. Klepněte na Obecné (General).
  3. Klepněte na Zpřístupnění (Accessibility).
  4. Klepněte na Omezit pohyb (Reduce Motion).
  5. Přepněte přepínač Omezit pohyb do polohy Zapnuto.

Proč HTML5 video nefunguje v Safari (iPhone/iPad)?

Kromě problémů s automatickým přehráváním se můžete setkat s tím, že se vaše HTML5 video v Safari na iOS vůbec nezobrazí nebo nepřehraje. Zde jsou nejčastější příčiny a jejich řešení:

  1. Formát videa

    Safari, stejně jako jiné prohlížeče, má specifické požadavky na formáty videa. Zatímco některé prohlížeče podporují Ogg nebo WebM, Safari na iOS primárně spoléhá na MP4 s kodekem H.264. Pokud vaše video není v tomto formátu, nemusí se přehrát.

    Řešení: Konvertujte svá videa do formátu MP4 s kodekem H.264. Použijte nástroje jako HandBrake pro spolehlivou konverzi. Je také dobrým zvykem poskytovat více zdrojových souborů (např. MP4, WebM, Ogg) v rámci značky <source> uvnitř <video>, aby se zajistila maximální kompatibilita napříč prohlížeči.

  2. Kompatibilita kodeků

    I když je soubor MP4, nemusí se přehrát, pokud používá nepodporovaný kodek. H.264 je standard pro Safari.

    Řešení: Ujistěte se, že vaše MP4 soubory používají kodek H.264. Při konverzi zkontrolujte nastavení kodeku.

  3. Nesprávná cesta k souboru

    Základní, ale překvapivě častá chyba. Pokud cesta k souboru videa není správná, prohlížeč soubor nenajde.

    Řešení: Dvojitá kontrola cesty k souboru. Použijte absolutní nebo relativní cesty a ujistěte se, že soubor existuje na daném místě.

    Why is JavaScript not playing HTML5 video?
    If you have used Javascript to play an html5 video, you may encounter some errors, including this error: or permission errors. The reason is that browsers in recent years changed their policies to prevent autoplay video because they think users don't want it (that's correct in most cases). What we can do to solve this issue?
  4. Problémy s rozměry videa

    Někdy může mít Safari potíže s přehráváním videí, pokud nejsou explicitně nastaveny atributy width a height nebo pokud jsou rozměry videa neobvyklé.

    Řešení: Vždy specifikujte width a height atributy ve značce <video>. I když je pak můžete přepsat pomocí CSS pro responzivní design, jejich přítomnost v HTML může pomoci prohlížeči s inicializací.

  5. Zastaralá verze Safari

    Starší verze prohlížeče Safari nemusí plně podporovat všechny funkce HTML5 videa nebo mohou mít chyby, které byly v novějších verzích opraveny.

    Řešení: Vždy udržujte Safari a operační systém iOS aktualizované na nejnovější verzi. To často řeší mnoho nekompatibilit a chyb.

Proč JavaScript nepřehraje HTML5 video automaticky?

Jak již bylo zmíněno, hlavní překážkou pro automatické přehrávání videa prostřednictvím JavaScriptu na iOS (a ve většině moderních prohlížečů) jsou politiky prohlížečů, které upřednostňují uživatelskou kontrolu a šetří zdroje. Pokud se pokusíte zavolat videoElement.play() bez předchozí interakce uživatele, pravděpodobně narazíte na chybu nebo se video jednoduše nespustí.

Řešení:

Pro spolehlivé automatické přehrávání je nutné přidat atributy autoplay, muted a playsinline přímo do značky <video> v HTML. To signalizuje prohlížeči, že video má být automaticky spuštěno, ale bez zvuku a přímo v rámci stránky. Teprve po uživatelské interakci (např. kliknutí na tlačítko „Zrušit ztišení“) můžete prostřednictvím JavaScriptu nastavit videoElement.muted = false; a povolit zvuk.

Pro tip: Pokud máte na stránce více automaticky přehrávaných videí a jedno tlačítko pro zrušení ztišení všech videí, ujistěte se, že JavaScriptem zrušíte ztišení všech videí v jedné callback funkci po kliknutí. iOS totiž nemusí povolit zrušení ztišení videa, dokud se video nezačne přehrávat na základě uživatelské poptávky, a hromadné zrušení ztišení po jedné interakci je efektivnější.

Does iOS 10 support auto-playing HTML5 video?
Unfortunately, it does mean more work on our part to set up the markup needed to create an auto-playing HTML5 video. It’s also worth noting, prior to iOS10 auto-playing HTML5 video wasn’t possible on iOS devices. But that changed when Apple implemented the playsinline attribute (which needs to be added to our element to autoplay on iOS).

Vložení videa na web pomocí HTML5 značky

Základní vložení HTML5 videa je poměrně jednoduché. Značka <video> je flexibilní a umožňuje specifikovat různé zdroje, atributy pro ovládání přehrávání a chování.

<video autoplay muted playsinline controls loop poster="cesta/k/obrazku.jpg"> <source src="cesta/k/videu.mp4" type="video/mp4"> <source src="cesta/k/videu.webm" type="video/webm"> <!-- Fallback pro starší prohlížeče --> <p>Váš prohlížeč nepodporuje HTML5 video.</p> </video>

Vysvětlení atributů:

  • autoplay: Pokusí se o automatické přehrávání videa hned po načtení stránky.
  • muted: Ztlumí zvuk videa ve výchozím nastavení. Pro iOS je to nezbytné pro autoplay.
  • playsinline: Umožňuje videu přehrávat se inline v rámci stránky na iOS, nikoli na celou obrazovku. Pro iOS je to nezbytné pro autoplay.
  • controls: Zobrazí standardní ovládací prvky videa (přehrát/pozastavit, hlasitost, posuvník, celá obrazovka).
  • loop: Video se bude přehrávat ve smyčce. Ideální pro nahrazení animovaných GIFů.
  • poster: Určuje URL obrázku, který se zobrazí, dokud se video nenačte nebo dokud uživatel video nespustí.
  • <source>: Umožňuje specifikovat více zdrojů videa v různých formátech. Prohlížeč si vybere první formát, který podporuje.

Tabulka Porovnání Klíčových Atributů HTML5 Videa pro iOS

AtributPopisDopad na iOS Autoplay / Přehrávání
autoplayVideo se pokusí automaticky spustit po načtení stránky.Na iOS vyžaduje zároveň muted a playsinline pro funkčnost.
mutedVideo je ve výchozím nastavení ztišené.Klíčový pro automatické přehrávání na iOS. Bez něj se video automaticky nespustí.
playsinlineUmožňuje přehrávání videa přímo na stránce, nikoli na celou obrazovku.Klíčový pro automatické přehrávání na iOS. Bez něj se video pokusí přehrát na celou obrazovku nebo se nespustí.
controlsZobrazí standardní ovládací prvky přehrávače.Doporučeno pro uživatelskou kontrolu. Nemá přímý vliv na autoplay.
loopVideo se po skončení automaticky restartuje.Užitečné pro nahrazení GIFů, funguje s autoplay.
posterObrázek, který se zobrazí před přehráváním videa.Zlepšuje uživatelský zážitek, nemá vliv na funkčnost přehrávání.

Často kladené otázky (FAQ)

Co je to playsinline a proč je pro iOS důležité?

Atribut playsinline je specifický pro iOS a zabraňuje tomu, aby se video automaticky přepnulo do režimu celé obrazovky při spuštění. To je klíčové pro automatické přehrávání, protože Safari na iOS vyžaduje, aby se automaticky přehrávaná videa přehrávala inline. Bez něj by se video buď nespustilo, nebo by uživatele přeneslo na celou obrazovku, což by narušilo zážitek z webové stránky.

Mohu mít automaticky přehrávané video se zvukem na iOS?

Ne přímo. Pro automatické přehrávání videa na iOS musí být video ztišené (s atributem muted). Prohlížeče nechtějí automaticky přehrávat zvuk, aby nepřekvapily uživatele. Zvuk můžete povolit až po interakci uživatele, například kliknutím na tlačítko pro zrušení ztišení, které spustí JavaScript k nastavení videoElement.muted = false;.

Proč se mé video v Safari nezobrazuje?

Nejčastějšími důvody jsou nesprávný formát nebo kodek (Safari preferuje MP4/H.264), chybná cesta k souboru, nebo chybějící atributy width a height. Vždy zkontrolujte konzoli prohlížeče pro chybové zprávy, které vám mohou napovědět, co je špatně.

Jak mohu zlepšit přístupnost videí pro uživatele se zrakovým postižením?

Kromě použití aria-label a aria-pressed pro ovládací prvky zvažte poskytnutí textových přepisů nebo zvukových popisů videa. Pro uživatele se sluchovým postižením jsou nezbytné titulky. Použití standardních HTML5 značek a WAI-ARIA rolí a atributů je základem pro inkluzivní design.

Co je to prefers-reduced-motion a jak to souvisí s videem?

prefers-reduced-motion je CSS media query, která detekuje, zda uživatel nastavil ve svém operačním systému preferenci pro omezení pohybu a animací. Pro uživatele s vestibulárními poruchami může nadměrný pohyb na webu způsobovat nepohodlí. V souvislosti s videem to znamená, že pokud uživatel tuto preferenci aktivoval, měli byste zvážit vypnutí automatického přehrávání videa nebo nahrazení videa statickým obrázkem, aby se předešlo potenciálním zdravotním problémům.

Zajištění plynulého a přístupného přehrávání HTML5 videa na zařízeních s iOS může být výzvou, ale s pochopením specifických požadavků Safari a správnou implementací atributů a JavaScriptu je to plně dosažitelné. Vždy pamatujte na to, že uživatel by měl mít kontrolu nad médii, a dbejte na aspekty přístupnosti. S těmito tipy můžete transformovat svá videa z frustrujícího problému na plynulý a inkluzivní zážitek pro všechny vaše uživatele, ať už používají iPhone, iPad, nebo jakékoli jiné zařízení. HTML5 video je mocný nástroj, a když se použije správně, může výrazně obohatit vaše webové stránky a aplikace, nabízející moderní alternativu k dříve populárním animovaným GIFům.

Chceš-li si přečíst další články podobné jako HTML5 Video na iOS: Autoplay a Řešení Problémů, navštiv kategorii Technologie.

Go up