加载时在特定位置启动HTML5视频?


90

我需要HTML5视频才能从某个位置开始。假设从50秒开始。

我试过了,但是没有按预期工作。我做错了什么吗?

这是代码:

   <video id="vid1" width="640" height="360">
       <source src="file.webm" type="video/webm" /> 
       Your browser does not support the video tag.
   </video>
   <script>
       document.getElementById('vid1').currentTime = 50;
   </script> 

页面加载时,它只是从头开始播放。但是,如果我在播放过程中(如一段时间后)称呼它,则效果很好。我有什么想念的吗?


2
什么浏览器?您是否尝试过将通话延迟几毫秒?可能需要更长的时间才能完全加载视频元素
Ortiga

Answers:


129

您必须等到浏览器知道视频的时长,然后才能搜索特定的时间。因此,我认为您想等待“ loadedmetadata”事件,如下所示:

document.getElementById('vid1').addEventListener('loadedmetadata', function() {
  this.currentTime = 50;
}, false);

2
这在Safari中不起作用。我也尝试了loaddatadata事件。有任何想法吗?
Simon Perepelitsa 2012年

没关系。这是WEBM格式的问题。MP4正常工作。
Simon Perepelitsa 2012年

使用“ durationchange”事件并在更改播放视频之前始终呼叫暂停
Jason White

53

您可以直接与Media Fragments URI链接,只需将文件名更改为file.webm#t = 50

这是一个例子

这很酷,您可以做各种事情。但是我不知道浏览器支持的当前状态。


浏览器支持很好。我认为所有支持HTML5的浏览器也至少支持基本的时态媒体片段。
Jim S.

@michaelhanon,为IE编写一个polyfill来实现它很容易。检测浏览器,如果不支持,请分解URL,找到查询参数,使用Javascript更改视频的时间...如果有机会,我可能会这样做
gdgr 2016年

是否有设置结束时间的片段?
DGoiko

它甚至允许在点后几分之一秒:#t=17.79^ _ ^
Klesun

50

无需使用JAVASCRIPT

只需添加#t=[(start_time), (end_time)]到媒体URL的末尾即可。唯一的挫折(如果您想那样看)是需要知道视频多长时间来表示结束时间。 例:

<video>
    <source src="splash.mp4#t=10,20" type="video/mp4">
</video>

注意: IE不支持


第二个数字似乎并没有结束要开始加载的视频数量。有什么想法吗?
Martian2049年

这并不是很好。浏览器仍会根据需要进行预加载,也许只是在您决定的位置开始和结束,但预加载并没有停止……
Martian2049

28

在html5中使用视频标签时,请调整视频的开始和结束时间;

http://www.yoursite.com/yourfolder/yourfile.mp4#t=5,15

其中逗号左边是以秒为单位的开始时间,逗号右边是以秒为单位的结束时间。删除逗号和结束时间仅影响开始时间。


第二个数字似乎并没有结束要开始加载的视频数量。有什么想法吗?
Martian2049年

使用浏览器时,最好查看W3C规范和caniuse.com,以了解该功能的支持范围。(最好的StackOverflow答案链接到规范。)在这种情况下,它们被称为“媒体片段”,规范就在这里。w3.org/TR/media-frags
Michael Scheper

3

在用于HLS源的Safari Mac上,我需要使用loadeddata事件而不是元数据事件。


我认为loadmetadata应该是正确的事件,但是除非我听数据加载,否则我也将获得seekable.length 0(仅在OSX的Safari中)。谢谢
Statuswoe 2015年

1
为什么这被否决?它可能与OP所提供的示例没有直接关系,但实际上是准确的,并且与问题的一般主题相关。
JayPea 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.