我正在使用nodejs服务器进行视频流传输。我使用Amazon S3存储桶作为视频存储。而nodejs正在Amazon EC2实例中运行。为了响应客户端的请求流式传输特定的视频文件,首先需要将文件从S3存储桶下载到EC2实例(nodejs服务器),这是一个耗时的过程,客户端必须等待几个第一个视频片段从nodejs发送到客户端之前的秒数。我正在寻找一种方法来删除下载时间间隔。 我的问题是:
1#有没有办法从S3存储桶直接流式传输?
或
2#S3存储是否允许获取存储文件的小块而不是下载整个文件?
注意:视频流应该由iOS视频播放器使用。 我是视频流和S3存储的新手。
请在这种情况下建议我最好的解决方案。
答案 0 :(得分:5)
您需要使用以下AWS服务以标准方式从S3存储桶实现按需视频流。
1)Amazon Elastic Transcoder
Amazon Elastic Transcoder是云中的媒体转码。它旨在成为一种高度可扩展,易于使用且经济高效的方式,供开发人员和企业将媒体文件从其源格式转换(或“转码”)为可在智能手机,平板电脑和PC等设备上播放的版本。 / p>
将您的视频文件转换为HLS格式(受支持最广泛的格式) 流媒体协议)
2)Amazon CloudFront - 内容分发网络(CDN)
Amazon CloudFront是一种全球内容交付网络(CDN)服务,可加速您的网站,API,视频内容或其他网络资产的交付。它与其他Amazon Web Services产品集成,为开发人员和企业提供了一种简单的方法,可以在没有最低使用承诺的情况下为最终用户加速内容。
CloudFront准备文件并将文件传送到播放器
相关链接: -
答案 1 :(得分:3)
我首先要澄清一下,“流媒体”在技术上与“播放视频”(渐进式下载)有所不同。因此,显示来自S3的视频并不是真正的“流式传输”。那是“渐进式下载”。
如果要进行HLS流传输,则不能仅使用S3来实现。
您需要:S3 + CloudFront + MediaConvert。
MediaConvert会将您的mp4转换为m3u8(播放列表)和一堆.ts文件(段)。您还可以在提交给MediaConvert时对流进行加密。然后,您可以使用VideoJS之类的播放器来播放视频-它甚至可以与加密的视频流一起使用。
-拉维·贾亚戈帕尔(Ravi Jayagopal)
答案 2 :(得分:0)
一个人可以结合使用这里描述的方法:
https://github.com/davidgatti/How-to-Stream-Movies-using-NodeJS
S3的“ Range”参数用于从S3获取块。我能够使用这些方法重现视频流。它可能不是性能最高的。