Javascript 更改HTML5视频元素源后不久查找的问题

Javascript 更改HTML5视频元素源后不久查找的问题,javascript,ios,html,video,quicktime,Javascript,Ios,Html,Video,Quicktime,我试图使用HTML5来模拟一个更强大的多媒体播放器,它在后台加载广告,并根据需要在视频和广告之间切换 我遇到的第一个挑战是,大多数移动设备不允许预加载视频,这意味着“在后台”加载广告的概念是不可能的。相反,我采取了一种不那么优雅的方法:使用一个标记,在抛出广告时更改其src属性。这样做的好处是,您可以占用现有的权限来预加载和自动播放,但缺点是每次视频元素更改时都会出现严重的缓冲。然而,我们的客户可以接受这一点 因此,理想的行为是: 内容播放1分钟 广告播放1分钟 内容从2分钟开始恢复 我遇到的第

我试图使用HTML5来模拟一个更强大的多媒体播放器,它在后台加载广告,并根据需要在视频和广告之间切换

我遇到的第一个挑战是,大多数移动设备不允许预加载视频,这意味着“在后台”加载广告的概念是不可能的。相反,我采取了一种不那么优雅的方法:使用一个
标记,在抛出广告时更改其
src
属性。这样做的好处是,您可以占用现有的权限来预加载和自动播放,但缺点是每次视频元素更改时都会出现严重的缓冲。然而,我们的客户可以接受这一点

因此,理想的行为是:

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

    为了弄清楚我们应该去哪里,我在后台运行了一个“虚拟内容播放器”。基本上是一个变量,它存储当前时间,并在
    元素抛出
    updateTime
    事件时更新。因此,随着广告的发展,虚拟内容也以完全相同的速度发展。到了切换的时候,我们刚好跳过了一分钟的内容

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

    要解释您所看到的内容:

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

    因此,最初有一个从30到0的寻道(这是源更改时执行的“寻道到0”)。不久之后,在触发seek事件之前,当前时间更改为489。然后有两个seek事件——一个表示从0到489的更改(由于当前时间提前更新,被错误地理解为489到489),另一个表示从489到441的未经请求的更改(由于当前时间晚更新,也被错误地理解为489到489)。在此之后,当前时间更改为441

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

    video.src = content.source;
    video.currentTime = content.currentTime;
    
    在运行这两行时,
    content.currentTime
    等于489。我在其他任何地方都不能手动设置
    video.currentTime
    ,并且在搜索栏上没有执行搜索。数字441似乎是凭空出现的,但如果我一遍又一遍地重播视频,它总是寻找同一个位置——因此肯定有一些意义

    因此,问题是:

    它究竟为什么要寻找两次,我该如何阻止它?

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


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

    不确定为什么有人投了反对票。。。我看不出我的问题有什么不合法之处。在试验、研究和尝试了我在晦涩的博客帖子上能找到的每一个随机建议后,我发现了一些有效的方法:

    iOS在查找小数点位置时遇到问题。寻求491.337将失败,但寻求491将成功

    我刚刚补充了以下内容:

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

    你需要确保你可以播放你正在寻找的时间范围,我没有看到任何检查,因此它可能会尝试跳到它还不能播放的地方,加载它,然后在加载后再次搜索。我不确定我是否理解否决票或接近票。。。根据规则:“但是如果你的问题通常涉及到……一个特定的编程问题”,那么它就会被张贴在正确的地方@丹达维斯:我将尝试添加一个对
    canPlayThrough
    的检查,看看它有什么作用,谢谢。现在将侦听器绑定到
    canPlayThrough
    事件,并在此处执行搜索-在搜索到489之后仍然对441进行随机搜索
    video.currentTime = content.currentTime | 0; // Shortcut for truncating positive integers