AWS Elemental MediaConvert 客户端 SDK 不工作

AWS Elemental MediaConvert Client SDK not working

由于我落入了 AWS 陷阱并且没有忽略 Elastic Transcoder Page saying that, we should start using Elemental MediaConverter 上的信息消息,所以几乎没有任何东西按预期工作。

我已经按照 these steps 设置了 Elemental MediaConvert。我不得不承认,在控制台中设置所有内容非常简单,我很快就能够对存储在我的 S3 存储桶中的视频进行转码。

不幸的是,我不得不使用 @aws-sdk/client-mediaconvert. Apart from not finding any docs on how to use the SDK, I cannot even successfully connect to the service, since apparently MediaConvert does not support CORS.

从我的 Web 应用程序进行转码。

所以我的问题是,有没有人成功地将 MediaConvert 与 SDK 结合使用?如果是,你能告诉我该怎么做吗?

这是我目前的配置:

try {
  const client = new MediaConvertClient({
    region: params.region,
    credentials: fromCognitoIdentityPool({
      client: new CognitoIdentityClient({ region: params.region }),
      identityPoolId: params.cognitoPoolId,
    }),
  });

  const data = new CreateJobCommand({
    JobTemplate: "Test Template",
    Role: "Cognito_TestTranscodeUnauth_Role",
    Settings: {
      Inputs: [
        {
          FileInput: "s3://some-bucket/files/video.mp4",
        },
      ],
    },
  });

  return await client.send(data);
} catch (error) {}

如果我只是 运行 脚本,我会收到 CORS not allowed 错误。但是,如果我在浏览器中禁用 CORS,我只会收到 Access denied 错误,而无需进一步解释。真的快把我逼疯了!

感谢任何帮助!

所以,经过将近整整两天的反复试验和深入研究源代码,我终于找到了解决方案!简而言之:未经身份验证的访问和 MediaConvert 将不起作用!

整个问题是 Cognito,它不允许对未经身份验证的访问进行 MediaConvert 操作。这是 access list.

我的解决方案

因为我使用 Auth0 进行用户身份验证,所以我只是遵循 this 指南,基本上我所有的问题都消失了!附加我使用的令牌

// React state variable
[token, setToken] = useState<string>();

// Using the Auth0 SDK to set the 
const { getIdTokenClaims } = useAuth0();
getIdTokenClaims().then(j => setToken(j.__raw));

// use this in eg. useEffect hook
fromCognitoIdentityPool({
  client: new CognitoIdentityClient({ region: region }),
  identityPoolId: identyPoolId,
  logins: {
    "<your-auth0-domnain>": token,
  },
});

似乎如果我们有一个经过身份验证的用户,

  • 我们没有 CORS 错误
  • 我们可以将任何角色附加到我们想要的联合身份池

我想还有其他解决方案,我相信如果您使用 AWS 的内置用户服务进行应用程序身份验证,您可能会遇到更少的问题。

无论如何,希望这对某人有所帮助!

P.S:原始问题中的示例确实可以正常工作!