【问题标题】:AWS elastic transcoder - real-time transcoding and distribution for mobile streamingAWS 弹性转码器 - 用于移动流媒体的实时转码和分发
【发布时间】:2015-05-08 22:50:16
【问题描述】:

目标: 我有一个允许用户上传视频的应用程序,然后我需要能够立即将这些视频流式传输给其他用户。我当前的设置可以正常工作,但我现在想对视频进行转码,以便针对移动流媒体进行优化。寻找一些最佳做法,请帮忙!

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

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

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

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

干杯, 布伦丹

【问题讨论】:

  • 听起来问题正在等待您的批处理启动。为什么不在上传后立即启动转码器工作?可以直接从 api 层或通过 lambda 执行此操作。

标签: video video-streaming http-live-streaming transcoding amazon-elastic-transcoder


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2014-09-24
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多