如何强制 html5 视频完全加载?

Posted

技术标签:

【中文标题】如何强制 html5 视频完全加载?【英文标题】:How to force a html5 video to load fully? 【发布时间】:2014-09-01 19:12:49 【问题描述】:

我在一个页面上有几个 html5 视频。当我第一次进入页面时,它们加载正确 - 我可以看到正确的帧大小,播放视频等。在转到另一个页面并返回视频页面后,帧不够高,视频也没有播放,不全屏等。

在我看来,这与视频加载有关。我尝试使用 onloadeddata 没有成功(我可能用错了,新手在这里)。

有什么方法可以强制加载视频吗?就像循环检查视频是否已加载,如果没有 - 加载它们?

更新:这是代码。

var content = '';
    var index;
    $.post('api/getVideo.php', id: id, function(data) 
    //console.log(data);

        for (index = 0; index < data.length; index++) 
            content = content + '<div class="col-md-6 video-col"> <button id="play" class="full-play-button"><i class="fa fa-play"></i></button>' +
                    '<video id="video1" class="video-small"> <source src="'+data[index]["Path"] + '"type="video/'+data[index]["Typ"]+'" class="video-file"> </video><h3 class="video-title">'+
                    data[index]["Tytul"]+'</h3></div>';
        
    , "json");

【问题讨论】:

帖子已更新。就像我说的,我尝试了 onloaddata 并尝试检查是否 readyState === 4(但同样,新手)。 你是如何使用onloadeddata的??那不是jQuery函数? 我现在不记得了,我昨天试过了,但它是关于全屏 - 使 video1.play() 仅 onloadeddata 以防止在没有加载视频的情况下全屏触发。 【参考方案1】:

您的源标签中可能有错字。尝试将 '"type="video/' 更改为 '"type=video/"'。现代浏览器不再需要 type 属性,因此请尝试完全删除 '"type="video/'+data[index]["Typ"]+'。我没有足够的信息来测试您的代码,但它看起来像是语法错误。

【讨论】:

【参考方案2】:

来自MediaAPI docs,

媒体 API 还包含一个 load() 方法:“导致元素重置并开始从头开始选择和加载新的媒体资源。” ( 加载元素导致浏览器运行media element load algorithm)

您可以在从新页面返回时触发加载。

【讨论】:

感谢您的回答。如何确定“从新页面返回”?凭借我非常少的 javascript 知识,我假设我应该能够添加一个事件侦听器,例如:when "comingBackToPage" load() ? 我很难说这是否可行。我问了一位更高级的同事,他设法找到了解决方案 - 我真的不明白为什么很遗憾我无法在这里描述它。 +1 虽然让我意识到 load() 可能意味着两种不同的东西。 但答案不正确。 load 方法实际上做了同样的事情,如果你构建一个视频并将其插入到 dom 中,那就完成了。在此之后立即调用 load 不会加载视频,它会重置并重新解析视频元素。如果您更改子源元素,这很有用。【参考方案3】:

简而言之,这并不完全可能。对于短视频,您可以将preload attribute 设置为“auto”或空字符串“”。这意味着,您希望浏览器完全预加载源代码。

不幸的是,对于长视频,大多数浏览器都无法完全下载视频。在移动浏览器显式 ios 的情况下。 preload 属性不起作用。所以这个方法看起来像这样:

<video preload="" controls="">
    <source src="my-video.mp4" type="video/mp4" />
    <source src="my-video.webm" type="video/webm" />
</video>

【讨论】:

以上是关于如何强制 html5 视频完全加载?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 html5 嵌入视频完成播放?

html5 video标签如何在可以在视频完全加载进浏览器后执行JS函数?

HTML5视频加载完成后如何使文本消失?

可以在 iOS 设备上强制 HTML5 视频预加载吗?

加载 HTML5 视频时如何制作加载图像?

HTML5 视频:强制中止缓冲