WebRTC is starting to experiment with a new SCTP implementation called dcSCTP with the goal to migrate from usrsctp in the second half of this year.
The new implementation is an in-tree C++ implementation that is consistent with all other code in WebRTC. It’s designed to only implement the parts of SCTP that are used by Data Channels in WebRTC and with security as the highest priority.
By having a small, modern and well integrated SCTP implementation, it will be possible to provide a better experience for both media and data, more quickly iterate and experiment with new features and provide a better security architecture with much less cost of maintenance compared to the current setup.
In the initial release, the library is considered to be feature complete with some known limitations:
The congestion control algorithm hasn’t been fully tuned, so performance may be slightly worse compared to usrsctp, but should generally be on par.
No support for I-DATA (RFC8260). This has never been enabled in Chromium/Chrome for usrsctp and this is negotiated in the SCTP association setup.
Both will be fixed in future releases.
The library is located in //net/dcsctp and is used by the SCTP Transport at //media/sctp/dcsctp_transport.h, but please note that API stability is not yet guaranteed.
It is also available in Chrome using the feature flag --force-fieldtrials="WebRTC-DataChannel-Dcsctp/Enabled/" in Chrome Canary from version 92.0.4502.0.
We appreciate any bug reports to be filed at bugs.webrtc.org (DataChannel component) for the dcSCTP library and its transport, and at crbug.com (Blink>WebRTC>DataChannel) for bugs visible through the Chrome/Chromium JS API.
We would like to thank Michael Tüxen for all his past and current support for the usrsctp library, which has been a core component for WebRTC. We would not be the platform we are today without all of Michael's efforts.