带有 Video.js 和 AJAX 的 HTML5 视频

Posted

技术标签:

【中文标题】带有 Video.js 和 AJAX 的 HTML5 视频【英文标题】:HTML5 Video with Video.js and AJAX 【发布时间】:2012-03-27 09:13:27 【问题描述】:

我有一个 <div> 包含一个 <video> 元素和一个 <ul>。单击<ul> 中的元素会导致AJAX 调用更新<div> 的内容。在我第一次尝试时,第一个视频会正确加载,但是点击不同的链接只会加载海报,而不是控件。经过一番谷歌搜索,我找到了解决方案,这给我留下了以下 AJAX 调用:

$.ajax(
    // each video has its own unique ID
    url: "/Video?id=' + id,
    success: function (data) 
        $('#containing_div').html(data);
        // necessary to re-load video player controls
        _V_('video_' + id,  "controls": true, "autoplay": false, "preload": "auto" );
    
);

将初始化调用添加到_V_ 似乎有些帮助:现在当我切换视频时,“播放”控件按预期显示,我可以播放视频。但是,一旦我这样做,当我切换到不同的视频时,控件现在又消失了。此外,还有一些奇怪的随机错误:如果我多次更改视频,控件会突然无缘无故消失。此外,有时,在我切换到新视频后一秒钟,视频海报会完全消失。

显然,在页面加载时 Video.js 中发生了一些“魔术”,而这并不是由 AJAX 调用触发的,但我无法弄清楚那是什么。 <video> 标签没有任何问题,因为最初它们都在页面中,并且通过更改其不透明度来隐藏/显示它们,并且效果很好(我想移动到 AJAX 的原因是页面大小当所有视频都在线加载时会很大)。

【问题讨论】:

【参考方案1】:

事实证明,解决方案是在传出视频上调用 .destroy()(一个未记录的 API 函数):

if( currentVideoId ) 
  _V('video_' + currentVideoId).destroy();

$.ajax(
  // each video has its own unique ID
  url: "/Video?id=' + id,
  success: function (data) 
    $('#containing_div').html(data);
    // necessary to re-load video player controls
    _V_('video_' + id,  "controls": true, "autoplay": false, "preload": "auto" );
    currentVideoId = id;
  
);

【讨论】:

以上是关于带有 Video.js 和 AJAX 的 HTML5 视频的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 WordPress 的 ajax ServerInterval 升级中交换 video.js 样式?

video.js 上的 HTML/CSS 格式的字幕

Video.js 重用 ID - destroy()

uniapp如何下载video.js

播放 video.js ustream m3u8 文件流

HTML5视频播放插件Video.js使用详解