java - AWS 转录过程完成后调用另一个 lambda

标签 java aws-lambda amazon-transcribe

我有一个 lambda,当有人将音频文件上传到存储桶时,它将被触发。我需要使用 AWS Transcribe 异步处理文件。我编写了代码来做到这一点,但问题是它只检查一次,而不是在文件处理完成后调用处理函数。

下面是stackoverflow AWS 转录的链接,但我们必须等待响应,直到作业完成,并且 lambda 函数超时 5 分钟。之后执行将停止。

//创建异步客户端对象来调用 AWS Transcribe

private AmazonTranscribeAsync asyncClient = AmazonTranscribeAsyncClientBuilder.standard().build();

//下面是调用 AWS API 并上传音频文件的方法

private void startText(String guid, String bucket) {
    String jobName = UUID.randomUUID().toString();
    StartTranscriptionJobRequest request = new StartTranscriptionJobRequest();
    request.withLanguageCode(LanguageCode.EnUS);

    Settings channel_settings = new Settings();
    channel_settings.setChannelIdentification(true);
    channel_settings.withChannelIdentification(true);

    Media media = new Media();
    media.setMediaFileUri(s3.getUrl(bucket, guid).toString());
    request.withMedia(media);
    request.setTranscriptionJobName(jobName);
    request.withMediaFormat(getFileFormat(guid));
    request.withSettings(channel_settings);
    asyncClient.startTranscriptionJobAsync(request, new AsyncTranscriptionJobHandler());
}

//异步处理方法

private class AsyncTranscriptionJobHandler implements AsyncHandler<StartTranscriptionJobRequest, StartTranscriptionJobResult>
{
    public void onError(Exception e) {
        System.out.println(e.getMessage());
        System.exit(1);
    }

    @Override
    public void onSuccess(StartTranscriptionJobRequest request, StartTranscriptionJobResult result) {
        logger.log(result.getTranscriptionJob().getTranscriptionJobName());
        TranscriptionJob transcriptionJob = result.getTranscriptionJob(); 
        if (transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.COMPLETED.name())) {
            logger.log("completed");
        } else if(transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.FAILED.name())) {
            logger.log("failed");
        } else if(transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.IN_PROGRESS.name())) {
            logger.log("processing");
        }

    }
}

最佳答案

这里的技巧是不要等待转录完成,而是在一个 lambda 中调用它,然后在转录完成后触发另一个 lambda。

AWS Transcribe 使用 CloudWatch Events 来通知作业何时完成或失败 ( https://docs.aws.amazon.com/transcribe/latest/dg/cloud-watch-events.html ),这是 lambda 支持的事件源 ( https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html#supported-event-source-cloudwatch-events )

关于java - AWS 转录过程完成后调用另一个 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53069974/

相关文章:

java - URLConnection 的 InputStream 中的数据不完整

Java多维数组

amazon-web-services - "Invalid lambda function"尝试配置 SES 电子邮件接收规则时

java - AWS Transcribe Java SDK : Internal Failure. 请重试您的请求

amazon-web-services - AWS Lex 是否使用 AWS Transcribe 作为 ASR 来进行提示识别?

java - 多种键盘响应/功能

java - 将字符串日期转换为 ISO 格式日期

java - 当用户注册时,Amazon cognito 是否会自动检查他们的电子邮件是否已存在?

python-3.x - 从 lambda 函数调用 cloudformation

java - 转码器和转录 SDK。我还需要 SQS 吗?