In safari on iOS 14.6, the navigator.mediaDevices devicechange event (https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/devicechange_event) gets called repeatedly as long as a bluetooth headset is connected to the iOS device. The event stops firing as soon as the bluetooth headset is disconnected. Observed with AirPods Pro and Bose QC35 connected to iPhone. This may have started with the release of iOS 14.5. That's the first time we started hearing customer complaints about airpods with our webRTC implementation.
<rdar://problem/79228964>
For an additional data point - airpods pro only cause this loop when connected and in your ears. When removed from ears (not put back in case yet) the event loop stops.
I'm also able to reproduce this error on my iPad mini 4 on iOS 14.8. When I plug in wired headphones on a page that has the users MediaStream from getUserMedia() being displayed, the "devicechange" event is being fired very frequently. When the headphones are unlplugged the "devicechange" event stops firing.
This works for me on iOS 15.5 beta using this fiddle: https://jsfiddle.net/48utwfkh/ Marking as Configuration changed, please reopen otherwise.