【问题标题】:Mobile Safari - wait until <video> has fully downloaded before playing移动 Safari - 等到 <video> 完全下载后再播放
【发布时间】:2013-10-31 09:11:54
【问题描述】:

我正在构建一个具有相当复杂的&lt;video&gt; 体验的网站,其中涉及在视频的时间轴上跳跃相当多的时间。为了使其尽可能流畅地工作,最好在视频完全缓冲之前不要开始播放。

我已经设置好并在桌面浏览器中工作(`preload="auto" 主要是让我去我需要去的地方),但当然移动浏览器不会预加载内容并且需要用户交互来启动视频缓冲。

我的问题:在 Mobile Safari 中,是否有可能在用户点击播放后让视频开始播放直到完全下载?

如果有帮助的话,我正在使用Popcorn HTML5 媒体框架。

【问题讨论】:

  • 其他人刚刚问了一个非常相似的问题:stackoverflow.com/questions/19645363/…
  • @brianchirls - 很好,我在搜索类似主题时错过了那个,那里也包含了很好的信息。谢谢!

标签: ios html video safari popcornjs


【解决方案1】:

您可以在 JavaScript 中订阅一个名为 canplaythrough 的 DOM 事件。当浏览器估计它可以在不暂停缓冲的情况下播放整个视频时调用此事件。

编辑:同样,您可以使用progress 事件来确定有多少视频已被缓冲:

var player = document.getElementById('video_player'); // The <video> element
player.addEventListener('progress', onVideoProgressUpdate, false);

function onVideoProgressUpdate(e) {
    var percentageBuffered = 0;

    if (player.buffered.length > 0 && player.buffered.end && player.duration) {
        percentageBuffered = player.buffered.end(0) / player.duration;
    } else if (player.bytesTotal != undefined && player.bytesTotal > 0 && player.bufferedBytes != undefined) {
        percentageBuffered = player.bufferedBytes / player.bytesTotal;
    }

    if (percentageBuffered == 1) { // 100% of the video has been buffered
        player.Play();
    }
}

【讨论】:

  • 问题是我不需要知道浏览器估计它什么时候可以播放,因为用户可以跳到视频的 1/4 附近的部分结尾。我需要暂停视频,直到它的每个字节都被下载,而不仅仅是浏览器缓冲区估计。
  • @scottie 更新了我的答案,确定了有多少视频已被缓冲。
  • 该死的,让我试一试,我会让你知道会发生什么!谢谢!
  • 这正是我需要它做的事情,作为奖励,我可以捕获percentageBuffered 的值以用于创建渐进式加载指示器。砰!谢谢!
猜你喜欢
  • 2015-04-14
  • 1970-01-01
  • 2011-07-06
  • 2015-07-31
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
相关资源
最近更新 更多