使用ElasticTranscoder gem创建转码任务时出现模糊BadRequest错误
问题原因及解决方案
1. 核心错误:Elastic Transcoder客户端端点配置错误
你当前初始化客户端时指定的endpoint是S3服务的地址,而非Elastic Transcoder的服务端点,导致请求被发送到错误的服务接口,直接触发Aws::ElasticTranscoder::Errors::BadRequest错误。
通常情况下无需手动指定endpoint参数,AWS SDK会根据你配置的region自动匹配对应区域的Elastic Transcoder服务端点。如果你需要手动指定,us-west-2区域的Elastic Transcoder端点为https://elastictranscoder.us-west-2.amazonaws.com。
2. 多输入任务参数校验
你传入了2个输入文件需要拼接输出,还要确认参数结构符合API要求:
- 如果你使用的AWS SDK for Ruby版本较新,多输入任务的输出字段建议使用复数形式
outputs,值为数组,把现有output对象放到数组中即可 - 确认你使用的预设ID
1351620000001-000010(系统默认H.264 1080p预设)与输入文件的编码兼容性没有问题
修改后的参考代码
# 初始化客户端时删除错误的endpoint配置即可 client = Aws::ElasticTranscoder::Client.new( access_key_id: Rails.application.credentials.aws_s3_access_key_id, secret_access_key: Rails.application.credentials.aws_s3_secret_access_key, region: Rails.application.credentials.aws_s3_region ) params = {:pipeline_id=>"xxxxxxxxxxxxx-xxxxxx", :inputs=> [{:key=>"test/folder1/0.mp4", :frame_rate=>"auto", :resolution=>"auto", :aspect_ratio=>"auto", :interlaced=>"auto", :container=>"auto"}, {:key=>"test/folder1/1.mp4", :frame_rate=>"auto", :resolution=>"auto", :aspect_ratio=>"auto", :interlaced=>"auto", :container=>"auto"}], # 多输入场景下用outputs数组包裹输出配置 :outputs=>[{:key=>"final.mp4", :preset_id=>"1351620000001-000010"}]} client.create_job(params)
其他可排查项
- 确认输入文件
test/folder1/0.mp4、test/folder1/1.mp4确实存在于管道绑定的输入S3存储桶中 - 确认Elastic Transcoder的服务角色拥有对应S3存储桶的读写权限
内容的提问来源于stack exchange,提问作者Konrad Janczyk
相关产品推荐
相关产品推荐

