如何让videojs自动卸载

How to get videojs to unload automatically

我目前在 Rails 应用程序(每个页面上都有一个视频播放器)中使用 VideoJS 来显示视频,我遇到了一个非常奇怪的问题:

播放器在我访问的第一个页面上运行良好,但如果我播放视频并访问另一个页面,即使页面不再打开,第一页的视频仍会在后台播放(您可以听到音频)并且您访问的页面上的视频未正确初始化(未应用选项,这意味着无法播放视频,因为控件是一个选项)并且控制台显示 VIDEOJS: WARN: Player "player" is already initialised. Options will not be applied.

当用户离开页面时如何让 VideoJS 自行卸载以及为什么它首先继续播放,HTML5 视频播放器以前没有这样做。

是让 VideoJS 在页面加载时手动重新加载自身的最佳方法吗?如果可以,那该怎么做?

注意:如果我导航到网站内的任何其他页面,视频将继续不初始化,但如果我重新加载该页面,任何页面,该页面上的视频都有效再次.

注意 2: 结果是 onbeforeunload javascript 事件甚至不会触发,如果我单击 link 到另一个页面,它只会在您要访问一个完全不同的网站时触发,所以我什至无法在页面卸载时将其用于 .dispose() VideoJS。

注 3: .reset() 似乎也不起作用。

您可以检查播放器是否已经存在并卸载,然后重新加载。

我实际上能够找到一个相当简单而优雅的解决方案:

if (player) {player.dispose()} else {var player}
player = videojs('player', {
    //options
});

首先它会检查播放器是否存在。如果是,它会破坏 VideoJS 实例。如果没有,它会创建变量。然后它初始化播放器。

我发现这个是解决方案:

var oldPlayer = document.getElementById('my-player');
videojs(oldPlayer).dispose();

它在 docs actually

通过参考这个问题:https://github.com/videojs/video.js/issues/2904

我们可以将上面的解决方案重写成这样:

const playerId = 'video-player';
const videoOptions = {
        controls: true,
        sources: [{
            src: 'test-file.mp4',
            type: 'video/mp4',
        }]
      };
let player;
let players = videojs.players;
const imaOptions = { adTagUrl };
if (players && Object.keys(players).length) {
   player = players[playerId];
   player.dispose();
} 
player = videojs(playerId,videoOptions);
player.ima(imaOptions);