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

at.*_*at. 31 html5 rtmp amazon-s3 video-streaming html5-video

我想使用HTML5视频播放器并流式传输视频.S3/CloudFront可以实现吗?我了解亚马逊使用RTMP流媒体协议,而HTML5的video标签不支持RTMP.有没有办法用HTML5播放器流式传输视频?

gvi*_*iew 59

@Wayne Koorts发布的大部分内容为您提供了良好答案的基础.看起来断开连接是您可以通过渐进式下载"流式传输"视频.这适用于任何与html5兼容的视频文件,如图所示.

为了在渐进式下载mp4文件中获得最佳性能,您需要将moov atom元数据显示在文件的开头.确保您的mp4文件具有此属性是qffaststart程序包含在ffmpeg中的原因之一.

当然,渐进式下载不是"流媒体服务器".流媒体服务器旨在支持许多不同的功能,包括:

  • 安全和DRM
  • 自适应流/交织(支持多个比特率交错到特定文件)

这里表达的特别关注点似乎是寻求特征.碰巧这在html5和s3/cloudfront中得到了很好的支持.

令人困惑的是,视频文件的云端有几个选项.一种选择是让他们的许可Adobe FMS服务器网络提供文件.这就是关于使用RTMP的困惑发挥作用的地方.但是,这只是一种选择.文件可以以标准的"下载"形式分发到云端,并且由于字节范围的实现和对通常所谓的伪流的支持,它们将具有搜索属性.

关于术语"伪流"似乎存在很多混淆,但在html5的情况下,它只是要求HTTP服务器支持1.1规范.在搜索时,客户端发送字节范围请求,服务器负责传递该部分文件.

换句话说......使用html5播放器进行搜索确实可以使用云端服务器,因为它们与HTTP 1.1兼容.

至于流媒体服务器提供的其他一些功能,有各种竞争服务器实现了"H264流媒体"或MPEG-DASH元素,作为使用RTMP和FMS兼容服务器的替代方案.许多基于闪存的播放器支持这些功能,这些功能超越了简单的搜索.JWPlayer和Flowplayer是支持部分或全部功能的2个播放器示例,但HTML5的视频播放器不支持任何这些功能.您可以了解更多信息,访问http://h264.code-shop.com/trac#H264StreamingModuleIntroductionversion2

如果这对您来说不够混淆,Apple会实施他们自己的"HTTP Live Streaming"协议,有时称为m3u8,他们支持ios和quicktime.我提到这一点是因为人们常常想要一种方法来支持各种不同的设备.

我希望这有助于澄清一些事情.


Way*_*rts 13

我最近成功完成的一件事就是使用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>
Run Code Online (Sandbox Code Playgroud)

poster只是在视频加载或不播放时在视频播放器上显示的静止图像.至于<source>标签,您可以在有视频时链接尽可能多的标签.更多格式只意味着跨不同平台提供更好的支持(例如,某些vanilla Linux发行版可能无法播放MP4等).

请参阅此处的Video.js快速入门指南.

决定是使用S3还是CloudFront时:IMHO S3通常更适合视频,因为当您存储大量数据时,成本会更低(因为CloudFront会将所有内容的副本分发到所有边缘服务器,尽管您可以限制有点通过选项).有些人确实喜欢CloudFront,但由于速度快,尽管记住CloudFront主要是作为内容交付网络,需要超快的响应时间(例如,对于网站图形,样式表,JS文件等),所以这是一个权衡取决于根据您的需求.如果您的视频非常小,那么您可能会发现CloudFront实际上适合您的需求.

为了更明确地分析成本,您可以使用亚马逊的每月成本计算器.

  • @WayneKoorts问题是合法的:如果简单的下载足以进行流式传输,那么媒体流服务器的用途是什么?我相信区别在于您无法从中间加载视频,您必须等待前50%已加载,而使用正确的流媒体服务器,您可以从50%的位置加载并且不加载开头的视频.PS:没有人关心你的代表,我也没有看到任何拖钓,但只有非常合理的担忧你的解决方案.您应该在jsFiddle上发布一个工作演示,以便我们可以尝试从中间加载视频! (12认同)
  • 但是从S3你将无法播放视频,视频将首先下载然后播放. (2认同)