在尝试使用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.ts
,64k.m3u8
,64k_v4.m3u8
。
我的第一个想法可能是S3键冲突,因为前缀已经存在,但即使在清除输出桶之后,错误仍然存在。据我所知,64k.ts
和64k.m3u8
在S3中被视为不同的对象。
在这种情况下,重复的输出键是引用S3对象还是转码作业中的冲突?
更多信息:
将Playlists:Name
更改为除比特率之外的任何内容$bitrate . '_v3'
,似乎可以防止出错。我仍然可以使用指定的前缀进入输出存储区,并将64k_v3.m3u8
重命名为64k.m3u8
,没有任何问题。在这种情况下,为什么Elastic Transcoder会阻止创建名为64k.m3u8
?