繁体   English   中英

改变HTML5视频元素源后不久寻求的问题

[英]Issues with seeking shortly after changing source of HTML5 video element

我正在尝试使用HTML5来模拟更强大的多媒体播放器,该播放器在后台加载广告并根据需要在视频和广告之间进行切换。

我遇到的第一个挑战是大多数移动设备不允许您预加载视频,这意味着无法在后台加载广告的概念。 相反,我采用了一种不那么优雅的方法:拥有一个<video>标签,并在投放广告时更改其src属性。 这样做的好处是你可以使用现有的预加载和自动播放权限,但缺点是每次视频元素改变都会产生令人讨厌的缓冲。 但是,我们的客户可以接受这一点。

所以理想的行为是:

  1. 内容播放1分钟
  2. 广告播放1分钟
  3. 内容从2分钟开始恢复

我遇到的第二个挑战是让内容在正确的位置恢复。 当您更改src属性时,视频将从时间0开始播放。因此,我不得不使用另一个丑陋的解决方案:等待视频加载( canPlayThrough事件)然后执行搜索到所需的时间。 这实际上导致它在从广告切换回内容时缓冲两次 - 但是不使用本机应用程序是可接受的成本。

为了弄清楚我们应该寻找的确切位置,我在后台运行了一个“虚拟内容播放器”。 基本上是一个变量,用于存储当前时间并在<video>元素抛出updateTime事件时进行更新。 随着广告的进展,虚拟内容以完全相同的速率前进。 当需要切换回来时,我们已经跳过了一分钟的内容。

我遇到的挑战是, 有时它会寻找一个随机的位置。 我完全不知道为什么。 例如,这是我在7:39(459秒)播放广告的不同搜索事件的控制台日志,该广告应该在8:09(489秒)结束:

@@ seeking from: 30.06833267211914, to: 0
@@ seeked to: 0
Content currentTime: 0
Content currentTime: 489.0016784667969
@@ seeking from: 489.0016784667969, to: 489.0016784667969
Content currentTime: 489.0016784667969
@@ seeking from: 489.0016784667969, to: 489.0016784667969
Content currentTime: 489.0016784667969
@@ seeked to: 489.0016784667969
Content currentTime: 489.0016784667969
Content currentTime: 441.502197265625
Content currentTime: 441.3605346679683
Content currentTime: 441.6107177734375

解释你在看什么:

我有一个在updateTime事件触发时更新的seekFrom变量。 这用于在seeking事件期间获取“from”值。 to值等于video.currentTime seeked事件中,我只是显示video.currentTime

所以最初有一个从30到0的搜索(这是在更改源时执行的“寻找0”)。 不久之后,当前时间在搜索事件被触发之前变为489。 然后有两个寻找事件 - 一个表示从0变为489(自当前时间更新以来被误解为489到489),另一个表示从489到441的未经请求的变化(也被误解为489到489)当前时间更新晚了 )。 在此之后,当前时间变为441。

所有这些都是由以下两行代码创建的:

video.src = content.source;
video.currentTime = content.currentTime;

在运行video.currentTimecontent.currentTime等于489.我没有手动设置video.currentTime ,也没有在搜索栏上执行搜索。 数字441似乎是凭空出现的,但如果我一遍又一遍地重播视频,它总是寻求这个完全相同的位置 - 所以必须有一些意义。

所以问题是:

为什么在地球上它寻求两次,我该如何阻止它?

注意:在Macbook Pro上使用QuickTime都会遇到这种情况。 我还没有在iOS上进行测试(因为它不能正常工作),当我到达那里时,Android将是一个完全不同的问题。

另外,请注意:我在第二次搜索之前收到了一个seeking事件 - 所以如果HTML5中有任何方法可以“取消”搜索,那么这可能是一个可接受的解决方案。

不知道为什么有人投了一票...我不明白我的问题是不合法的。 经过实验,研究和尝试每一个随机的建议,我可以在晦涩的博客文章中找到我找到的东西:

iOS无法寻找小数位 寻求491.337将失败,但寻求491将成功。

我刚刚添加了以下内容:

video.currentTime = content.currentTime | 0; // Shortcut for truncating positive integers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM