ex_webrtc icon indicating copy to clipboard operation
ex_webrtc copied to clipboard

Roadmap

Open mickel8 opened this issue 1 year ago • 12 comments

0.1.0 (01.2024)

Media reading/writing:

  • [x] IVF reader/writer - #29 #44
  • [x] Ogg reader/writer - #43 #50
  • [x] VP8 RTP packetizer/depacketizer - #30 #45
  • [x] Opus RTP packetize/depacketizer - #47 #53
  • [x] Sending from a file (without RTCP) - #30 #37 #39

PeerConnection API:

  • [x] Closing PeerConnection #40
  • [x] Renegotiation - #55 #59
  • [x] addTrack #38
  • [x] removeTrack #49
  • [x] Stopping transceivers #55
  • [x] Tests for failing negotiation because of unsupported codecs - #48 #61

Documentation:

  • [x] Documentation and typespec improvements - #57
  • [x] Transceiver guide - #56

0.2.0 (04.2024)

  • [x] Initial benchmarks https://github.com/elixir-webrtc/bench/pull/1

RTCP related:

  • [x] RTCP Sender and Receiver Reports - #77 #78 #81
  • [x] TWCC Feedbacks - #63
  • [x] NACKs and RTX - #90 #101

ICE features:

  • [x] ICE mDNS (client-side) https://github.com/elixir-webrtc/ex_ice/pull/28 https://github.com/elixir-webrtc/ex_ice/pull/27
  • [x] ICE relay candidates elixir-webrtc/ex_ice#33

0.3.0 (07.2024)

  • [x] Inbound Simulcast #111
  • [x] Benchmarks and profiling

UX improvements/features:

  • [x] User-friendly media/codec/extension configuration #120
  • [x] ICE port range configuration https://github.com/elixir-webrtc/ex_ice/pull/43
  • ~Better logs~

Integrations:

Fishjam:

  • ~Experimental WebRTC Endpoint using Elixir WebRTC~

Broadcaster improvements:

  • [x] Viewer count https://github.com/elixir-webrtc/apps/pull/12
  • ~Client-side ICE restarts~
  • [x] Server-side stats https://github.com/elixir-webrtc/apps/pull/11
  • [x] Simple chat https://github.com/elixir-webrtc/apps/pull/13

0.4.0 (08.2024)

Website

  • [x] A new website https://github.com/elixir-webrtc/elixir-webrtc.github.io/pull/2
  • [x] 3 demos deployed 24/h under elixir-webrtc.org https://github.com/elixir-webrtc/apps/pull/23 https://github.com/elixir-webrtc/apps/pull/27 https://github.com/elixir-webrtc/apps/pull/29 https://github.com/elixir-webrtc/apps/pull/30 https://github.com/elixir-webrtc/apps/pull/31 https://github.com/elixir-webrtc/apps/pull/32 https://github.com/elixir-webrtc/apps/pull/37
  • [x] Videoroom demo https://github.com/elixir-webrtc/apps/pull/41 https://github.com/elixir-webrtc/apps/pull/25

Broadcaster

  • [x] Chat moderation https://github.com/elixir-webrtc/apps/pull/43 https://github.com/elixir-webrtc/apps/pull/44
  • ~Recordings~
  • [x] Simulcast https://github.com/elixir-webrtc/apps/pull/22
  • [x] https://github.com/elixir-webrtc/apps/issues/34
  • [x] https://github.com/elixir-webrtc/apps/issues/35
  • [x] https://github.com/elixir-webrtc/apps/issues/36

ExWebRTC

  • [x] Support for all 3 browsers - Chromium/Chrome, Firefox, Safari #127 #149
  • [x] ICE fixes - elixir-webrtc/ex_ice#7 elixir-webrtc/ex_ice#19 elixir-webrtc/ex_ice#47 elixir-webrtc/ex_ice#48 elixir-webrtc/ex_ice#49 elixir-webrtc/ex_ice#50 https://github.com/elixir-webrtc/ex_ice/pull/55
  • [x] Examples sometimes don't load #132
  • [x] https://github.com/elixir-webrtc/ex_webrtc/issues/137
  • [x] https://github.com/elixir-webrtc/ex_webrtc/issues/144

UX

  • [x] ex_webrtc_dashboard - metrics per second #134 elixir-webrtc/ex_webrtc_dashboard#5
  • [x] Revisit Xav - https://github.com/elixir-webrtc/xav/compare/v0.4.0...v0.5.0
  • [x] Basic tutorials #136 #141
    • I ran echo example but I can't see video
    • What are RTP packets and depayloaders?
    • How to request a keyframe and when to do this?
    • etc.
  • [x] https://github.com/elixir-webrtc/ex_webrtc/issues/142
  • [x] https://github.com/elixir-webrtc/ex_webrtc/pull/151
  • [x] https://github.com/elixir-webrtc/ex_webrtc/issues/143

0.5.0 (09.2024)

  • [x] DataChannels! :tada:

Others

If you have any questions or need help with a specific topic, please create a new discussion!

  • [ ] setParameters on RTPSender
  • [ ] Support for AV1 codec, see https://github.com/elixir-webrtc/ex_webrtc/pull/35
  • [ ] Jitter buffer
  • [ ] TCP ICE
  • [ ] Support for Windows
  • [ ] ex_webrtc_dashboard - performance optimizations
  • [ ] bandwidth estimation/probing
  • [ ] telemetry (?)

mickel8 avatar Nov 29 '23 18:11 mickel8

Very interesting project! Would you consider supporting AV1 RTP encoding as well?

davydog187 avatar Dec 07 '23 18:12 davydog187

Very interesting project! Would you consider supporting AV1 RTP encoding as well?

@davydog187 of course! When it comes to the echo example we already support it! It's as easy as telling PeerConnection to negotiate AV1. Just change this line to:

        {:ok, pc} =
          PeerConnection.start_link(
            ice_servers: @ice_servers,
            video_codecs: [
              %RTPCodecParameters{
                payload_type: 45,
                mime_type: "video/AV1",
                clock_rate: 90_000
              }
            ]
          )

Besides this, we will of course add AV1 RTP payloader and depayloader so that you can pack/unpack AV1 into/from RTP packets :slightly_smiling_face:

mickel8 avatar Dec 07 '23 18:12 mickel8

#33 also adds AV1 to the default video codecs

mickel8 avatar Dec 07 '23 18:12 mickel8

This is really cool! How would this interact with Membrane Framework?

lovebes avatar Feb 14 '24 15:02 lovebes

@lovebes at some point we will wrap our ExWebRTC.PeerConnection in a Membrane sink/source, then you'll be able to send/receive media from WebRTC and pass it further into a Membrane pipeline.

LVala avatar Feb 14 '24 16:02 LVala

Thanks for this, the code looks very friendly to use, like membrane.framework! Any idea about DataChannels on the roadmap?

I work a lot with webrtc-rs and I will try to port my codebase to Elixir too, if possible. For the client side deployments, relay support is sometimes really necessary from what I have noticed, but not for servers and those who have SNAT or some properly working CGNATs. Hopefully IPv6 support will make them redundant but IPv6 is only deployed where I live, in the fiber deployments and only in new routers. My usecase only relies on DataChannels and would love to have it in a memory-safe language like Elixir or Rust.

I will eventually port everything to Elixir as it seems like things are easier to manage here over tokio and async rust, given better or equal CPU usage (BEAM is especially suited for soft-RT systems), at least on *nix.

ris-work avatar Mar 02 '24 12:03 ris-work

Hi @ris-work! Datachannels are of course on our radar but unfortunately not in 0.2. Maybe in 0.3 or 0.4. But any contributions are welcomed!

mickel8 avatar Mar 03 '24 21:03 mickel8

Hi @ris-work! Datachannels are of course on our radar but unfortunately not in 0.2. Maybe in 0.3 or 0.4. But any contributions are welcomed!

Thank you very much for the response! I will be eagerly waiting. Unfortunately, I am neither an expert in WebRTC nor Elixir (or SCTP/RTP), but thank you for considering it for an upcoming version!

ris-work avatar Mar 04 '24 21:03 ris-work

I am also excited to see this package developing so quickly.

There are a couple use cases I have in mind that would depend on data channels. For one, it would be cool to deploy gaming app with elixir-desktop, where two peers could connect directly without an external signaling server.

It's still early in my WebRTC journey, but if I can find time to support implementation, I'd be happy to do so.

type1fool avatar May 29 '24 22:05 type1fool

Hi guys, support for DataChannels just landed in version 0.5.0! We will publish a blog post next week but I wanted to let you know right now :slightly_smiling_face:

cc @ris-work @type1fool

mickel8 avatar Sep 10 '24 16:09 mickel8

Thanks @mickel8 and @LVala for this and thanks for the notification! I will start using this soon!

ris-work avatar Sep 12 '24 07:09 ris-work

And the blog post on data channels: https://blog.swmansion.com/data-channels-in-elixir-webrtc-0853c7d0e256 :)

mickel8 avatar Oct 02 '24 11:10 mickel8