kms-elements icon indicating copy to clipboard operation
kms-elements copied to clipboard

Feature/webrtc qos dscp

Open slabajo opened this issue 3 years ago • 0 comments

What is the current behavior you want to change?

Media Communication in Internet is subject to best effort service type and has to fight for shared resources in intermediate communication infrastructure. However there exist the DSCP/ToS mechanism that allows an easy tagging and classification of traffic that allows intermediate equipment to manage traffic differentiated and thus providing QoS networks: https://en.wikipedia.org/wiki/Differentiated_services

On RFC8837 there is a proposal to network packet markings using DSCP for WebRTC services: https://datatracker.ietf.org/doc/html/rfc8837#section-5

On modern network equipoment that honors the DSCP packet tagging, WebRTC media traffic can get better latency, priority and less packet drop probablitiy, thus enhancing overall communication quality.

What is the new behavior provided by this change?

This change implements the ability to tag WebRTC outgoing traffic from Kurento with DSCP values according to https://datatracker.ietf.org/doc/html/rfc8837#section-5 It implements an optional parameter in WebRTCEndpoint constructor, that if present will mark all outgoing network packets with the specified DSCP value. It also implements an additional configuration parameter in the WebRtcEndpoint.conf.ini configuration file that allows to specify the default DSCP value to apply to all WebRTCEndpoints when no value is specified in constructor.

Of course, this change only applies to outgoing traffic from Kurento media server, to build a complete communication, traffic from browser (or the other peer) should also be tagged accordingly. For browsers the WebRTC Priority Control API (https://www.w3.org/TR/webrtc-priority/) should be used if available.

It must be noted that DSCP markings are applied at the WebRTCEndpoint level so it applies to all streams managed by the same WebRTCEndpoint (audio, video, datachannel).

How has this been tested.

It has been tested using one of the Kurento tutorials, and taking network dumps of the packets exchanged to verify that DSCP/ToS markings have been applied corresponding to the parameter in constructor and/or configuration file.

Types of changes

  • [ ] Bug fix (non-breaking change which fixes an issue)
  • [X] New feature / enhancement (non-breaking change which improves the project)
  • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • [ ] My change requires a change to the documentation
  • [ ] My change requires a change in other repository

Checklist

  • [X] I have read the Contribution Guidelines
  • [X] I have added an explanation of what the changes do and why they should be included
  • [X] I have written new tests for the changes, as applicable, and have successfully run them locally

slabajo avatar Jul 20 '22 10:07 slabajo