共计 2290 个字符,预计需要花费 6 分钟才能阅读完成。
概述:点播转码目前涉及用户上传自动触发转码、通过 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 卡住,无任何转码结果返回,这种视频通常建议用户排查推流端设置问题。