Per developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState the "disconnected" state can trigger intermittently and resolve on its own. However, c2mp-peer.js lumps that state together with a failure:
else if (self.pc.iceConnectionState === "disconnected" || self.pc.iceConnectionState === "failed" || self.pc.iceConnectionState === "closed")
So, state changes to "disconnected" can trigger pre-mature disconnects. "Failed" and "closed" cover the cases where we'd want to explicitly disconnect, so it should be safe to simply ignore the "disconnected" state change:
else if (self.pc.iceConnectionState === "failed" || self.pc.iceConnectionState === "closed")
Firefox seems to change the iceConnectionState to "disconnected" much more frequently than Chrome. Making the change above has resulted in a lot more stable connections with Firefox.