检查转码服务状态
本文介绍如何检查云端转码服务的启动和运行状态,以确保转码过程正常进行。
检查服务启动状态
建议你通过如下步骤检查转码服务是否已成功启动:
检查 Acquire 和 Create 的调用方式
检查你是否在每次 Acquire 请求获取到 builderToken 后的 2 秒内都立即发起对应的 Create 请求。
如果你批量获取 builderToken,再进行批量 Create 请求,可能会请求失败。
检查 Create 请求结果
如果 Create 请求响应的 HTTP 状态码为 200,则请求成功。如果 Create 请求响应的 HTTP 状态码非 200,则需要根据状态码采取相应措施:
- 如果返回的 HTTP 状态码为
206,则表示请求超时,建议使用退避策略,如第一次等待 3 秒后重试、第二次等待 6 秒后重试、第三次等待 9 秒后重试,以免超过 QPS 限制导致失败。如果三次重试均失败,建议更换 UID 再次调用Acquire, 获得一个新的builderToken,并用该builderToken再次调用Create方法。 - 如果返回的 HTTP 状态码为
409,则表示转码任务已成功启动并在进行中,无需重试。 - 如果返回的 HTTP 状态码为
40x(409除外),则表示请求参数错误,需要进行排查。 - 如果返回的 HTTP 状态码为
50x,可使用相同的参数重试多次,直到成功返回taskId为止。建议使用退避策略,如第一次等待 3 秒后重试、第二次等待 6 秒后重试、第三次等待 9 秒后重试,以免超过 QPS 限制导致失败。如果三次重试均失败,建议更换 UID 再次调用Acquire, 获得一个新的builderToken,并用该builderToken再次调用Create方法。 - 如果收到错误码
65,需要使用相同的参数再次调用Create。建议使用退避策略重试两次,如第一次等待 3 秒后重试、第二次等待 6 秒后重试。
检查 idleTimeout 取值
Create 请求中的 idleTimeout 字段默认值为 300 秒。这意味着,在所有主播离开频道后,transcoder 将在 300 秒后自动销毁。
调用 Create 启动转码时,请根据实际情况调整 idleTimeout 的值,以确保转码服务在短时间内频道没有主播时依然能稳定运行,避免频繁退出。如果需要 transcoder 持续运行,建议设置较大的 idleTimeout,以防止因主播进出频道导致 transcoder 频繁启动和退出。
查询服务启动状态
Create 请求成功后,你会获得 taskId。获得 taskId 之后的 5 秒后,使用退避策略调用 Query 方法查询服务启动状态。退避间隔建议小于 Create 请求中的 idleTimeout (最长空闲频道时间)。
- 如果
Query请求成功,且serverResponse中的status参数值为4或5,则表示 transcoder 已成功启动。 - 如果在获得
taskId之后的 90 秒后,查询的status仍非4或5, 则可以认为 transcoder 在创建后未成功启动,超时退出。
重试时,请注意:
- 频道内用户 UID 不能冲突,因此建议你为 transcoder 准备一个备用 UID,以便在重新发起新的转码任务时使用。
- 主用 UID 和备用 UID 可以交替使用。
检查服务运行状态
你可以通过周期性调用 Query 方法来确认转码服务正在进行中且状态正常。如果你对状态查询的可靠性要求较高,声网强烈建议你使用 Query 方法周期性查询频道内的转码状态,例如每隔 2 分钟调用一次 Query,并根据返回的 HTTP 状态码采取相应措施。
- 如果返回的 HTTP 状态码一直为
40x,则表示请求参数错误,需要进行排查。 - 如果返回的 HTTP 状态码为
404,且已经确认请求参数无误,则表示 transcoder 并未成功启动、或启动后中途退出。建议采用退避策略多次调用Query(例如间隔 5 秒、10 秒、15 秒)进行确认。 - 如果返回的 HTTP 状态码为
50x,则表示Query请求失败,但尚不明确 transcoder 是否已退出。出现50x错误的概率极小,建议使用退避策略 (例如间隔 5 秒,10 秒,15 秒,30 秒) 继续调用Query。
参考信息
通过 Query 方法查询服务状态时,你可以参考响应包体中 services.cloudTranscoder.status 字段:
| 服务状态 | 描述 |
|---|---|
"serviceIdle" | 服务未开始。 |
"serviceStarted" | 服务已开始。 |
"serviceReady" | 服务已就绪。 |
"serviceInProgress" | 服务正在进行中。 |
"serviceCompleted" | 服务已经停止,任务全部完成。 |
"servicePartialCompleted" | 服务已经停止,任务部分完成。 |
"serviceValidationFailed" | 服务参数验证失败。 |
"serviceAbnormal" | 服务异常退出。 |
"serviceUnknown" | 服务未知状态。 |