Menu

Wideo w HTML: znacznik video, controls, autoplay i napisy

Element <video> odtwarza pliki wideo we wbudowanym odtwarzaczu przeglądarki. Poznaj kod, najważniejsze atrybuty (controls, autoplay, muted, loop, playsinline, poster, preload), formaty zapasowe z <source>, napisy z <track>, responsywny rozmiar i sterowanie odtwarzaniem w JavaScripcie.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Jak dodać wideo

Wskaż elementowi <video> plik wideo i dodaj controls, żeby czytelnik mógł go odtworzyć:

<video src="movie.mp4" controls width="640"></video>

controls pokazuje wbudowany odtwarzacz przeglądarki: odtwarzanie i pauzę, oś czasu, głośność i pełny ekran. Bez niego wideo po prostu stoi w miejscu. Ten podgląd nie może wczytywać plików wideo, więc przykłady na tej stronie zasilają element małą animacją na canvasie rysowaną przez skrypt; atrybuty działają dokładnie tak samo jak z plikiem:

Ponieważ źródłem jest strumień na żywo, a nie plik, osi czasu nie da się tu przeciągać i nie ma stałej długości. Z prawdziwym plikiem .mp4 ten sam odtwarzacz ma pełny pasek przewijania.

Atrybuty video

AtrybutCo robi
controlsPokazuje kontrolki odtwarzacza przeglądarki
autoplayZaczyna odtwarzanie, gdy tylko może (w praktyce tylko z muted)
mutedStartuje z wyłączonym dźwiękiem
loopPo zakończeniu zaczyna od początku
playsinlineNa iPhonie odtwarza na stronie zamiast przełączać na pełny ekran
poster="thumb.jpg"Obrazek widoczny przed odtworzeniem wideo
preloadnone, metadata (tylko rozmiar i długość) lub auto (przeglądarka decyduje, ile pobrać)
width, heightRozmiar w pikselach; ustawienie obu rezerwuje miejsce przed wczytaniem wideo

Autoplay, muted i loop

Przeglądarki blokują wideo, które startuje samo z dźwiękiem. Wyciszone wideo może odtworzyć się automatycznie i tak właśnie działają filmy w tle i krótkie zapętlone klipy:

Te cztery atrybuty działają w zestawie: autoplay, żeby wystartować, muted, żeby przeglądarka na to pozwoliła, loop dla klipu i playsinline, żeby iPhone nie otwierał go na pełnym ekranie. Automatycznie odtwarzane wideo z dźwiękiem jest nie tylko blokowane, ale też przeszkadza użytkownikom czytników ekranu, których mowa ginie w hałasie. Jeśli klip gra dłużej niż pięć sekund, daj możliwość zatrzymania go.

Obrazek poster i preload

poster pokazuje obrazek przed odtworzeniem wideo, jak miniaturę. Tutaj wideo nie ma żadnego źródła, więc poster to wszystko, co widać:

Z preload="none" przeglądarka nic nie pobiera, dopóki czytelnik nie naciśnie odtwarzania, a poster sprawia, że miejsce nie wygląda na puste. Użyj preload="metadata", gdy czas trwania ma być widoczny przed odtworzeniem. Bez postera większość przeglądarek pokazuje pierwszą klatkę, gdy już ją wczyta.

Formaty i pliki zapasowe z source

Zamiast src możesz podać kilka plików w elementach <source>. Przeglądarka odtwarza pierwszy, który obsługuje:

<video controls width="640" poster="thumb.jpg">
  <source src="movie.webm" type="video/webm">
  <source src="movie.mp4" type="video/mp4">
  <track kind="captions" src="captions.vtt" srclang="en" label="English">
  <p>Your browser cannot play this video. <a href="movie.mp4">Download it</a>.</p>
</video>

MP4 z obrazem H.264 odtwarza się w każdej obecnej przeglądarce, więc to bezpieczny wybór, gdy masz tylko jeden plik. Atrybut type pozwala przeglądarce pominąć formaty, których nie umie odtworzyć, bez ich pobierania. Tekst na końcu pojawia się tylko w przeglądarkach, które w ogóle nie obsługują <video>.

Napisy z track

<track kind="captions"> wczytuje plik WebVTT, czyli zwykły plik tekstowy z wierszami opisanymi czasem. Przeglądarka dodaje do kontrolek przycisk napisów i rysuje tekst na wideo:

WEBVTT

00:00:00.000 --> 00:00:03.000
Welcome to the course.

00:00:03.000 --> 00:00:06.500
Today we build our first web page.

Napisy pomagają osobom głuchym i niedosłyszącym, osobom oglądającym bez dźwięku i każdemu, kto śledzi wideo w drugim języku. Dodaj default do ścieżki, żeby pokazać ją bez klikania. Plik z napisami z innej domeny wymaga nagłówków CORS i atrybutu crossorigin na elemencie video.

Stylowanie i sterowanie w JavaScripcie

Wideo to element zastępowany, jak obrazek: width: 100% z height: auto czyni je responsywnym, a object-fit decyduje, jak wypełnia pole o innym kształcie. JavaScript ma do dyspozycji play(), pause(), currentTime, volume oraz zdarzenia takie jak play, pause i ended:

play() zwraca obietnicę (promise), która zostaje odrzucona, gdy przeglądarka zablokuje odtwarzanie (na przykład autoplay bez wyciszenia), więc kod produkcyjny powinien ją obsłużyć przez catch. Własne kontrolki są opcjonalne; wbudowane controls obsługują klawiaturę i są przetłumaczone, a własne przyciski muszą to odtworzyć. Filmy z YouTube lub Vimeo osadzasz zamiast tego przez ich odtwarzacz w iframe.

Częste błędy

  • Autoplay bez muted. Przeglądarka go zablokuje. Dodaj muted i playsinline.
  • Brak controls. Jeśli nie zbudujesz własnych, czytelnik nie ma jak uruchomić wideo.
  • Brak width i height. Strona skacze, gdy wideo się wczytuje. Ustaw oba, potem skaluj w CSS.
  • Ogromne pliki. Kompresuj wideo pod sieć i używaj preload="none" lub "metadata" dla filmów niżej na stronie.
  • Brak napisów w wideo z mową. Dodaj <track kind="captions">.

Najczęściej zadawane pytania

Jak dodać wideo w HTML?

Użyj <video src="movie.mp4" controls width="640"></video>. Atrybut controls pokazuje przycisk odtwarzania, oś czasu i głośność przeglądarki. Bez niego wideo pokazuje pierwszą klatkę (lub poster) i użytkownik nie może go uruchomić.

Dlaczego autoplay nie działa w moim wideo?

Przeglądarki blokują automatyczne odtwarzanie z dźwiękiem. Dodaj muted obok autoplay oraz playsinline, żeby iPhone odtwarzał wideo na stronie, a nie na pełnym ekranie: <video autoplay muted loop playsinline>.

Jakiego formatu wideo używać w sieci?

MP4 z obrazem H.264 odtwarza się w każdej obecnej przeglądarce, więc to bezpieczny domyślny wybór. Możesz najpierw podać mniejszy plik WebM w <source> i pozwolić przeglądarce wybrać pierwszy obsługiwany format.

Jak dodać miniaturę do wideo?

Użyj atrybutu poster z adresem URL obrazka: <video poster="thumb.jpg" controls>. Obrazek jest widoczny, dopóki wideo nie zacznie się odtwarzać.

Jak dodać napisy do wideo w HTML?

Dodaj <track kind="captions" src="captions.vtt" srclang="pl" label="Polski"> wewnątrz elementu video. Plik jest w formacie WebVTT, a przeglądarka pokazuje w kontrolkach przycisk napisów.

Jak zrobić responsywne wideo?

Ustaw w CSS width: 100% i height: auto (albo max-width: 100%). Wideo skaluje się razem z kontenerem i zachowuje proporcje.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ