Quobis / ecn-aware-webrtc

This repository will used to gather all the join efforts to implement a working demo with pion/webrtc and meetcho/janus-gateway which take advantage of congestion notification in an ECN-aware network
0 stars 0 forks source link

Initial demo definition #1

Open antonroman opened 2 years ago

antonroman commented 2 years ago

This issue is aimed at defining the initial scenario which will be tested.

This diagram below shows the scenario: GDoc diagram link

Please, feel free to propose any modification in the diagram.

The demo involves the elements below:

  1. Janus gateway as a SFU server. It will be able to receive and process RTCP RFC8888 feedback to use the congestion information to choose the optimal simulcast layer in the VideoRoom plugin.
  2. Subscriber client application using Pion library modified to support ECN.
  3. Publisher application running on FF or Chrome to publish simulcast video.

A tentative list of tasks to be done to get this demo working would be:

  1. Pion: Being able to receive ECN bits in Pion (both ECN support and CE marks).
  2. Pion: Generate RFC8888 RTCP to notify congestion to the sender when it is detected in ECN bits.
  3. Janus: Parse RFC 8888 RTCP and generate event to notify the plugin.
  4. Janus: Modify videoroom plugin to react upon congestion events choosing a lower bitrate simulcast layer.
  5. Prepare publisher application (I guess Meetcho guys will have something which can be re-used for this)
  6. Quobis: Prepare environment to deploy the demo.
  7. Quobis: Provide tools to test the demo in a simulated "ECN-aware" network.

Please, this is just a draft, feel free to add/remove/modify the tasks and create the corresponding issues at your convenience.

Thanks a lot! Any feedback is welcome.

antonroman commented 2 years ago

Just for the record, in a conversation with @lminiero we agreed they will start working on the following issues (some of them will correspond to issues in janus-gateway repo since they are going to be integrated in the project):

  1. integrate ccfb support in SDP negotiation;
  2. add ability to parse the new ccfb messages;
  3. keep track of the feedback we receive on all the streams;
  4. somehow process the collected feedback on a regular basis, to figure out if there's congestion to notify (or no congestion anymore to notify?) plugins about;
  5. new core-plugin communication pattern to allow plugins to be notified about these changes;
  6. new Admin API request to simulate a congestion starting or stopping for a specific connection (by setting the ECN flags accordingly as a router along the way would);
  7. a couple of web pages for the demo part.