HTML5 视频:在视频和海报之间显示加载器/微调器

Posted

技术标签:

【中文标题】HTML5 视频:在视频和海报之间显示加载器/微调器【英文标题】:HTML5 Video: Show Loader/Spinner between Video & Poster 【发布时间】:2015-12-21 01:45:52 【问题描述】:

当我的视频从 S3 存储桶加载时,我想在 Video.js 播放器中显示加载器。

我有一个 Video.js 播放器,它显示一个“播放”按钮,当单击此按钮时,播放器会显示黑屏,直到从 S3 存储桶加载视频。我怎样才能显示一个加载器来代替那个黑屏?

【问题讨论】:

而不是“想要”,如果您能解释到目前为止您已经尝试过什么,以及您面临的确切“问题”是什么,这将对这里的每个人都有帮助...... 感谢您的建议,我想我已经在问题本身的第二段中解释了这个问题。 你试过poster属性github.com/videojs/video.js/blob/master/docs/guides/…吗?你能提供一些代码吗? 是的..我的海报属性工作正常,我想在点击播放图标后海报消失后有另一个图像。 【参考方案1】:

我在同样的方面也面临同样的问题 添加自定义“等待”事件并在“播放”事件中删除它

player.on("waiting", function ()

    this.addClass("vjs-custom-waiting");
);
player.on("playing", function ()

    this.removeClass("vjs-custom-waiting");
);

CSS 值

.vjs-custom-waiting .vjs-loading-spinner

    display: block;

.video-js.vjs-custom-waiting .vjs-loading-spinner:before,
.video-js.vjs-custom-waiting .vjs-loading-spinner:after

    /* I just copied the same animation as in the default css file */
    -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;
    animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;

【讨论】:

【参考方案2】:

我遇到了同样的问题,我通过对 html5 媒体事件使用事件侦听器并相应地显示\隐藏我的微调器来解决它。

我收听的媒体事件(来源:w3.org):

waiting - 播放已停止,因为下一帧不可用,但用户代理希望该帧在适当的时候可用。

canplaythrough - 用户代理估计如果现在开始播放,媒体资源可以一直以当前播放速率呈现到其结束,而无需停止进一步缓冲。

var video = videojs(#id); //Videojs object
var videoEl = $('video'); //Video element

video.on('waiting', function(event) 
    //Check another spinner element doesn't exist before adding a new one
    if(!videoEl.next('.spinner').length)
        videoEl.after(<div class="spinner"></div>);
);

video.on('canplaythrough', function(event) 
    //Fade spinner out and remove it.
    videoEl.next('.spinner')
        .fadeOut(200, function() 
            $(this).remove();
        );
);

注意:我检查微调器是否已存在于 waiting 事件侦听器中的原因是,我注意到有时在多次触发事件时寻找该事件。 p>

【讨论】:

【参考方案3】:

我迟到了 5 年,但一个可能性是做这个视频可见性 = 隐藏并抛出 async() 并等待 video.play(),在这一刻做另一个视频“可见”的可见性。

这是一个小技巧

【讨论】:

【参考方案4】:

模仿@nizam 的回答:

.video-js.vjs-paused:not(.vjs-has-started) .vjs-loading-spinner 
    display: block;
    visibility: visible;


.video-js.vjs-paused:not(.vjs-has-started) .vjs-loading-spinner,
.video-js.vjs-paused:not(.vjs-has-started) .vjs-loading-spinner 
    -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;
    animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;

【讨论】:

以上是关于HTML5 视频:在视频和海报之间显示加载器/微调器的主要内容,如果未能解决你的问题,请参考以下文章

仅跨浏览器 HTML5 视频预加载海报

在不使用海报的情况下,HTML5 视频标签在移动 Safari 上不显示缩略图

HTML5 视频海报图像无法在 iPad 视网膜上全屏缩放

如何在 iPad 上显示 HTML5 视频海报?

在android上的html5视频标签中禁用默认的丑陋海报图像

Safari 和 Chrome 中的 HTML5 视频海报属性