Skip to content

Projects Worth Doing

Sean DuBois edited this page Oct 3, 2025 · 4 revisions

Projects Worth Doing

This is a list of projects that pass these tests.

  • Improvements for users is clear
  • Can be completed by a single developer
  • No bikeshedding. Pion maintainers agree issue is worth solving.
  • Fun/rewarding for developer. It's a project someone can be proud of

ICE sendmmsg support

Pion sends UDP packets one at a time. Doing this send syscall is the most expensive operation happening for most Pion users. For some platforms it is possible to batch the sending of packets. We can send multiple UDP packets at one time!

This can be implemented in a few different ways, but this would be a good way to start.

  • Write a simple server that sends 4K video or maybe lots of data via DataChannel?
  • Modify pion/ice to batch and send packets every ~20ms?
  • See if that improves performance!

It's possible that sending on a timer doesn't actually help. We might have to introduce an API that allows pion/sctp pion/rtp etc... to send multiple patckets in one call.

It would be better if we could do this with no API breakage though! It's possible Go already has a idiomatic solution to this .

Issue

Implement ndata support for SCTP

SCTP uses a single sequence number when sending data. This means SCTP suffers from Head-of-line blocking. If you are trying to do high performance datachannels you are going to block on old packets that you actually don't care about!

SCTP has solved this with rfc8260. Implementing this in Pion would give a performance benefit to all DataChannel users.

Time Based SCTP Congestion Control

Currently pion/sctp uses packet loss as the only input to perform Congestion Control. If we used packet arrival times we would get more robust/faster DataChannels!

Rack for SCTP is the best thing to read on the topic. It ends with a very exciting summary.

The RACK algorithm shows a significant
improvement over the dupthresh algorithm, especially for non-
saturated connections and in the event of tail loss. The benefits
are not limited to loss. RACK is also much more resilient
against packet reordering in the network.

DTLS 1.3

Pion currently only supports DTLS 1.2 implementing 1.3 has a bunch of improvements that would help out Pion users.

  • Faster connect times (One less round trip during handshake)
  • Less overhead (Record layer is smaller)
  • Privacy (SeqNums encrypted )
  • Security (Only AEAD ciphers)

Issue

Improve ICE Candidate Selection Logic

WebRTC connection times are slower if Pion is the Controlling ICE Agent (vs the Controlled Agent). This has been filed as the following issues.

pion/webrtc#3174 pion/ice#324

If these are fixed we could reduce the connection times by 2 seconds in some cases!

Add a MPEG Transport Stream implementation to pion/webrtc

Having this in-tree would make building media projects a lot easier! Connecting WebRTC to SRT and other systems often involves having to process MPEG Transport Streams.

See pion/webrtc#3169

Finish pion/explainer

WebRTC developers are often frustrated/confused by the Offer/Answer in WebRTC. This project offers a Web UI where developers can paste in their offer/answer and then lets them interact and modify to learn more.

It might make more sense to restart this project from scratch! The project involves using Go + WASM and pion/sdp to parse and explain the values.

You can then link to webrtforthecurious.com maybe to help teach users.

Finish pion/opus

Pion Opus only provides a Silk Decoder. This will be a long project, but maybe starting with a Silk encoder is a good place.

When this is complete we could provide users with pure Go conferencing software!

Update awesome-pion

Lots of great Pion projects have been built recently. We should update https://github.com/pion/awesome-pion to show them off

Upgrade projects to v4

We should look through all the v3 importers on this page and update them to v4 if possible.

If they can't be updated to v4 we should fix the problem that is keeping them on v3!

Clone this wiki locally