【问题标题】:Using aws.sdk, how to know when Elemental MediaConvert completes a job?使用 aws.sdk,如何知道 Elemental MediaConvert 何时完成工作?
【发布时间】:2019-07-05 10:40:16
【问题描述】:

我想为用户添加一个将视频上传到网站的选项。我想知道 AWS Elemental MediaConvert 是否可以处理必要的转码。

使用 aws sdk,我可以像这样向 aws Elemental MediaConvert 提交作业以进行转码...

const result = await new AWS.MediaConvert({apiVersion: '2017-08-29'}).createJob(params).promise()

...但是这只是返回新创建的作业。我似乎无法在任何地方看到如何真正知道工作何时完成。我想知道:是否有一种简单的方法可以知道作业何时实际完成(或失败),以便我可以将响应发送回客户端?

【问题讨论】:

    标签: amazon-web-services aws-sdk aws-elemental


    【解决方案1】:

    一种方法是使用 CloudWatch Events 和简单通知服务 (SNS)。

    你必须:

    1. 在您的网络服务器上设置一个 HTTP 端点来处理传入的通知。
    2. 创建一个 SNS 主题并 subscribe 指向该主题的 HTTP 端点。
    3. 按照 zolaemil 的描述设置 CloudWatch 事件规则,并将事件的 target 设置为 SNS 主题。

    当您的 MediaConvert 作业完成时,它将触发 CloudWatch 事件并将作业结果发送到 SNS,然后将其转发到您的 Web 服务器。因此,您实际上是从 MediaConvert 推送到您的 Web 服务器,而不是轮询。

    【讨论】:

      【解决方案2】:

      您可以根据 MediaConvert 事件设置 Cloudwatch rules。例如

      {
        "source": [
          "aws.mediaconvert"
        ],
        "detail-type": [
          "MediaConvert Job State Change"
        ],
        "detail": {
          "status": [
            "COMPLETE"
          ]
        }
      }
      

      它可以针对许多事物,包括 Lambda 函数、SNS 主题等。

      【讨论】:

      • 感谢您的回复——我查看了 Cloudwatch 规则,但据我所知,它只能用于定位新服务...即我可以用它来调用新服务lambda....但是,如果我正在等待将响应发送回客户端,这对我没有帮助...我需要一种方法来从最初创建作业的调用代码中知道 mediaconvert 何时完成。跨度>
      • 要严格回答您的问题,您需要根据创建作业时返回的 ID 来轮询作业。但是,您真的不想在转换过程中阻塞您的 lambda!这样,您实际上需要为转换支付两次费用:一次用于 MediaConvert,再加上 lambda 在等待且无用的情况下的持续时间。而且由于 MediaConvert 作业通常是进程密集型的,这可能非常重要,更不用说转换花费的时间可能超过 lambda 的最大持续时间。
      • @user1031947 没有办法做到这一点,因为它是一个异步调用。您可以做的是通过轮询或使用 websocket。不幸的是并不简单
      • 知道什么可能导致完整的事件不能被一致地调用吗?
      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2012-01-13
      • 2016-04-21
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 2014-03-27
      相关资源
      最近更新 更多