Я пытаюсь создать видеоплеер, который работает повсюду. до сих пор я собираюсь:
<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().
Я делаю это неправильно или как-то усложнять вещи