ex_webrtc
ex_webrtc copied to clipboard
Roadmap
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 (?)
Very interesting project! Would you consider supporting AV1 RTP encoding as well?
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:
#33 also adds AV1 to the default video codecs
This is really cool! How would this interact with Membrane Framework?
@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.
Thanks for this, the code looks very friendly to use, like membrane.framework
! Any idea about DataChannel
s 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 DataChannel
s 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.
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!
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!
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.
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
Thanks @mickel8 and @LVala for this and thanks for the notification! I will start using this soon!
And the blog post on data channels: https://blog.swmansion.com/data-channels-in-elixir-webrtc-0853c7d0e256 :)