Я пытаюсь создать видеоплеер, который работает везде. пока я буду с:
<video>
<source src="video.mp4"></source>
<source src="video.ogv"></source>
<object data="flowplayer.swf" type="application/x-shockwave-flash">
<param name="movie" value="flowplayer.swf" />
<param name="flashvars" value='config={"clip":"video.mp4"}' />
</object>
</video>
(как видно на нескольких сайтах, например, видео для всех ), пока все хорошо.
но теперь я также хочу какой-нибудь плейлист / меню вместе с видеоплеером, из которого я могу выбирать другие видео. они должны быть сразу открыты в моем плеере. поэтому мне придется «динамически менять источник видео» (как видно на dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - раздел «Давайте посмотрим на другой фильм» ") с помощью JavaScript. давайте пока что забудем о flashplayer (и, следовательно, IE), я постараюсь разобраться с этим позже.
поэтому мой JS для изменения <source>
тегов должен выглядеть примерно так:
<script>
function loadAnotherVideo() {
var video = document.getElementsByTagName('video')[0];
var sources = video.getElementsByTagName('source');
sources[0].src = 'video2.mp4';
sources[1].src = 'video2.ogv';
video.load();
}
</script>
Проблема в том, что это не работает во всех браузерах. а именно, firefox = O есть хорошая страница, где вы можете увидеть проблему, с которой я столкнулся: http://www.w3.org/2010/05/video/mediaevents.html
как только я запускаю метод load () (заметьте, в Firefox), проигрыватель видео умирает.
Теперь я обнаружил, что когда я не использую несколько <source>
тегов, а вместо этого только один атрибут src внутри <video>
тега, все это работает в Firefox.
поэтому я планирую просто использовать этот атрибут src и определить соответствующий файл с помощью функции canPlayType () .
я делаю что-то неправильно или усложняю вещи ??
источник
<source>
тегами. тогда я полагаю, что было бы легчеОтветы:
Я ненавидел все эти ответы, потому что они были слишком короткими или полагались на другие рамки.
Вот "один" ванильный JS способ сделать это, работая в Chrome, пожалуйста, проверьте в других браузерах:
http://jsfiddle.net/mattdlockyer/5eCEu/2/
HTML:
JS:
источник
Модернизр работал для меня как оберег.
То, что я сделал, это то, что я не использовал
<source>
. Каким-то образом это все испортило, так как видео работало только при первом вызове load (). Вместо этого я использовал атрибут источника внутри тега video -><video src="blabla.webm" />
и использовал Modernizr, чтобы определить, какой формат поддерживает браузер.Надеюсь, это поможет вам :)
Если вы не хотите использовать Modernizr , вы всегда можете использовать CanPlayType () .
источник
Ваш оригинальный план звучит хорошо для меня. Вы, вероятно, найдете больше особенностей браузера, связанных с динамическим управлением
<source>
элементами, как указано здесь в примечании к спецификации W3:http://dev.w3.org/html5/spec/Overview.html#the-source-element
источник
Я решил это с помощью этого простого метода
источник
Вместо того, чтобы заставить тот же самый видео плеер загружать новые файлы, почему бы не стереть весь
<video>
элемент и воссоздать его. Большинство браузеров автоматически загрузят его, если src верны.Пример (с использованием Prototype ):
источник
Просто поставь div и обнови контент ...
источник
Согласно спецификации
Так что то, что вы пытаетесь сделать, явно не должно работать.
источник
Яур: Хотя то, что вы скопировали и вставили, является хорошим советом, это не означает, что невозможно элегантно изменить исходный элемент видеоэлемента HTML5, даже в IE9 (или IE8 в этом отношении). (Это решение НЕ включает в себя замена всего видео элемента, так как это плохая практика кодирования).
Полное решение для изменения / переключения видео в тегах HTML5 с помощью javascript можно найти здесь и протестировать во всех браузерах HTML5 (Firefox, Chrome, Safari, IE9 и т. Д.).
Если это поможет, или если у вас возникли проблемы, пожалуйста, дайте мне знать.
источник
Я пришел с этим, чтобы динамически менять источник видео. Событие canplay иногда не запускается в Firefox, поэтому я добавил «Загруженные метаданные». Также я приостанавливаю предыдущее видео, если оно есть ...
источник
canplay
ниcanplaythrough
иlodedmetadata
должно быть добавлено (и удалено позже) к обработчикам видео :-(Это мое решение:
источник
Использование
<source />
тегов оказалось трудным для меня, в частности, в Chrome 14.0.835.202, хотя в FireFox он работал нормально. (Это может быть моим недостатком знаний, но я подумал, что альтернативное решение может быть полезным в любом случае.) Итак, я закончил тем, что просто использовал<video />
тег и установил атрибут src прямо на самом видео теге. ЭтаcanPlayVideo('<mime type>')
функция использовалась для определения, может ли конкретный браузер воспроизводить входное видео. Следующие работы в FireFox и Chrome.Кстати, и FireFox, и Chrome воспроизводят формат «ogg», хотя Chrome рекомендует «webm». Сначала я поставил проверку поддержки браузером «ogg» только потому, что в других публикациях упоминалось, что FireFox сначала предпочитает источник ogg (т.е.
<source src="..." type="video/ogg"/>
). Но я не проверял (и сильно сомневаюсь), имеет ли значение порядок в коде при установке «src» для тега video.HTML
JavaScript
источник
Я исследовал это довольно давно, и я пытаюсь сделать то же самое, так что, надеюсь, это поможет кому-то еще. Я использовал 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-переменных. Если вы собираетесь использовать JavaScript для динамического изменения, я бы полностью удалил все
<source>
элементы и просто использовалcanPlayType
для установкиsrc
в JavaScript иbreak
или . Удаление и добавление элементов видео может замедлить работу браузера, поскольку он продолжает буферизовать удаленное видео, но есть обходной путь .return
после первого поддерживаемого типа видео, и не забудьте динамически обновить flash var mp4. Кроме того, некоторые браузеры не зарегистрируют, что вы изменили источник, если вы не позвонитеvideo.load()
. Я полагаю, что проблема, с которой.load()
вы столкнулись, может быть устранена путемvideo.pause()
Кросс-браузерная поддержка
Что касается фактической кросс-браузерной части, я также пришел на Video For Everybody . Я уже попробовал плагин MediaelementJS Wordpress, который, как оказалось, вызвал гораздо больше проблем, чем решил. Я подозреваю, что проблемы были из-за плагина Wordpress, а не из-за библиотеки. Я пытаюсь найти что-то, что работает без JavaScript, если это возможно. До сих пор я придумал простой HTML:
Важные замечания :
<source>
потому что Mac OS Firefox прекращает попытки воспроизвести видео, если он встречает MP4 в качестве первого<source>
.video/ogg
, а неvideo/ogv
.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 не поддерживают его достаточно хорошо.Редактировать :
источник
У меня есть похожее веб-приложение, и я вообще не сталкиваюсь с подобной проблемой. Что я делаю, это что-то вроде этого:
затем, когда я хочу изменить источники, у меня есть функция, которая делает что-то вроде этого:
Я делаю это так, чтобы пользователь мог пробираться по плейлисту, но вы могли проверить userAgent и затем загрузить соответствующий файл таким образом. Я попытался использовать несколько тегов источника, как предлагали все в Интернете, но я нашел, что это намного чище и намного надежнее для манипулирования атрибутом src одного тега источника. Приведенный выше код был написан из памяти, поэтому я мог бы замять некоторые подробности, но общая идея заключается в динамическом изменении атрибута src исходного тега с использованием javascript, когда это уместно.
источник
Попробуйте переместить источник OGG наверх. Я заметил, что Firefox иногда смущается и останавливает игрока, когда тот, кого он хочет играть, OGG, не первый.
Стоит попробовать.
источник
Еще один способ сделать это в Jquery.
HTML
Jquery
источник
Использование JavaScript и jQuery:
источник