如何使用快速 Rest API 服务器提供 MP4 以使其与移动设备兼容?

How to serve MP4 using an express Rest API server so it's compatible with mobile?

我有一个 express rest API 服务器,我正在尝试使用它从 S3 存储桶中获取 MP4 文件并提供它。 视频在我的桌面上显示正常,但在我的 iPhone10 上不起作用。请参见下图。

我的 phone 播放这个特定文件的能力不是问题,因为当我在我的 phone 上直接从存储桶访问它时,它可以工作。因此,这一定与我的服务器获取或提供文件的方式有关。 有什么建议吗?

app.get("/video/:userId", async (request, response) => {
  s3.getObject({ Bucket: 'user-videos', Key: request.params.userId }, function(err, data) {
    if (err) {
      console.log(err);
    } else {
      response.set("Content-Type", "video/mp4");
      response.send(data.Body);
    }
  });
});

必须检查请求的源接受范围,如果是,则相应地提供内容:

app.get("/video/:userId", async (request, response) => {
  s3.getObject({ Bucket: 'user-videos', Key: request.params.userId }, function(err, imgData) {
    if (err) {
      console.log(err);
    } else {
      const range = request.get("Range");
      let start = 0;
      let end = "";
      let code = 200;
      if (range) {
        const result = range.match(/bytes=(\d+)-(\d*)/);
        if (result !== null) {
          start = result[1];
          end = result[2];
        }
        code = 206;
      }
      response.set("Content-Type", "video/mp4");
      response.set("Accept-Ranges", "bytes");
      response.set(
        "Content-Length",
        imgData["ContentLength"]
      );
      response.set(
        "Content-Range",
        imgData["ContentRange"]
      );
      response.set("ETag", imgData["ETag"]);
      response.set(
        "Last-Modified",
        imgData["LastModified"]
      );
      response.status(code);
      response.send(imgData.Body);
    }
  });
});