在尝试使用PHP SDK推送转码作业时,我们在最后一天开始遇到一个有趣的错误:

'Aws\ElasticTranscoder\Exception\ElasticTranscoderException' with message 'Error executing "CreateJob" on "https://elastictranscoder.us-east-1.amazonaws.com/2012-09-25/jobs"; AWS HTTP error: Client error: 400 ValidationException (client): Playlists '64k' is a duplicate of an output key. - {"message":"Playlists '64k' is a duplicate of an output key."}' in /var/www/html/app/1.0/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:152

我们推送到Elastic Transcoder的设置:

'PipelineId'      => $this->config['pipeline_id'],
        'OutputKeyPrefix' => "$prefix/",
        'Input'           => [
            'Key' => "uploads/$input_filename.$input_extension",
        ],
        'Playlists'       => [
            'OutputKeys' => [$bitrate],
            'Name'       => $bitrate,
            'Format'     => 'HLSv4',
        ],
        'Outputs'         => [
            'PresetId'        => $preset_id,
            'Key'             => $bitrate,
            'SegmentDuration' => '9.0',
        ],

其中 $bitrate'64k' ,转码作业的(目标)最终结果创建文件: 64k.ts2776938464k_v4.m3u8 .

我的第一个想法可能是由于前缀已经存在而导致S3键冲突,但即使在清除输出桶之后,错误仍然存在 . 据我所知, 64k.ts64k.m3u8 在S3中被视为不同的对象 .

在这种情况下,重复输出键是指S3对象还是转码作业中的冲突?

更多信息:将 Playlists:Name 更改为除比特率之外的任何内容, $bitrate . '_v3' ,似乎可以防止错误 . 我仍然可以使用指定的前缀进入输出桶,并将 64k_v3.m3u8 重命名为 64k.m3u8 ,没有任何问题 . 在这种情况下,为什么Elastic Transcoder会阻止创建名为 64k.m3u8 的播放列表?