javascript - 使用 MediaSource API 传输不断增长的文件。

标签 javascript html google-chrome video media-source

所以我有一个正在下载的 .mp4 文件。我想使用 MediaSource API 将下载文件流式传输到视频元素中。我该怎么做?

const NUM_CHUNKS = 5;

var video = document.querySelector('video');
video.src = video.webkitMediaSourceURL;

video.addEventListener('webkitsourceopen', function(e) {
  var chunkSize = Math.ceil(file.size / NUM_CHUNKS);

  // Slice the video into NUM_CHUNKS and append each to the media element.
  for (var i = 0; i < NUM_CHUNKS; ++i) {
    var startByte = chunkSize * i;

    // file is a video file.
    var chunk = file.slice(startByte, startByte + chunkSize);

    var reader = new FileReader();
    reader.onload = (function(idx) {
      return function(e) {
    video.webkitSourceAppend(new Uint8Array(e.target.result));
    logger.log('appending chunk:' + idx);
    if (idx == NUM_CHUNKS - 1) {
      video.webkitSourceEndOfStream(HTMLMediaElement.EOS_NO_ERROR);
    }
      };
    })(i);

    reader.readAsArrayBuffer(chunk);
  }
}, false);

如何动态更改 NUM_CHUNKS,并对视频进行切片?

最佳答案

code you're using from Eric Bidelman截取浏览器已经完全下载的视频来演示 api 的工作原理。实际上,您会在服务器上切片 视频,客户端会按顺序下载每个 block ,可能带有 AJAX request。 .

我首先建议您在现有的演示代码中尝试使用 .mp4,因为 MediaSource 似乎对它接受的视频文件格式非常挑剔。参见 Steven Robertson's answer关于如何创建可以工作的 mp4。

然后由您决定是要预先手动对视频进行切片,还是在服务器上动态切片(具体取决于您的服务器)。 javascript 客户端不应该关心每个 block 的数量或大小,只要它们按顺序提供(我认为规范甚至允许一定数量的无序附加)。

关于javascript - 使用 MediaSource API 传输不断增长的文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19546994/

相关文章:

javascript - 如何在每个自定义范围步骤上更改图标的颜色

Android 指针事件坐标

javascript - Math.random() 返回值大于一?

java - 如何使用扩展和 Selenium 打开新选项卡?

javascript - 数据表中的图标意外显示

javascript - JQuery 移动表单在第一次查看后丢失格式

javascript - 查找嵌套数组中项目的索引

javascript - 如何替换类的内部内容?

javascript - 启动时无法在所有区域选择 Canvas

javascript - 当到达较小的断点时, slider 导航突然显示