節省成本並獲得更多功能 AWS Elemental MediaConvert
MediaConvert 是一項較新的檔案型視訊轉碼服務,提供全方位的進階轉碼功能,按需費率從每分鐘 $0.0075 起。閱讀更多
已經使用 Amazon Elastic Transcoder? 遷移到 MediaConvert. 如需詳細資訊,請參閱此概觀
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
處理 Elastic Transcoder 中的錯誤
當您將請求發送到 Elastic Transcoder API 並從中獲取響應時,可能會遇到兩種類型的 API 錯誤:
-
用戶端錯誤:用戶端錯誤是以 4xx HTTP 回應代碼表示。客戶端錯誤表示 Elastic Transcoder 發現客戶端請求存在問題,例如身份驗證失敗或缺少必需的參數。您必須先修正用戶端應用程式中的問題,再重新提交請求。
-
伺服器錯誤:伺服器錯誤是以 5xx HTTP 回應代碼表示,且須由 Amazon 解決。您可以重新提交/重試請求,直到成功為止。
對於每個 API 錯誤,Elastic Transcoder 都會返回以下值:
-
狀態代碼 (例如
400
) -
錯誤代碼 (例如
ValidationException
) -
錯誤訊息 (例如
Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
)
如需 Elastic Transcoder 針對用戶端和伺服器錯誤傳回的錯誤碼清單,請參閱API 錯誤代碼 (用戶端和伺服器錯誤)。
此外,您有可能會遇到錯誤,而 Elastic Transcoder 正在處理您的工作。如需詳細資訊,請參閱處理任務時發生錯誤。
API 錯誤代碼 (用戶端和伺服器錯誤)
HTTP 狀態代碼表示操作是否成功。
200
回應代碼表示操作成功。其他錯誤代碼表示用戶端錯誤 (4xx) 或伺服器錯誤 (5xx)。
下表列出了 Elastic Transcoder 返回的錯誤。有些錯誤只需您重試相同的請求即可解決。表中指出哪些錯誤可能在連續重試後解決。如果 Retry (重試) 欄位的值為:
-
Yes (是):重新提交相同的請求。
-
No (否):先修正用戶端的問題,再提交新的請求。
如需重試請求的詳細資訊,請參閱錯誤重試和指數退避。
HTTP 狀態碼 | 錯誤代碼 | 訊息 | 原因 | 重試 |
---|---|---|---|---|
400 | 條件式檢查失敗例外 | 條件式請求失敗。 | 範例:預期值與系統中存放的不符。 | 否 |
400 | 簽章不完整例外 | 請求簽章未符合 AWS 標準。 | 請求中的簽章未包含所有必要元件。請參閱 HTTP 標頭內容。 | 否 |
403 | 缺少身分驗證權杖例外 | 請求必須包含有效 (已註冊) 的 AWS 存取金鑰 ID。 | 請求未包含所需的 x-amz-security-token 。請參閱 向 Elastic Transcoder 提出 HTTP 請求。 |
否 |
400 | 驗證例外 | 多種。 | 請求中一或多個值缺少或無效;例如,值為空白或是大於有效值上限。 | 否 |
403 | AccessDenied 例外 |
|
您嘗試刪除系統預設集、呼叫 Elastic Transcoder API 的簽章無效,或使用者未獲授權執行作業。 |
否 |
404 | ResourceNot 發現異常 |
|
範例:您嘗試增加任務的管道不存在或仍在建立中。 | 否 |
409 | 資源 InUse 異常 |
|
範例:您嘗試正在使用中的管道。 | 否 |
429 | 超出限制例外 |
|
目前的 AWS 帳戶已超過 Elastic Transcoder 物件的限制。如需詳細資訊,請參閱Elastic Transcoder 管線、作業和預設集的數量限制。 | |
429 | 超出佈建的傳輸量例外 | 您已超出允許的佈建傳輸量上限。 |
範例:您的請求率太高。適用於 Elastic Transcoder 的 AWS 開發套件會自動重試收到此例外狀況的請求。除非您的重試佇列太大而無法完成,否則您的請求最後會成功。減少請求的頻率。如需詳細資訊,請參閱錯誤重試和指數退避。 如果您透過輪詢來判斷請求的狀態,請考慮使用通知來判斷狀態。如需詳細資訊,請參閱任務狀態通知。 |
是 |
429 | 調節例外 | 請求率超過允許的輸送。 |
您提交請求 (例如建立新任務的請求) 的速度太快。 如果您透過輪詢來判斷請求的狀態,請考慮使用通知來判斷狀態。如需詳細資訊,請參閱任務狀態通知。 |
是 |
500 | 內部錯誤 | 伺服器在嘗試滿足請求時發生內部錯誤。 | 伺服器在處理您的請求時發生錯誤。 | 是 |
500 | 內部伺服器錯誤 | 伺服器在嘗試滿足請求時發生內部錯誤。 | 伺服器在處理您的請求時發生錯誤。 | 是 |
500 | 內部服務例外 | 服務在嘗試滿足請求時發生意外的例外。 | 是 | |
500 | 服務無法使用例外 | 服務目前無法使用或是繁忙中。 | 在處理您的請求時,伺服器發生意外錯誤。 | 是 |
錯誤回應範例
以下 HTTP 回應表示 inputBucket
的值為 null (非有效的值)。
HTTP/1.1 400 Bad Request x-amzn-RequestId: b0e91dc8-3807-11e2-83c6-5912bf8ad066 x-amzn-ErrorType: ValidationException Content-Type: application/json Content-Length: 124 Date: Mon, 26 Nov 2012 20:27:25 GMT {"message":"1 validation error detected: Value null at 'inputBucket' failed to satisfy constraint: Member must not be null"}
處理任務時發生錯誤
當 Elastic Transcoder 在處理工作時遇到錯誤時,它會以兩種方式報告錯誤:
-
Job 狀態和輸出狀態:Elastic Transcoder 將
Job:Status
失敗輸出的Outputs:Status
物件和物件設定為Error
。此外,Elastic Transcoder 會將失敗輸出的Outputs:StatusDetail
JSON 物件設定為解釋失敗的值。 -
SNS 通知:如果您將管道設定為「Elastic Transcoder」在處理期間發生錯誤時傳送 SNS 通知,則 Elastic Transcoder 會以下列格式包含通知中的 JSON 物件:
{ "state" : "PROGRESSING|COMPLETED|WARNING|ERROR", "errorCode" : "
the code of any error that occurred
", "messageDetails" : "the notification message you created in Amazon SNS
", "version" : "API version that you used to create the job
", "jobId" : "value of Job:Id object that Elastic Transcoder returns in the response to a Create Job request
", "pipelineId" : "value of PipelineId object in the Create Job request
", "input" : {job Input settings
}, "outputKeyPrefix" : "prefix for file names in Amazon S3 bucket
", "outputs": [ {applicable job Outputs settings
, "status" : "Progressing|Complete|Warning|Error" }, {...} ], "playlists": [ {applicable job playlists settings
} ], "userMetadata": { "metadata key
": "metadata value
" } }
errorCode 的值 |
messageDetails 的值 |
原因 |
---|---|---|
1000 | 驗證錯誤 | 處理作業時,Elastic Transcoder 會判斷要求中的一或多個值無效。 |
1001 | 相依性錯誤 | EElastic Transcoder 無法生成播放列表,因為它遇到了一個或多個播放列表依賴項的錯誤。 |
2000 | 無法擔任角色 | Elastic Transcoder 不能承AWS Identity and Access Management擔在管線中為此工作的Role 物件中指定的角色。 |
3000 | 未分類的儲存錯誤 | |
3001 | 輸入不存在 | 不存在具有您在此任務 Input:Key 物件中所指定名稱的檔案。該檔案必須存在於此任務的管道InputBucket 物件中指定的 Amazon S3 儲存貯體中。 |
3002 | 輸出已存在 | 已存在具有您在此任務 Outputs:Key (或 Output:Key ) 物件中所指定名稱的檔案。該檔案不能存在於管道中為此任務的OutputBucket 物件中指定的 Amazon S3 儲存貯體中。 |
3003 | 沒有讀取權限 | 在管道中您用於此任務的Role 物件中指定的 IAM 角色,沒有從包含要轉碼之檔案的 Amazon S3 儲存貯體讀取的權限。 |
3004 | 沒有寫入權限 | 在管道中您用於此任務的Role 物件中指定的 IAM 角色,無權寫入您想要儲存已轉碼檔案或縮圖檔案的 Amazon S3 儲存貯體。 |
3005 | 儲存貯體不存在 | 指定的 S3 儲存貯體不存在:儲存貯體 = {1}。 |
3006 | 沒有寫入權限 | Elastic Transcoder 無法將密鑰 = {1} 寫入桶 = {2},因為密鑰與存儲桶不在同一區域 |
4000 | 錯誤的輸入檔案 | 您在此工作的Input:Key 物件中指定的檔案格式是 Elastic Transcoder 目前不支援的格式。 |
4001 | 錯誤的輸入檔案 | 您在此任務的 Input:Key 物件中指定的檔案寬度 x 高度,超過允許的寬度 x 高度上限。 |
4002 | 錯誤的輸入檔案 | 您在此任務的 Input:Key 物件中指定的檔案大小,超過允許的大小上限。 |
4003 | 錯誤的輸入檔案 | Elastic Transcoder 無法解譯您在此工作的其中一個Outputs:Watermarks:InputKey 物件中指定的檔案。 |
4004 | 錯誤的輸入檔案 | 您在此任務的其中一個 Outputs:Watermarks:InputKey 物件中指定的檔案寬度 x 高度,超過允許的寬度 x 高度上限。 |
4005 | 錯誤的輸入檔案 | 您為 {1} 個對象之一指定的文件大小超過允許的最大大小:桶 = {2},密鑰 = {3},大小 {4},最大大小 = {5}。 |
4006 | 錯誤的輸入檔案 | Elastic Transcoder 無法對輸入文件進行轉碼,因為格式不受支持。 |
4007 | 未處理的輸入檔案 | Elastic Transcoder 遇到一種通常受支持的文件類型,但無法正確處理文件。此錯誤會自動開啟支援案例,我們已開始研究問題的原因。 |
4008 | 錯誤的輸入檔案 |
潛在原因是預設集和輸入檔案不相符。範例包括:
|
4009 | 錯誤的輸入檔案 | EElastic Transcoder 無法將所有專輯封面插入輸出檔案,因為您超過了圖稿串流的最大數量。 |
4010 | 錯誤的輸入檔案 | Elastic Transcoder 無法解釋您指定的圖形文件AlbumArt:Artwork:InputKey 。 |
4011 | 錯誤的輸入檔案 | Elastic Transcoder 檢測到嵌入式藝術品流,但無法解釋它。 |
4012 | 錯誤的輸入檔案 | 您為 AlbumArt:Artwork 指定的影像,超過允許的寬度 x 高度上限:4096 x 3072。 |
4013 | 錯誤的輸入檔案 | 內嵌專輯封面的寬度 x 高度,超過允許的寬度 x 高度上限:4096 x 3072。 |
4014 | 錯誤的輸入 | 您為剪輯片段的開始時間指定的值是在輸入檔案結束之後。Elastic Transcoder 無法創建輸出文件。 |
4015 | 錯誤的輸入 | Elastic Transcoder 無法生成清單文件,因為生成的段不匹配。 |
4016 | 錯誤的輸入 | Elastic Transcoder 無法使用 {2} 從 {1} 解密輸入文件。 |
4017 | 錯誤的輸入 | AES 金鑰已使用 {2} 位元加密金鑰加密。AES 僅支援 128、192 和 256 位元的加密金鑰。MD5 = {1}。 |
4018 | 錯誤的輸入 | Elastic Transcoder 無法使用 MD5= {1} 解密加密密鑰 |
4019 | 錯誤的輸入 | Elastic Transcoder 無法使用 KMS 金鑰 ARN {0} 產生資料金鑰。 |
4020 | 錯誤的輸入 | 進行 AES-128 加密時,您的金鑰必須為 128 位元。MD5 = {1},{2} 位。 |
4021 | 錯誤的輸入 | 對於 PlayReady DRM,您的金鑰必須為 128 位元。MD5 = {1},強度 = {2} 位元。 |
4022 | 錯誤的輸入 | {1} 指定媒體檔案的合併大小超過允許的大小上限:儲存貯體 = {2},size = {3}。 |
4023 | 錯誤的輸入 | 為串連指定的 {1} 個輸入檔案不會建立與指定預設集具有一致解析度的輸出。您可以使用具有不同 PaddingPolicy 、SizingPolicy 、MaxWidth 和 MaxHeight 設定的預設集。 |
4024 | 錯誤的輸入 | 為串連指定的 {1} 個輸入檔案不會建立與指定預設集具有一致解析度的縮圖。您可以使用具有不同 PaddingPolicy 、SizingPolicy 、MaxWidth 和 MaxHeight 設定的縮圖。 |
4025 | 錯誤的輸入 | 至少有一個媒體檔案 (輸入 # {1}) 與其他媒體檔案不相符。所有媒體檔案都必須包含影片或不包含影片。 |
4026 | 錯誤的輸入 | 至少有一個媒體檔案 (輸入 # {1}) 與其他媒體檔案不相符。所有媒體檔案都必須包含音訊或不包含音訊。 |
4100 | 錯誤的輸入檔案 | Elastic Transcoder 檢測到嵌入式字幕軌道,但無法解釋它。 |
4101 | 錯誤的輸入檔案 | Elastic Transcoder 無法解譯 Amazon S3 儲存貯體 = {1} 的指定標題檔案,key = {2}。 |
4102 | 錯誤的輸入檔案 | Elastic Transcoder 無法解釋指定的標題文件,因為它不是 UTF-8 編碼:Amazon S3 存儲桶 = {1},鍵 = {2}。 |
4103 | 錯誤的輸入檔案 | Elastic Transcoder 無法處理您的所有字幕軌道,因為您超過了字幕軌道的最大數量 {1}。 |
4104 | 錯誤的輸入檔案 | 當最大值為 4 時,Elastic Transcoder 無法生成主播放列表,因為所需的輸出包含 {1} 個嵌入式字幕。 |
4105 | 錯誤的輸入檔案 | Elastic Transcoder 無法嵌入字幕軌道,因為 CEA-708 不支援影格速率 {1}-僅支援影格速率 [29.97, 30]。 |
4106 | 錯誤的輸入檔案 | Elastic Transcoder 無法嵌入您的字幕軌道,因為格式 {1} 僅支持 {2} 個字幕軌道。 |
9000 | 內部服務錯誤 | |
9001 | 內部服務錯誤 | |
9999 | 內部服務錯誤 |
截獲錯誤
為使您的應用程式能夠順暢執行,您需要內建邏輯來截獲並回應錯誤。典型的方法是在 try
區塊或 if-then
陳述式內實作您的請求。
AWS 開發套件會執行自己的重試和錯誤檢查。如果您在使用其中一個 AWS 開發套件時發生錯誤,則會看到錯誤代碼和說明。您也會看到 Request ID
值。該Request ID
值可以幫助解決 Elastic Transcoder 支持的問題。
以下範例使用適用於 Java 的 AWS 開發套件來刪除 try
區塊內的一個項目,並使用 catch
區塊來回應錯誤。在這種情況下,它警告請求失敗。該範例使用 AmazonServiceException
類別來擷取有關任何操作錯誤的資訊,包括 Request ID
。該範例還使用 AmazonClientException
類別,以防是因為其他原因導致請求不成功。
try { DeleteJobRequest request = new DeleteJobRequest(jobId); DeleteJobResult result = ET.deleteJob(request); System.out.println("Result: " + result); // Get error information from the service while trying to run the operation } catch (AmazonServiceException ase) { System.err.println("Failed to delete job " + jobId); // Get specific error information System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); // Get information in case the operation is not successful for other reasons } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means"+ " the client encountered " + "an internal error while trying to " + "communicate with Elastic Transcoder, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); }
錯誤重試和指數退避
網路上有許多元件 (例如 DNS 伺服器、交換器、負載平衡器和其他項目) 可以在指定請求之生命週期中的任何階段產生錯誤。
一般在網路環境中處理這些錯誤回應的技術,就是在用戶端應用程式中實作重試。此技術可以提高應用程式的可靠性,並降低開發人員的營運成本。
每個支援 Elastic Transcoder 的 AWS 開發套件都會實作自動重試邏輯。適用於 Java 的 AWS 開發套件會自動重試請求,而且您可以使用 ClientConfiguration
類別進行重試設定。例如,在某些情況下,網頁以最低延遲發出請求且不允許重試,您可能會想要關閉重試邏輯。使用 ClientConfiguration
類別並提供 maxErrorRetry
價值 0
,即可關閉重試。
如果您不要使用 AWS 開發套件,則應該重試收到伺服器錯誤 (5xx) 的原始請求。不過,用戶端錯誤 (4xx,非 ThrottlingException
或 ProvisionedThroughputExceededException
) 指出您需要先修訂請求本身更正問題,然後再試一次。
注意
如果您要輪詢以確定請求的狀態,並且 Elastic Transcoder 返回錯誤代碼為Provisioned Throughput Exceeded
Exception
或的 HTTP 狀態碼 429Throttling Exception
,請考慮使用通知而不是輪詢來確定狀態。如需詳細資訊,請參閱任務狀態通知。
除了簡單的重試,建議採用指數退避演算法,以獲得更佳的流程控制。指數退避的背後概念是,對於連續錯誤回應,讓重試之間的等待時間漸進拉長。例如,您可以經過 1 秒再進行第一次重試,經過 4 秒再進行第二次重試,經過 16 秒再進行第三次重試,以此類推。不過,在一分鐘之後,如果請求未成功,則問題可能是硬性限制,而不是請求率。例如,您可能已達到所允許的管道數量上限。設定大約一分鐘停止的最大重試次數。
以下是展示重試邏輯的工作流程。工作流程邏輯首先會判斷錯誤是否為伺服器錯誤 (5xx)。接著,如果錯誤是伺服器錯誤,代碼會重試原始請求。
currentRetry = 0 DO set retry to false execute Elastic Transcoder request IF Exception.errorCode = ProvisionedThroughputExceededException set retry to true ELSE IF Exception.httpStatusCode = 500 set retry to true ELSE IF Exception.httpStatusCode = 400 set retry to false fix client error (4xx) IF retry = true wait for (2^currentRetry * 50) milliseconds currentRetry = currentRetry + 1 WHILE (retry = true AND currentRetry < MaxNumberOfRetries) // limit retries