You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Videogular2异步加载视频失效:onPlayerReady提前调用问题求助

解决Base64视频加载时onPlayerReady提前触发的问题

问题根源

你使用的loadedMetadata事件仅在视频元数据(如分辨率、时长)加载完成时触发,此时视频的实际内容并未加载完毕,因此isCompleted属性会处于false状态,导致onPlayerReady相关逻辑被提前执行。

解决方案

  • 改用canplaythrough事件监听
    该事件会在浏览器判断视频已加载足够数据、可流畅播放至结束时触发,更适合作为视频加载完成的判断节点:
.getDefaultMedia()
  .subscriptions.canplaythrough.subscribe(this.initVdo.bind(this));
  • 在initVdo中检查加载状态,延迟初始化
    若需兼容特定场景或保留原有事件逻辑,可在initVdo内判断当前加载状态,未完成则等待加载完成后再执行onPlayerReady:
initVdo() {
  const media = this.player.getDefaultMedia();
  if (media.isCompleted) {
    this.onPlayerReady();
  } else {
    // 订阅loaded事件,触发后取消订阅并执行初始化
    const loadedSubscription = media.subscriptions.loaded.subscribe(() => {
      loadedSubscription.unsubscribe();
      this.onPlayerReady();
    });
  }
}
  • 手动调用onPlayerReady的可行性
    完全支持手动调用,但必须确保视频已真正加载完成。你可以在确认isCompleted为true后,直接执行this.onPlayerReady(),需注意:若视频未加载完成就调用,可能出现播放卡顿或无法播放的异常。

内容的提问来源于stack exchange,提问作者Jan Šrámek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:32:06