Ciekawy przypadek tagu video

Ciekawy przypadek tagu video

Dawno, dawno temu – kiedy jeszcze nie było neostrady… żeby odpalić video w na stronie, trzeba było mieć flash i kupę dodatkowych skryptów. Po tym jak pojawił się HTML5 sprawa się lekko uprościła i wystarczył tag VIDEO i mądre przeglądarki w teorii zaczęły odtwarzać video bez flasha.

Teoretycznie ten kod rozwiązuje nam sprawę. Jeśli przeglądarka obsługuje webm (czyli Chrome, Opera i podobne) to gramy zoptymalizowany format webm, wszystkie inne powinny poradzić sobie z mp4

<video width="960" height="720" controls id="video">
  <source src="video.mp4" id="mp4" type="video/mp4">
  <source src="video.webm" id="webm" type="video/webm">
 Your browser does not support the video tag.
</video>

Niestety ku naszemu zaskoczeniu w inspektorze pokaże nam się, że przeglądarka na silniku Chromium i tak odpali .mp4 pomimo tego, że webm jest “lepszym” dla niej formatem.

Dlaczego? Bo mp4 jest podane jako pierwsze, więc najpierw zostanie rozpoznane jako “grywalny” format i odtworzone. Tyle w kwestii optymalizacji. Poprawny kod poniżej:

<video width="960" height="720" controls id="video">
  <source src="video.webm" id="webm" type="video/webm">
  <source src="video.mp4" id="mp4" type="video/mp4">
 
  Your browser does not support the video tag.
</video>

Druga ciekawa sprawa pojawia się, jak chcemy manipulować zawartością tagów z poziomu JavaScript:

  var video = document.getElementById('video');   
 
  // replace value in src tag
  var webmSrc = document.getElementById('webm');
  webmSrc.setAttribute('src','video.webm');  

  // load and play video
  video.load();
  video.play();
  

Rozwiązanie nie zadziała bez magicznego video.load() - pomimo tego, że video.play() odtworzy video w pierwszej kolejności.

  • Warto sprawdzić w inspektorze, czy nasz kod faktycznie robi to co powinien (odtwarza “optymalny format”)
  • Przeglądarki są głupie i wygodne – to po naszej stronie powinna leżeć kwestia optymalizacji rozwiązania.