如何将曲目重新添加到RTCRtpPeerConnection的RTCRtpSender,而不是创建新的/第二个RTCRt



我已经完善了现有webRTC/SIP javascript API的前端,它运行良好,但我在保持/恢复的基础API中发现了一个错误,这导致我不得不深入研究webRTC的东西,这远远超出了我的舒适区。

事实上,呼叫工作。如果我将呼叫挂起,我可以看到我的RTCPeerConnection有一个发送方,并且该发送方的跟踪变为空。我有一个RTCRtpTransceiver;停止";状态SIP服务器确认挂起。这是用";removeTrack(("发件人的。当我去恢复调用时,API调用;addTrack(("在对等连接上。现在我有两个RTCRtpSender和两个RTCRTpTransceiver,曲目显示在每个的第二个下面。实际的用户体验是远程音频恢复,但我的麦克风永远不会回到通话中。

我的理解是,我希望mediaStreamTrack重新连接到原始的RTCRtpSender,对吧?在这里,有条件重用发送者,但这并没有发生;我对原始API源代码的阅读使其看起来像是希望重新附加到现有的发送方:https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addTrack

我试着做的一件事是发布一个";stop(("到RTCRtpTransceiver,但这实际上导致到SIP服务器的连接失败,并且它发送回保持失败的ack。

我无法使用setStreams取得任何进展,而replaceTrack需要进行足够的切换,以使事情异步化,我还不想继续这样做。

我完全承认webRTC的事情超出了我的想象;我们添加了诸如AD集成和一些DB之类的东西来存储聊天/呼叫历史记录,但消除API处理WebRTC内容的错误对我来说有点遥不可及

有人对如何处理这件事有什么建议吗?这很棘手,因为我们不能公开我们的演示,但我可以提供调试。

来源在这里,从406开始:https://github.com/L1kMakes/sipml5-ng/blob/master/src/tinyMEDIA/src/tmedia_session_jsep.js

解决方案正在切换到replaceTrack。我需要清理一下,但这个原型可以工作:

const sender = this.o_pc.getSenders()[0];
const track = This.o_local_stream.getTracks()[0];
sender.replaceTrack(track)
.then(() => {
console.log("tmedia_session_jsep - resume - Successful Stream Replace!");
})
.catch( e => console.log("tmedia_session_jsep - resume - Error: " + e));
this.o_pc.getTransceivers()[0].direction = "sendrecv";

最新更新