SDP offer丢失时如何恢复AWS Kinesis WebRTC连接
核心机制说明
KVS信令通道的SDP offer采用单次投递即消费的逻辑:只要信令服务把offer推送给当前在线的master客户端、成功触发sdpOffer事件,这条offer就会从服务端队列里永久删除,不会留存、也不会重复投递。
你碰到的刷新页面后收不到旧offer的问题完全符合这个机制:master刷新页面时旧的信令连接直接断开,已经投递给旧页面实例、还没来得及生成返回answer的offer,不会再重新投递给新建立连接的master实例,看起来就像被旧会话“吞掉”了一样。
场景正确处理方式
不建议viewer端固定间隔无脑重发offer,会造成不必要的信令开销,还可能打乱两端的SDP协商状态,按以下逻辑处理就能覆盖所有异常场景:
- master端初始化完成、信令客户端成功连接通道后,立刻通过信令通道的自定义消息能力,给同通道的viewer端发送一条约定好的重发请求消息,告知对端自己当前已就绪、可以接收offer
- viewer端除了首次进入页面发送初始SDP offer之外,额外监听自定义消息事件,一旦收到master发来的重发请求,立刻生成最新的SDP offer发送,不需要等固定时间间隔
- viewer端发送offer后启动10~15秒的超时计时器,如果计时结束还没收到对应SDP answer,直接判定本次offer协商失败,重新生成新offer发送即可,超时阈值可以根据自身业务的网络情况调整
- 两端都监听WebRTC的ICE连接状态,一旦状态变为
failed或者disconnected且持续10秒没有恢复,直接由viewer端触发offer重发流程,master端收到新offer后正常返回answer即可
offer丢失的判断依据
不需要依赖服务端的特殊回执,本地通过两个条件就能准确判断之前发送的offer已经丢失:
- 发送offer后超过预设的超时阈值,没有收到对应的SDP answer
- 收到对端发来的offer重发请求
两个条件触发任意一个,直接重发新offer即可,不需要额外做复杂的状态校验。
内容的提问来源于stack exchange,提问作者fblundun
相关产品推荐
相关产品推荐

