【发布时间】:2011-07-11 05:54:07
【问题描述】:
我正在尝试构建一个可以在任何地方使用的视频播放器。到目前为止,我会选择:
<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>
(如在多个网站上看到的那样,例如 video for everybody) 到目前为止,一切顺利。
但现在我还想要某种播放列表/菜单以及视频播放器,我可以从中选择其他视频。那些应该立即在我的播放器中打开。所以我将不得不用Javascript“动态地改变视频的来源”(如dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - “让我们看另一部电影”部分)。让我们暂时忘记 Flash 播放器(以及 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 中有一个不错的页面,您可以在其中观察我遇到的问题:http://www.w3.org/2010/05/video/mediaevents.html
只要我触发 load() 方法(在 Firefox 中,请注意),视频播放器就会死掉。
现在我发现,当我不使用多个 <source> 标记,而是在 <video> 标记中只使用一个 src 属性时,整个事情确实在 Firefox 中工作.
所以我的计划是只使用 src 属性并使用 canPlayType() 函数确定适当的文件。
我做错了什么还是让事情复杂化了?
【问题讨论】:
-
这对我来说听起来不错。简化标记有多“复杂”?
-
问题是我发现自己遇到了很多 javascript 和区分情况。如果我错过了一些东西,比如有一种方法可以让它在带有多个
<source>标签的 Firefox 中工作。那我想这会更容易 -
你有想过ie8上的flash部分吗?
-
@Neeraj 最终解决方案涉及插件video.js,它使用Flash 播放器作为IE8 等的后备。不过今天可能有更好的插件。使用该插件也无助于解决有关 load() 方法的 firefox 问题,这是本文的最初动机。今天,这个问题似乎早已得到解决。
标签: javascript html video load