点播转码相关常见问题及排查方式
概述:
点播转码目前涉及用户上传自动触发转码、通过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卡住,无任何转码结果返回,这种视频通常建议用户排查推流端设置问题。