
Technologie, Wiedza i Proces, Web Development
Jak włączyć automatyczne odtwarzanie wideo w trybie niskiego zużycia energii w iOS i macOS
Autoplay w Safari potrafi się wyłączyć w Low Power Mode. Poniżej sprawdzone podejście: playsinline, obsługa błędu play() i fallback.
Co naprawdę blokuje autoplay w Safari
Safari często pozwala na automatyczne odtwarzanie wyciszonych filmów, ale na iOS użytkownik lub system mogą to zablokować. W praktyce nie da się zagwarantować autoplay na iPhonie. Trzeba więc sprawdzać, czy wideo faktycznie ruszyło, a jeśli nie — pokazać przycisk „odtwórz” albo lekki, animowany podgląd. Dzięki temu doświadczenie zostaje spójne, nawet w trybie oszczędzania energii.
Sprawdzone podejście: progresywne ulepszanie
Najpierw wdroż standardowy <video> z muted, playsinline, autoplay i lekkim preloadem. Potem spróbuj uruchomić odtwarzanie przez video.play(). Jeśli przeglądarka odrzuci obietnicę (np. w trybie niskiego zużycia energii), płynnie przełącz się na alternatywę — animowany obraz (GIF/WebP/APNG) albo wyraźny przycisk „Odtwórz”. To szanuje ustawienia użytkownika i nie rozwala projektu.
<div class="hero-video">
<video id="heroVideo"
preload="metadata"
autoplay
muted
playsinline
loop
poster="https://site.com/video-poster.jpg"
class="fullscreen-video">
<source src="https://site.com/video.mp4" type="video/mp4">
<!-- Optional: add WebM for broader support -->
<source src="https://site.com/video.webm" type="video/webm">
</video>
<!-- Fallback shown if autoplay is blocked (e.g., iOS Low Power Mode) -->
<img id="fallbackGif"
src="https://site.com/video-fallback.gif"
alt="Animated preview"
style="display:none" />
<button id="playButton"
class="button button--primary"
aria-controls="heroVideo"
aria-label="Play video"
hidden>Play</button>
</div>
<!-- Styles (example) -->
<style>
.fullscreen-video { width: 100%; height: auto; }
.button--primary { position:absolute; left: 1rem; bottom: 1rem; }
@media (prefers-reduced-motion: reduce) {
.hero-video video { display: none; }
#fallbackGif { display: block !important; }
}
</style>
<!-- Script -->
<script>
(function () {
var v = document.getElementById('heroVideo');
var fallback = document.getElementById('fallbackGif');
var btn = document.getElementById('playButton');
function showFallback() {
if (v) v.style.display = 'none';
if (fallback) fallback.style.display = 'block';
if (btn) btn.hidden = false;
}
function tryAutoplay() {
if (!v || !v.play) return showFallback();
v.muted = true; // important for mobile autoplay
v.playsInline = true;
var p = v.play();
if (p && typeof p.then === 'function') {
p.then(function () {
// autoplay succeeded; keep video visible
}).catch(function () {
// autoplay blocked (e.g., iOS Low Power Mode)
showFallback();
});
} else {
// Older browsers
showFallback();
}
}
document.addEventListener('DOMContentLoaded', tryAutoplay);
if (btn) {
btn.addEventListener('click', function () {
if (fallback) fallback.style.display = 'none';
if (v) {
v.style.display = '';
v.play().catch(function(){ /* user can tap again if needed */ });
}
btn.hidden = true;
});
}
})();
</script>
Dlaczego to działa (i czego unikać)
- Progresywne ulepszanie: najpierw próbujemy autoplay, a gdy się nie uda — pokazujemy fallback lub przycisk „Odtwórz”. Użytkownik zawsze widzi ruch albo ma jasny wybór.
- Zgodność ze standardami:
muted,playsinline,autoplayi lekkipreloadto minimum, które działa możliwie szeroko. - Unikaj trików:
<img>nie odtwarza MP4. Jeśli potrzebujesz ruchu, użyj animowanego GIF/WebP/APNG.
Opcjonalnie: osadzone odtwarzacze (YouTube/Vimeo)
Jeśli korzystasz z iFrame’ów, możesz żądać wyciszonego autoplay, ale system nadal może to zablokować. Dlatego zawsze miej pod ręką nakładkę z przyciskiem „Play” lub obraz podglądu.
<!-- Przykład Vimeo -->
<iframe
src="https://player.vimeo.com/video/12345?background=1&autoplay=1&muted=1&loop=1&playsinline=1"
allow="autoplay; fullscreen; picture-in-picture"
loading="lazy"
style="width:100%;aspect-ratio:16/9;border:0"></iframe>
Co zyskujesz
Dzięki temu podejściu utrzymujesz spójne doświadczenie na iOS i desktopie. Zachowujesz zamysł projektowy, a jednocześnie grasz zgodnie z zasadami przeglądarek i ograniczeniami oszczędzania energii. Efekt? Zaangażowanie nawet wtedy, gdy autoplay jest zablokowane.
Podsumowanie
Autoplay na urządzeniach Apple traktuj jako „miły bonus”, a nie wymóg. Użyj wyciszonego wideo, sprawdzaj wynik play() i w razie blokady pokaż animowany podgląd lub przycisk. To łączy wydajność, dostępność i spójność komunikacji.
Jeśli chcesz wesprzeć moją pracę
Jeśli chcesz wesprzeć nowe projekty lub po prostu podziękować, będzie mi miło. Wystarczy kliknąć PayPal.me — resztą zajmie się bezpiecznie system PayPal. Dzięki!