Я изучал это довольно давно, и я пытаюсь сделать то же самое, так что, надеюсь, это поможет кому-то еще. Я использовал crossbrowsertesting.com и буквально проверял это почти во всех браузерах, известных человеку. У меня есть настоящее решение, которое работает в Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+, Windows Phone 8.
Динамически меняющиеся источники
Динамическая смена видео очень трудна, и если вы хотите использовать запасной вариант Flash, вам придется удалить видео со страницы DOM / и добавить его заново, чтобы Flash обновлялся, потому что Flash не распознает динамические обновления Flash vars. , Если вы собираетесь использовать JavaScript для его динамического изменения, я бы полностью удалил все элементы <source>
и просто использовал canPlayType
, чтобы установить src
в JavaScript и break
или return
после первого поддерживаемого типа видео и не забудьте динамически обновить flash var mp4. Кроме того, некоторые браузеры не будут регистрировать, что вы изменили источник, если вы не позвоните video.load()
. Я полагаю, что проблема с .load()
, с которой вы столкнулись, может быть исправлена путем первого вызова video.pause()
. Удаление и добавление элементов видео может замедлить работу браузера, поскольку он продолжает буферизовать удаленное видео, но есть обходной путь .
Кросс-браузерная поддержка
Что касается фактической кросс-браузерной части, я также получил Видео для всех . Я уже попробовал плагин MediaelementJS Wordpress, который, как оказалось, вызвал гораздо больше проблем, чем решил. Я подозреваю, что проблемы были из-за плагина Wordpress, а не из-за библиотеки. Я пытаюсь найти что-то, что работает без JavaScript, если это возможно. До сих пор я придумал простой 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>
Важные примечания :
- Закончилось помещением ogg в качестве первого
<source>
, поскольку Mac OS Firefox прекращает попытки воспроизведения видео, если в качестве первого <source>
встречается MP4.
- Важны правильные типы MIME .ogv Файлы должны быть
video/ogg
, , а не video/ogv
- Если у вас есть HD-видео, лучший транскодер, который я нашел для файлов OGG с качеством HD, - Firefogg
- Файл
.iphone.mp4
предназначен для iPhone 4+, который будет только воспроизводить видео в формате MPEG-4 с H.264 Baseline 3 Video и AAC audio. Лучший транскодер, который я нашел для этого формата, это Handbrake, использующий предустановку iPhone & iPod Touch , который будет работать на iPhone 4+, но чтобы iPhone 3GS работал, вам нужно использовать iPod пресет с гораздо меньшим разрешением, который я добавил как video.iphone3g.mp4
.
- В будущем мы сможем использовать атрибут
media
в элементах <source>
для нацеливания на мобильные устройства медиазапросов, но сейчас старые устройства Apple и Android не поддерживают его достаточно хорошо.
Редактировать
- Я все еще использую Video For Everybody, но теперь я перешел на использование FlowPlayer, чтобы управлять резервной версией Flash, которая имеет потрясающий JavaScript API , который можно использовать для управления им.