【发布时间】:2021-01-19 17:12:49
【问题描述】:
伙计们,所以我有一个问题是始终如一地可靠地使用 HTML5 寻找视频。我正在使用 Nodejs 从 AWS S3 Bucket 获取视频,所有视频都是 mp4 格式。我已经尝试了多种方法来让视频的当前时间每次都移动(大部分时间它可以工作,但偶尔它不会移动)但无济于事。 这是我的代码:
router.get("/*", (req, res, next) => {
let params = {
Bucket: "bucketName",
Key: decodeURIComponent(req.path.substring(1))
};
s3.getObject(params, function(err, data) {
if (err) {
res.status(500).send(err);
} else {
res.contentType(data.ContentType);
res.send(data.Body);
}
});
});
}
我一直在阅读,人们说您可以使用字节范围请求并通过字节范围请求来请求整个视频。这家伙似乎是用本地文件来做的,但我不知道如何用 s3 文件来做。见帖子:can't seek html5 video or audio in chrome。我听说有人在做的另一个建议是 HLS 编码,但我不确定什么是最好的方法或如何实现它们,有人能指出我正确的方向吗?
【问题讨论】:
-
也许考虑简单地向浏览器客户端发送一个 S3 预签名 URL,让浏览器和 S3 解决这个问题。而不是您从 S3 代理整个下载。
-
@jarmod 这会解决搜索问题吗?
-
你必须尝试一下。我不知道你的客户会怎么做。您还可以研究视频流的 HLS 或 DASH 选项,通常通过 CloudFront (example)。
-
让我直说。您对我的帖子投了反对票,因为您似乎认为签名 URL 可以解决问题。 (顺便说一下,签名的 URL 是出于安全目的而不是解析字节范围请求。请证明我错了)你甚至不知道它是否会起作用?
-
您没有在此处为远程 GET 提供 任何 支持。如果您想支持它们,因为这是兼容 HTML5 的浏览器将发送的内容,那么您必须在后端支持它们。 S3 确实支持远程 GET,但您的代码不会尝试这样做。我提出签名 URL 方法的原因是因为它类似于您目前正在做的事情(只是将整个文件转储到客户端)并且您声称它大部分时间都有效 - 因此我的建议至少应该有效好吧,而且可能更好,因为它做同样的事情,但以更好的方式。
标签: amazon-web-services amazon-s3 html5-video seek