Badam to od dłuższego czasu i próbuję zrobić to samo, więc mam nadzieję, że pomoże to komuś innemu. Używałem crossbrowsertesting.com i testowałem to dosłownie w prawie każdej przeglądarce znanej człowiekowi. Rozwiązanie, które obecnie posiadam, działa w przeglądarce Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+, Windows Phone 8.
Dynamicznie zmieniające się źródła
Dynamiczna zmiana wideo jest bardzo trudna, a jeśli chcesz zastosować rezerwę Flash, musisz usunąć wideo z DOM / strony i dodać je ponownie, aby Flash zaktualizował się, ponieważ Flash nie rozpozna dynamicznych aktualizacji zmiennych Flash. Jeśli zamierzasz używać JavaScript do dynamicznej zmiany, całkowicie usunąłbym wszystkie <source>
elementy i po prostu użyłem canPlayType
do ustawienia src
w JavaScript i break
lub return
po pierwszym obsługiwanym typie wideo i nie zapomnij dynamicznie aktualizować flasha var mp4. Ponadto niektóre przeglądarki nie zarejestrują zmiany źródła, dopóki nie zadzwonisz video.load()
. Uważam, że problem z .load()
Tobą można rozwiązać, dzwoniąc po raz pierwszyvideo.pause()
. Usunięcie i dodanie elementów wideo może spowolnić przeglądarkę, ponieważ nadal buforuje usunięte wideo, ale istnieje obejście .
Obsługa wielu przeglądarek
Jeśli chodzi o faktyczną część dla różnych przeglądarek, dotarłem również do Video For Everybody . Wypróbowałem już wtyczkę MediaelementJS Wordpress, która, jak się okazało, powodowała znacznie więcej problemów niż rozwiązała. Podejrzewam, że problemy były spowodowane wtyczką Wordpress, a nie biblioteką. Próbuję znaleźć coś, co działa bez JavaScript, jeśli to możliwe. Do tej pory wymyśliłem ten zwykły HTML:
<video width="300" height="150" controls="controls" poster="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" class="responsive">
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv" type="video/ogg" />
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4" />
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm" type="video/webm" />
<source src="http://alex-watson.net/wp-content/uploads/2014/07/big_buck_bunny.iphone.mp4" type="video/mp4" />
<source src="http://alex-watson.net/wp-content/uploads/2014/07/big_buck_bunny.iphone3g.mp4" type="video/mp4" />
<object type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" width="561" height="297">
<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
<param name="flashVars" value="config={'playlist':['http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg',{'url':'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4','autoPlay':false}]}" />
<img alt="No Video" src="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" width="561" height="297" title="No video playback capabilities, please download the video below" />
</object>
<strong>Download video:</strong> <a href="video.mp4">MP4 format</a> | <a href="video.ogv">Ogg format</a> | <a href="video.webm">WebM format</a>
</video>
Ważne uwagi :
- Skończyło się na umieszczeniu ogg jako pierwszego,
<source>
ponieważ Mac OS Firefox kończy próbę odtworzenia wideo, jeśli napotka MP4 jako pierwszy <source>
.
- Prawidłowe typy MIME są ważne. Pliki .ogv powinny być
video/ogg
, a nie video/ogv
- Jeśli masz wideo HD, najlepszym transkoderem, jaki znalazłem dla plików OGG w jakości HD, jest Firefogg
.iphone.mp4
Plik jest dla iPhone 4+ który będzie tylko odtwarzać filmy, które są MPEG-4 H.264 Baseline 3 z wideo i dźwiękiem AAC. Najlepszym transkoderem, jaki znalazłem dla tego formatu, jest hamulec ręczny, użycie ustawień wstępnych iPhone'a i iPoda Touch będzie działać na iPhonie 4+, ale aby iPhone 3GS działał, musisz użyć ustawienia wstępnego iPoda, które ma znacznie niższą rozdzielczość, które dodałem jako video.iphone3g.mp4
.
- W przyszłości będziemy mogli używać
media
atrybutu w <source>
elementach, aby kierować reklamy na urządzenia mobilne z zapytaniami o media, ale obecnie starsze urządzenia Apple i Android nie obsługują go wystarczająco dobrze.
Edycja :
- Nadal używam Video For Everybody, ale teraz przeszedłem na używanie FlowPlayera, aby kontrolować rezerwę Flash, która ma niesamowite API JavaScript, które może być używane do kontrolowania tego.