-1

目标:我有一个允许用户上传视频的应用程序,然后我需要能够立即将这些视频流式传输给其他用户。我目前的设置可以很好地解决这个问题,但我现在想对视频进行转码,以便它们针对移动流媒体进行优化。寻找一些最佳实践,请帮助!

当前设置:我正在使用 S3 存储桶来存储视频资产本身。成功上传后,我将在其他地方创建一个单独的视频对象,其中包含该特定视频的所有元数据,包括检索它的 URL。*请注意,实际上我是通过 AWS CloudFront 进行流式传输的,因此我保存为视频对象属性的 URL 实际上是连接到 S3 存储桶的 CloudFront 分配的基本 URL。

问题:现在我想为移动优化流媒体转码视频。我可以使用弹性转码器运行后台作业,从一个 AWS 存储桶(称为“bucket1”)获取它们,对它们进行转码,然后将它们放入另一个为优化视频指定的存储桶(称为“bucket2”)。但我的问题是,现在当用户上传视频时,流程是这样的:上传到bucket1,并使用元数据创建对应的视频对象。视频对象需要一个 URL,以便我稍后可以流式传输视频。我设置了与 bucket2 关联的 URL(最终将放置优化的视频资产)。问题是,假设我的批处理作业再运行一个小时,但用户在一分钟后请求该视频。显然,bucket2 URL 上还没有优化版本,所以我无法流式传输视频。

我试过的:最近我想,如果不是为转码的视频创建bucket2,我设置我的后台作业从bucket1获取视频,转码,然后再次将它们放回同一个bucket中文件名(覆盖旧的非优化版本)。然后我每个视频只有一个文件,所以最坏的情况是,如果用户在该视频上运行作业之前要求视频,他们仍然会获得内容,它只是未优化的版本。一个问题是弹性转码器显然不允许我覆盖文件(我可以通过将它们放入第二个存储桶中,然后使用 copyObject 操作进行覆盖来解决这个问题,根据这篇文章:aws transcoder overwrite files on s3)。但是,更大的问题是这都需要一个文件名,包括扩展名。如果我想将文件从 .mov 格式(例如)转换为扩展名为 .m3u8 的 hls 播放列表,这似乎是不可能的。

如果有人有任何最佳实践技巧来解决我所描述的问题,我将非常感激!

干杯,布伦丹

4

2 回答 2

0

http://www.bitcodin.com能够比实时转码更快,并立即将视频输出给用户。它也可以在亚马逊 AWS 中使用,例如按照本教程: http: //www.bitcodin.com/blog/2015/02/create-mpeg-dash-hls-content-for-amazon-s3-and-cloudfront/

于 2015-05-09T08:57:52.090 回答
0

我知道这已经有几年了,但想添加额外的信息。希望您在 2 年前发帖后找到了其他解决方案,但您可以使用在线视频平台或转码服务,这两者都是为了准确处理您所描述的内容,以及更多。市场上有很多可供选择,从免费到付费。此外,当 Stefan 说“比实时转码更快”时,这意味着如果您的视频时长 15 分钟,则转码将花费不到 15 分钟。

于 2017-05-30T05:27:13.590 回答