控制 HTML5 视频中的播放开始位置和持续时间

Posted

技术标签:

【中文标题】控制 HTML5 视频中的播放开始位置和持续时间【英文标题】:Control start position and duration of play in HTML5 video 【发布时间】:2012-06-28 02:07:34 【问题描述】:

我们想要使用 html5 控制一个视频(13 分钟长)。我们希望能够让我们的用户控制和选择他们想要播放的视频部分。优选地,该控制将通过2个输入字段。他们将在第一个框中输入开始时间(以秒为单位),并在第二个框中输入播放持续时间(以秒为单位)。例如,他们可能希望在 10 秒后开始播放视频并播放 15 秒。有什么关于 javascript 的建议或指导需要这样做吗?

注意:我发现了以下内容:

Start HTML5 video at a particular position when loading?

但它只解决从特定时间开始的问题,而不是在指定的时间长度内播放视频。

【问题讨论】:

【参考方案1】:

你可以使用 timeupdate 事件监听器。

loadedmetadata 事件之后将开始时间和持续时间保存到变量中。

// Set video element to variable
var video = document.getElementById('player1');

var videoStartTime = 0;
var durationTime = 0;

video.addEventListener('loadedmetadata', function() 
  videoStartTime = 2;
  durationTime = 4;
  this.currentTime = videoStartTime;
, false);

如果当前时间大于开始时间加上持续时间,则暂停视频。

video.addEventListener('timeupdate', function() 
  if(this.currentTime > videoStartTime + durationTime)
    this.pause();
  
);

【讨论】:

好的,我一直在努力使用 timeupdate 事件侦听器,但我还没有完全让它工作。通过阅读,我发现我需要使用加载的元数据事件侦听器来使 videoStartTime 工作。 document.getElementById('player1').addEventListener('loadedmetadata', function() var videoStartTime = 2; var durationTime = 4; this.currentTime = videoStartTime; , false); document.getElementById('player1').addEventListener('timeupdate', function() if (this.currentTime > videoStartTime + durationTime) this.pause(); , false); 抱歉上面的内联代码。我正在尝试修复它但没有成功。抱歉我是菜鸟。 @chud 你不能在 cmets 中换行。我已经更新了我的答案以包含您的更改。请检查是否正确。我确实在 loadedmetadata 事件之外设置了 videoStartTime 和 durationTime 变量,因为我认为它们需要在 timeupdate 函数的范围内才能使用它们。 哦,好的,我现在明白了。代码现在可以按照您在上面编写的方式工作。我的下一步是修改代码,用户可以使用表单中的两个框设置“durationTime”和“videoStartTime”,然后单击它们将被应用。我知道var videoStartTime = 0var durationTime = 0 会阻止这种情况发生。在编写了一个 html 表单后,我尝试了以下 Javascript,但没有成功:function settheVariables(form) var videoStartTime = form.time.value; video.currentTime = videoStartTime; var durationTime = form.time2.value; @chud 你可以尝试从settheVariables() 中删除var 吗?它需要覆盖全局变量。【参考方案2】:

如果您可以在设置视频网址时设置视频的开始时间和结束时间。 您可以在 url 本身中指定开始和结束时间,例如

src="future technology_n.mp4#t=20,50"

将从第 20 秒播放到第 50 秒。

【讨论】:

【参考方案3】:

使用 Paul Sham 提出的 javascript 解决方案有很多细微差别。更简单的做法是使用Media Fragment URI Spec。它将允许您指定要播放的较大音频或视频文件的一小部分。要使用它,只需更改您正在流式传输的文件的源并添加#t=start,end,其中start 是以秒为单位的开始时间,end 是以秒为单位的结束时间。

例如:

var start = document.getElementById('startInput').value;
var end = document.getElementById('endInput').value;

document.getElementById('videoPlayer').src = 'http://www.example.com/example.ogv#t='+start+','+end;

这将更新播放器以在指定时间开始源视频并在指定时间结束。浏览器对媒体片段的支持也很好,因此它应该可以在任何支持 HTML5 的浏览器中工作。

【讨论】:

@michaelhanon 有许多 polyfills 更不用说 IE 11 支持它们了。 @MichaelHanon 什么是 IE? :p【参考方案4】:

扩展到 michael hanon cmets: IE 返回 buffered.length = 0 和 seekable.length = 0。视频不播放。所以解决方案:

src="video.mp4#t=10,30"

在 IE 中不起作用。如果您想支持 IE,唯一的方法是使用 javascript 从 0 秒开始搜索视频。

【讨论】:

以上是关于控制 HTML5 视频中的播放开始位置和持续时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 html5 视频播放器中获取视频的持续时间..?

使用 html5 视频标签从特定位置开始播放视频

不播放视频的 HTML5 视频时长

在 HTML5 Video 中,如何播放长视频中的小片段?

仅在视频播放时进行视频控制 (html5)

html5 播放事件与视频标签中的播放事件