断流、重试与任务结束

普通 URL 直播与 RTC 使用不同的拉流和终止机制。不要将一次连接中断直接等同于任务结束。

普通 URL 直播

录制进程退出后,服务在未主动停止时最多执行 5 次录制尝试;相邻尝试等待 2、4、6、8 秒。每次尝试还包含拉流和等待耗时。HTTP chunk 结束只描述某种传输情况,不是所有直播协议的统一结束判据。

尝试耗尽并被判定为终止后,服务按回调配置发送 stream-closed 并结束任务;回调失败可能再次通知。正常片段审核与回调是另一条流程,恢复期间可能暂停。

RTC 房间与频道

RTC 由平台入房、媒体录制、空闲和退出事件决定是否结束。ZEGO 音频静默与房间空闲退出不同;Agora 在频道无远端用户时计时;TRTC 在无活跃录制用户时计时。具体 idleTimeMillis 和平台开关见提交接口。不要套用普通直播的重试次数或时长。

结束摘要与原因码

新版 stream-closed 回调增加结果摘要和 endReason,完整字段见断流回调。summaryComplete=false 表示摘要没有等待全部在途审核,尾段与迟到结果仍可在通知之后返回;不能收到通知后立即忽略后续片段。

endReason 含义
retry_exhausted 普通 URL 直播已确认录制尝试次数耗尽。
recorder_stopped RTC 录制已停止,不能据此断言用户退房、鉴权过期或某个 SDK 错误。
unknown 没有可确认的终止条件。

最近录制诊断

lastRecordingReason 可选,仅普通 URL 直播返回已归类的诊断码。该诊断可能来自早前失败的重试,后续尝试可能成功;因此与 endReason 分开解释。没有可用诊断时省略,不返回原始错误、凭证或鉴权参数。

lastRecordingReason 含义
stream_ended / stream_idle 流结束或源端空闲断开。
network_dns / network_timeout / network_connection 域名解析、网络超时或连接异常。
http_4xx / http_5xx 源地址返回相应 HTTP 错误,不进一步推断为鉴权过期。
invalid_input / codec_error / missing_stream / no_output 输入、编码、缺少媒体流或本次录制未产出数据;no_output 不代表整个任务从未收到媒体。
output_io / killed / process_crash / terminated 录制输出失败、进程被杀死、崩溃或收到终止信号。
expected_stop 最近诊断记录为预期停止,不改变主动停止的通知约定。
scheduler_rejected / process_start_failed / process_wait_interrupted / process_state_error / recording_exception 录制启动或执行异常。

主动停止与重新提交

业务结束时调用停止接口。主动停止不承诺发出断流回调,也不会撤回已发出的审核回调。停止后需要等待录制收尾和任务清理,再提交新配置。断流后是否重新发起审核由业务决定,重复提交仍可能命中原任务去重记录。

断流回调格式与应答