Я досліджував це досить довгий час, і намагаюся зробити те саме, тому, сподіваюся, це допоможе комусь іншому. Я використовую 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()
. Видалення та додавання відео елементів може уповільнити веб-переглядач, оскільки він продовжує буферизувати видалене відео, але існує спосіб вирішення .
Підтримка крос-браузера
Що стосується фактичної частини перехресного веб-переглядача, я також завітав на Video For Everybody . Я вже спробував плагін 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 припиняє спробувати відтворити відео, якщо він зіштовхується з MP4 як перший <source>
.
- Правильні типи MIME важливі .ogv файли повинні бути
video/ogg
, не video/ogv
- Якщо у вас є HD відео, найкращим транскодером, який я знайшов для файлів OGG якості HD, є Firefogg
.iphone.mp4
Файл для iPhone 4+ , який буде тільки відтворювати відео, які MPEG-4 з H.264 Baseline 3 відео і AAC аудіо. Найкращим транскодером, який я знайшов для цього формату, є Handbrake, використовуючи попередньо встановлений iPhone & iPod Touch, буде працювати на iPhone 4+, але для роботи iPhone 3GS потрібно використовувати попередньо встановлений iPod, який має значно нижчу роздільну здатність, яку я додав video.iphone3g.mp4
.
- В майбутньому ми зможемо використовувати
media
атрибут <source>
елементів для націлювання на мобільні пристрої з медіа-запитами, але зараз старі пристрої Apple і Android не підтримують його досить добре.
Редагувати :
- Я все ще використовую Video For Everybody, але тепер я перейшов на використання FlowPlayer, щоб керувати резервним запасом Flash, який має приголомшливий JavaScript API, який можна використовувати для управління ним.