可以使用Amazon S3/CloudFront和HTML5播放器流式传输视频吗?

38

我想使用HTML5视频播放器来流式传输视频。这在S3/CloudFront中是否可行?我知道亚马逊使用RTMP流媒体协议,而HTML5的video标签不支持RTMP。有没有办法用HTML5播放器来流式传输视频?

4个回答

68
很多Wayne Koorts所发布的内容为一个好答案提供了基础。看起来问题在于您可以通过渐进式下载视频进行“流媒体”。这适用于任何html5兼容的视频文件,正如他所示。为了获得mp4文件渐进式下载的最佳性能,需要确保moov atom元数据出现在文件开头。确保您的mp4文件具有此属性是ffmpeg中包含qtfaststart程序的原因之一。
当然,渐进式下载不是“流媒体服务器”。流媒体服务器旨在支持许多不同的功能,包括:
- 安全和DRM - 自适应流媒体/交错(支持多个比特率交错到特定文件中) - 寻找
看起来在这里表达的特定关注点是寻找功能。它恰好在html5和s3/cloudfront中得到良好的支持。
令人困惑的是,cloudfront的视频文件有几个选项。其中一个选项是使用其许可的Adobe FMS服务器网络传递文件。这就是有关使用RTMP的混淆产生的地方。但是,那只是一种选择。文件可以以标准的“下载”形式分发到cloudfront,并且它们将具有寻找属性,因为该实现使用字节范围并支持伪流媒体。
伪流媒体这个术语似乎很令人困惑,但在html5的情况下,它只是要求HTTP服务器支持1.1规范。当寻找时,客户端发送字节范围请求,服务器负责传递文件的那一部分。
换句话说...使用html5播放器进行寻找可以在cloudfront服务器上工作,因为它们兼容HTTP 1.1。

关于一些流媒体服务器提供的其他功能,有许多竞争性的服务器已经实现了“H264流媒体”或MPEG-DASH的元素,作为对RTMP和FMS兼容服务器的替代品。许多基于Flash的播放器支持这些功能,这些功能超越了简单的查找。JWPlayer和Flowplayer是支持部分或全部功能的两个例子,然而HTML5的视频播放器没有支持任何这些功能。您可以通过http://h264.code-shop.com/trac#H264StreamingModuleIntroductionversion2了解更多信息。

如果这还不够混乱,苹果公司实现了他们自己的“HTTP直播流”协议,有时也称为m3u8,在iOS和QuickTime中支持。我之所以提到这一点,是因为经常有人想要一种支持各种不同设备的方式。

希望这能稍微澄清一些东西。


18

我最近成功地做的一件事就是使用Video.js(开源)HTML5播放器和托管在S3上的视频。基本上,你只需要将视频上传到S3存储桶中,然后在页面上包含Video.js CSS和JS文件后,代码看起来像这样:

<video id="example_video_1" class="video-js vjs-default-skin"
    controls preload="auto" width="1600" height="900"
    poster="http://mys3bucket.s3.amazonaws.com/videoImage.jpg"
    data-setup='{"example_option":true}'>
    <source src="http://mys3bucket.s3.amazonaws.com/myvideofile.mp4" type='video/mp4' />
    <source src="http://mys3bucket.s3.amazonaws.com/myvideofile.webm" type='video/webm' />
</video>

poster是在视频加载或未播放时显示在视频播放器上的静态图像。至于<source>标签,您可以链接任意数量的视频格式。使用更多的格式可以获得更好的跨不同平台的支持(例如,某些基本的Linux发行版可能无法播放MP4等格式)。

请查看Video.js快速入门指南此处

当决定使用S3还是CloudFront时:在我看来,总体而言,对于视频,S3更为适用,因为当您存储大量数据时,成本更便宜(因为CloudFront将所有内容的副本分发到其所有边缘服务器,尽管您可以通过选项来限制这种情况)。但有些人确实更喜欢CloudFront,因为它速度更快,尽管请记住,CloudFront主要被用作内容交付网络,需要超快的响应时间(例如,网站图形、样式表、JS文件等),因此这是一种权衡取舍,取决于您的需求。如果您的视频都非常小,则可能会发现CloudFront实际上适合您的需求。

要更明确地分析成本,您可以使用亚马逊的月度成本计算器


4
从S3上您将无法流式传输视频,视频首先会被下载然后再播放。 - rajat
1
文件如何仅通过视频播放器进行流式传输?难道不需要媒体流服务器从S3中提取文件并将其作为RTMP或HTTP流传输到视频播放器吗? - rajat
1
那么你的意思是媒体流服务器没有用处? - rajat
1
我并不是在恶意挑衅,但我仍然不理解流媒体服务器的用途,因为我们可以使用渐进式下载。如果人们可以使用渐进式下载,为什么还要使用Wowza或FMS与S3和CloudFront配合使用? - rajat
15
这个问题很有意义:如果只需要下载,媒体流服务器有什么用处?我认为不同之处在于,您不能从中间加载视频,必须等待前50%的视频加载完成,而使用适当的流媒体服务器,您将能够从50%位置加载,而不必加载视频的开头。 PS:没人关心你的声望,我也没有看到任何恶作剧,只是对您的解决方案非常合理的担忧。您应该在 jsFiddle 上发布一个工作演示,这样我们就可以尝试从中间加载视频! - Community
显示剩余4条评论

1
我正在为全球制作做一些视频相关的工作。我需要控制成本,但又希望能够轻松扩展,并提供足够的功能以安全地交付一个相当复杂的系统。AWS似乎非常棒,我已经使用它们几年了,我认为S3存储桶很棒。它们是免费的,有一定限制。而且,它们确实成功地提供了我所认为的流媒体视频;因为它们存储在S3中,并在页面加载时立即通过JWPlayer播放,没有任何卡顿或延迟。
我可以看到一些流媒体视频的界定还是模糊和令人困惑的,尽管@gview在深入解释方面做得很好。它的复杂性让我感兴趣,但如果你的目标是让视频运行起来,我不认为HTML5是你的答案。据我所知,SOAP、REST、HTTP甚至HTTPS都得到支持和提供。AWS的文档也值得注意,非常有帮助。我会在这里附上一个起始链接。

@user2352370:JWplayer..我还没决定。我刚购买了中间层会员,但是在阅读Wayne Koorts的评论后,我认为JSvideo因多种原因更好,如果我能退款,我将使用它。除了提供视频样式外,我没有看到JWvideo的任何即时价值。我至少认为JWvideo对我来说其价值有限。我可以使用JSVideo轻松创建多个设备和浏览器类型的多个回退选项。我甚至可以样式化JSVideo,但也许简单的JWvideo也有其优点。在未来几个月里,我可能需要用它来处理一系列视频帖子。

JWVideo和JSVideo都可以胜任
我认为JWVideo和JSvideo都可以胜任这项工作,我目前在我的网站上使用两者播放不同的视频,它们都做得很好,虽然我还没有深入测试过浏览器。

创建一个免费的AWS账户并免费使用其服务。如果您已经与RackSpace或Host Gator等提供商打交道一段时间,这将非常令人震惊。
AWS Free Tier HomePage

AWS S3文档网站


0

我在寻找使用VideoJS在自己的网站上托管视频的AS3方案时,发现了你的问题。但是当我查看VideoJS的示例代码时,我注意到链接指向一个名为ZenCoder的公司 - http://video-js.zencoder.com/oceans-clip.mp4

http://zencoder.com/en/

我与Zencoder没有任何关联,但如果您正在寻找基于云的视频托管服务,这可能值得考虑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接