elixir-webrtc / ex_webrtc

An Elixir implementation of the W3C WebRTC API
Apache License 2.0
267 stars 8 forks source link

Roadmap #28

Open mickel8 opened 7 months ago

mickel8 commented 7 months ago

0.1.0 (01.2024)

Media reading/writing:

PeerConnection API:

Documentation:

0.2.0 (04.2024)

RTCP related:

ICE features:

0.3.0 (07.2024)

UX improvements/features:

Integrations:

Fishjam:

Broadcaster improvements:

0.4.0 (08.2024)

Website

Broadcaster

ExWebRTC

UX

Others

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

davydog187 commented 6 months ago

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

mickel8 commented 6 months ago

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 commented 6 months ago

33 also adds AV1 to the default video codecs

lovebes commented 4 months ago

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

LVala commented 4 months ago

@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.

ris-work commented 4 months ago

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.

mickel8 commented 3 months ago

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!

ris-work commented 3 months ago

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!

type1fool commented 1 month ago

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.