點播轉碼相關常見問題及排查方式
概述:
點播轉碼目前涉及使用者上傳自動觸發轉碼、通過SubmitTranscodeJobs介面觸發轉碼等方式,會出現使用者轉碼失敗的情況,這當中有使用者源片的問題、也有使用者設定轉碼引數的原因以及相關資源性資料授權限制問題導致,本文主要提供點播轉碼常見的問題排查及處理方式。
HLS標準加密問題排查
SubmitTranscodeJobs介面錯誤提示:
- KeyNotFound:出現這種錯誤提示一般都是使用的加密Service Key 和視訊不在同一個區域,例如:華東2的視訊,必須使用華東2的KMS生成祕鑰。
- NoSuchResource:出現這種錯誤通常代表使用者的某種的資源缺失,可以結合message進行排查,如下所示:
1、"can not find cross service token" :表示使用者沒有通過RAM授權點播操作使用者的KMS導致,需要使用者先授權。
2、"can not find customer encrypt master key":表示在使用者對應區域的KMS中沒有拿到響應的加密Service key,可以在神農鼎生成對應區域的Service Key。
3、"can not find customer encrypt info":表示使用者傳遞的密文祕鑰不是使用KMS生成或者祕鑰生成和視訊儲存不在同一個區域,需要使用者在視訊相應區域生成加密祕鑰。
4、"can not find customer plaintext":表示使用者生成的祕鑰解密不到明文祕鑰,需要使用者使用GenerateDataKey生成加密祕鑰。
5、"The specified resource Template does not exist":表示視訊對應區域的轉碼模板資料不存在,這種問題通常是模板新增或者更新介面異常導致,可以聯絡點播後臺進行資料訂正。
其他常見問題:
- 檔案未加密:生成的檔案未加密,一般都是由於轉碼模板在設定的時候沒有選擇HLS加密選項(標準加密、私有加密必須要勾選)
- 加密轉碼失敗:視訊標準加密失敗,一般都是由於使用者在呼叫GenerateDataKey生成的祕鑰是非AES_128位的,或者祕鑰使用自定義字串生成
- 解密失敗:通常HLS標準加密成功,說明祕鑰是沒問題的,那麼解密失敗通常是由於解密介面直接將名稱祕鑰返回,實際應該是將名稱祕鑰進行base64decode解碼之後返回
- MtsHlsUriToken引數重寫失效:可能存在以下兩點問題
1、對應的域名沒有開通CDN的MtsHlsUriToken引數重寫功能,需要到CDN神農鼎設定。
2、域名開啟了鑑權,MtsHlsUriToken引數重寫和鑑權功能是互斥的。
轉碼失敗問題排查:
- 轉封裝(原畫)失敗:通常都是由於格式支援問題導致,例如:wmv、rmvb等格式不支援裝封裝成mp4;mpeg4不能轉封裝成m3u8
- 條件轉碼導致轉碼失敗:檢視使用者是否開啟對應的條件轉碼,如果開啟則表模板設定的解析度、位元速率是否大於源片的解析度或者位元速率,如果大於則模板設定是按照源片轉碼還是不轉碼,不轉碼則會以失敗的結果返回,這種是正常的轉碼處理步驟,可建議使用者修改條件轉碼閾值或者移除條件轉碼限制。
- 視訊轉碼失敗原因及排查步驟:
1、檢視源片檔案大小是否為0,這種視訊通常是沒有上傳成功但是OSS錯誤的通知底層觸發轉碼導致。
2、點播神農鼎檢視源片地址看是否可以播放,不可播放通常轉碼都會失敗,說明源片存在問題
3、使用ffprobe -show_streams -print_format json -i "檔案地址"檢視源片是否存在多個音訊流,目前轉碼還不能處理多音軌源片
4、使用ffprobe -show_streams -print_format json -i "檔案地址" 或者ffprobe -show_frames -print_format -i "檔案地址" 檢視檔案的音視訊流、幀資訊,如果存在紅色異常提示,基本上可以確定源片封裝引數存在問題,例如:源片的NAL資料問題
源片流資料有問題
源片的音視訊Codec封裝異常:Codec 為data或者binary型別
轉碼成功但檔案異常:
- 轉碼視訊變形:原因是使用者設定轉碼模板同時設定了寬和高,這樣會導致源片的畫面比例如果和設定的寬高比例不一致,就發生了形變,解決辦法是隻設定寬或者高,保持另一邊按照源片的畫面比例等比輸出。
- 視訊轉碼後時間變長:這種視訊一般都是由於源片的pkt_pts_time顯示時間過大導致,可以通過ffprobe -show_frames -print_format json -i "原始檔地址"檢視pkt_pts_time是否異常,一般都是大於源片的真實時長,正常的pkt_pts_time是均勻遞增,最大為視訊總時長。
- 視訊轉封裝成m3u8的ts分片大小差別大:一般都是源片的關鍵幀分佈不均勻導致的,可以通過檢視ffprobe -show_frames -print_format json -i "原始檔地址"命令檢視幀資訊,看key_frame=1的幀資訊中pakt_pts_time是否均勻遞增,如果非均勻一般會導致轉封裝ts切片不均勻。
- 直播轉點播有音訊無畫面:一般都是使用者側推流的前面幾個ts分片全是音訊無視訊畫面導致,而底層轉碼只會抓取前面幾個ts分片的編碼資訊,如果前面幾個ts分片無視訊流,則轉碼器只會讀取音訊流,從而導致整個視訊輸出無畫面。
其他
- 轉碼任務卡住,一直處於轉碼中:通常發生在直播轉點播錄製的視訊,這種視訊限於推流端配置的問題,導致pts_time非均勻增加,而是跳變,這種情況會導致底層轉碼ffmpeg卡住,無任何轉碼結果返回,這種視訊通常建議使用者排查推流端設定問題。