Implements a WebRTC extension alwaysNegotiateDataChannels which defines a way for the application to negotiate data channels in the SDP offer before creating a datachannel. This also negotiates the data m= section before any audio or video m sections and uses it as the "offerer-tagged m= section" for [BUNDLE]. This means that const pc = new RTCPeerConnection({ alwaysNegotiateDataChannels: true}); const offer = await pc.createOffer(); will create an offer with an application m-line in the SDP and that const pc = new RTCPeerConnection({ alwaysNegotiateDataChannels: true}); pc.addTranceiver('audio'); pc.createDataChannel('somechannel'); const offer = await pc.createOffer(); will create an offer that negotiates an application m-line follow by an audio m-line in the SDP.