0

使用 SIP.js 时重新启动 ICE 的正确程序是什么?(v0.20.0)

这就是我正在尝试的:

oniceconnectionstatechange: (event) => {

    const newState = sdh.peerConnection.iceConnectionState;
    
    if (newState == 'failed') {
    
        sdh.peerConnection.restartIce();

        sdh.peerConnection.createOffer({'iceRestart': true})
            .then(function(offer) {
                return sdh.peerConnection.setLocalDescription(offer);
            });
    }

}

它似乎执行没有错误,但也没有结果。FireFox 调试工具“about:webrtc”显示“ICE 重新启动:0”,所以我猜它甚至没有开始重新启动。

ps:失败状态是通过重新启动 RTP 引擎(Kamailio 设置)引起的。在 RTP 引擎重新启动后,音频仍然会持续大约 20 秒,并且仅当 ICE 状态更改为“失败”时音频才会停止。

4

1 回答 1

0

找到解决我的问题的解决方案:

sdh.peerConnectionDelegate = {
    oniceconnectionstatechange: (event) => {
        const newState = sdh.peerConnection.iceConnectionState;

        if (newState === 'disconnected') {
            sdh.peerConnection.restartIce();

            sdh.peerConnection.createOffer({'iceRestart': true})
                .then((offer) => {
                    sdh.peerConnection.setLocalDescription(offer);
                    session.sessionDescriptionHandlerModifiersReInvite = [offer];

                    session.invite()
                        .then(() => {
                            session.logger.debug('iceRestart: RE-invite completed');
                        })
                        .catch((error) => {
                            if (error instanceof RequestPendingError) {
                                session.logger.error('iceRestart: RE-invite is already in progress');
                            }
                            throw error;
                        });
                });
        }
    }
};
于 2022-01-31T16:29:54.113 回答