javascript - 在其他播放器完成初始化后,videoJs 播放器无法正确初始化
问题描述
我有一个问题,我需要在初始化我的 videoJs 播放器之前找到媒体的持续时间。
为此,我一直在尝试通过在获取持续时间时加载带有媒体的隐藏播放器来获取持续时间,然后根据该持续时间设置选项以在第二个播放器中使用。
我发现如果我这样做,那么第二个播放器将无法正确初始化。
在我的示例中,我有两个具有相同选项的玩家相同。唯一的区别是一个在第一个之后 1 秒初始化。
var videoJsOptions = {
controlBar: {
progressControl: false,
remainingTimeDisplay: false,
durationDisplay: false,
currentTimeDisplay: false,
timeDivider: false,
},
};
var player = videojs('my-video', videoJsOptions);
player.src('http://techslides.com/demos/sample-videos/small.mp4');
player.muted(true);
player.play();
window.setTimeout(() => {
var player2 = videojs('my-video-1', videoJsOptions);
player2.src('http://techslides.com/demos/sample-videos/small.mp4');
player2.muted(true);
player2.play();
}, 1000);
您可以从屏幕截图中看到,第一个生成正确,隐藏了控制滚动条,而第二个忽略了这些设置并错误地显示了滚动条。
任何人都可以在这里帮助我,我很高兴销毁第一个视频 Js 播放器,但处置似乎并不能解决问题。
视频由于某种原因无法在此处加载,但您仍然可以看到问题。
解决方案
在他们的文档中,它说:
默认情况下,当您的网页完成加载时,Video.js 将扫描具有 data-setup 属性的媒体元素。data-setup 属性用于将选项传递给 Video.js。
因此,如果您只是删除该data-setup
属性,它将使用您传递的选项。否则,它不会。我猜它只是由于某种竞争条件而恰好在第一个上工作 - 你碰巧在自动设置到达之前设置它。
<head>
<link href="https://vjs.zencdn.net/7.8.4/video-js.css" rel="stylesheet" />
<!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
<script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script>
</head>
<body>
<video
id="my-video"
class="video-js"
preload="auto"
width="640"
height="264"
controls
></video>
<video
id="my-video-1"
class="video-js"
preload="auto"
width="640"
height="264"
controls
></video>
<script src="https://vjs.zencdn.net/7.8.4/video.js"></script>
<script>
var videoJsOptions = {
controlBar: {
progressControl: false,
remainingTimeDisplay: false,
durationDisplay: false,
currentTimeDisplay: false,
timeDivider: false,
},
};
var player = videojs('#my-video', videoJsOptions);
player.src('http://techslides.com/demos/sample-videos/small.mp4');
player.muted(true);
player.play();
window.setTimeout(() => {
var player2 = videojs('#my-video-1', videoJsOptions);
player2.src('http://techslides.com/demos/sample-videos/small.mp4');
player2.muted(true);
player2.play();
}, 1000);
</script>
</body>
推荐阅读
- abap - 为什么会出现运行时错误 DBSQL_DBSL_LENGTH_ERROR?
- macos - React Nativa 他命令 pod install 在 macOS 中导致错误
- python - 从 cmd 运行时没有名为“制表”的模块
- amazon-redshift - 从 Glue 作业的 Glue 数据目录访问 Aurora Postgres 物化视图
- linux - 阿帕奇重定向映射数据库
- assembly - 比较两个avx2浮点数组,将结果写入epi8
- sql-server - 对数组或列表中的每个元素运行查询
- angular - catchError 不包含 Angular 拦截器中的错误的所有信息
- api - 强制从 http 到 https ( heroku-ssl-redirect ) 后 API 路径不再可访问 / API 路径在 ssl https 下不可访问
- node.js - NPM 包未发布