Releases: pion/webrtc
The HUNT Begins
After 5 months of work (and lots of distraction) the Pion team is excited to announce the release of v2.2.0
!
This release includes.
New Features
DataChannel Performance Improvements
Thanks to hard work by @enobufs Datachannels have gotten a huge performance improvement. In some cases you will see a 16x improvement in throughput. You can read more about his fantastic work here
Extend SettingEngine to support SFU use cases
Pion WebRTC is seeing lots of usage in building SFUs. To support this the SettingEngine has been extended to add even more options. You now have the following flags you can configure
- SetEphemeralUDPPortRange You can limit the range of UDP ports used to support restrictive networks
- SetInterfaceFilter You can exclude some interfaces from being used.
- SetNAT1To1IPs Allows you to set a static IP to replace all host candidates. Useful if you are behind a DNAT, and don't want to make a STUN request for each PeerConnection.
- SetNetworkTypes You can blacklist TCP, UDP, IPv4 or IPv6. Useful if you know certain configurations will never work.
- SetLite Enables ICE lite, a minimal version of the ICE protocol. Reduces complexity in situations where full ICE isn't needed like a publicly routeable SFU.
Thank you @seppo0010, @AeroNotix, @enobufs and @trivigy for your work on this
TCP TURN Support
Pion WebRTC now supports creating allocations via UDP, TCP and TLS. Implemented by @enobufs
PCM Support
Pion WebRTC now supports sending and receiving PCM.
Renegotiation
You can now Add/Remove tracks at anytime, and renegotiate! We have add a new minimal example called play-from-disk-renegotation that demonstrates this behavior. This example allows you to play a video back from disk multiple times, and you can stop the individual instances at any time!
Add IVFReader
We now have a Go implementation of an .ivf
Demuxer. This allows users to easily playback files from disk. Pion also provides an IVFWriter, so you could easily save a file to disk and play it back later. Implemented by @justinokamoto
VP9 Support
You can now send and receive VP9. Implemented by @at-wat
Next Release
The next release will contain lots of bugfixes and other improvements, but the general goals for the next 6 months are.
Better Stats
Pion WebRTC is seeing lots of usage for load testing and measuring WebRTC servers. We are going to work on implement as many webrtc-stats as possible, after that we are going to explore building a framework on top of the PeerConnection API that makes load testing easier. We also want to make it easier to measure things in production, have an application that is easy to build deploy to production that can measure how your service is behaving will help a lot of users.
Better Media
Pion WebRTC lacks a in-tree JitterBuffer and Congestion Control. Users like ion right now have to implement it themselves. In the future Pion WebRTC will allow users to pass their own implementations (because they know their needs best), but provide some default implementations.
Better Performance
We are going to start measuring allocations, create real benchmarks and working on getting them better. We then need to add these benchmarks to CI and make sure they never regress.
Beyond Heretic
The Pion team is excited to announce the v2.1.0
release of Pion WebRTC. This release represents 3 months of feature development and testing across a variety of Pion projects. The headline features are:
TURN Support
Thanks to @enobufs Pion WebRTC now has full TURN support. This has been tested against multiple Open Source and hosted TURN providers.
Stats
@hugoArregui has added support for webrtc-stats. This initial implementation collects stats related to the PeerConnection, DataChannels, ICECandidates and ICECandidatePairs. The status and remaining work is being tracked in #610
mDNS Host Candidates
WebRTC has added mDNS candidates to help with privacy when using WebRTC, you can read the RFC here. We are able to parse and connect to these candidates. Currently we don't generate them, but in the future we will make this controllable by the user.
vnet
Pion WebRTC now implements a virtual network layer. You can read more about it here. This feature allows people to construct networks that only exist in software. This will allow users to simulate real world network conditions simulating NATs, packet loss, bandwidth and jitter without every actually sending a packet. Thanks to this feature written by @enobufs we have fixed multiple bugs in pion/turn
and pion/ice
already!
Trickle ICE
Trickle ICE is now available! This is controlled by the SettingEngine. We will make this the default in Pion v3
since it is a breaking change, and is not apparent to the user via an API change. Thank you @trivigy and @hugo for all your work on this.
Quest for the Sigil
This is the third public release of pion-WebRTC, thanks for trying it out!
We hope you have as much fun using it and we did making it. Thank you so much to
everyone that contributed, the code and bug reports of the community are what makes it all possible.
This release adding the following features
-
Raw RTP Input
You can now supply RTP packets directly. Instead of parsing and rebuilding packets you can just forward.
This should improve performance for this use case, and will make code simpler. Implemented by Michael MacDonald -
Allow adding Trickle-ICE candidates
ICE candidates can now be added at any time, making pion-WebRTC compatible with WebRTC implementations that use trickle ICE like Chromium and FireFox. Implement by Michael MacDonald -
Implement RTCP Reception
The API now provides code to emit and handle RTCP packets, allowing you to build applications that
interact and emit RTCP packets. Implemented by Woodrow Douglass -
Transport refactor
The internals of pion-WebRTC have been completely rewritten. This allows us to move subsystems to their own packages, cleaner code and fixed bugs along the way! Soon we should be able to provide ICE, SRTP, SCTP and more libraries for general use. We also now can explore alternative APIs like ORTC. Implemented by Michiel De Backker -
Go native DTLS
We are now 100% Go, removing our last C dependency (OpenSSL) We also now are able to provide a DTLS implementation to the greater community and are really excited about all the opportunities it opens up. Implemented by Michiel De Backker and Sean DuBois -
Improve SRTP code and add auth tag checking
Fixed a bug where wrong SRTP keys were used, in some cases video would fail to decode. Also expanded the SRTP code to do tag checking
Implemented by Tobias Fridén -
Add go-fuzz support to RTCP, and discovered crash in RTP code
Implemented by Max Hawkins
We ship with the following demos you can base your application off of.
data-channels
Shows how to use DataChannels and send/receive data to your browsergstreamer-receive
Shows how to receive video and play or process it via GStreamergstreamer-send
Shows how to generate video via GStreamer and send it to your browserjanus-gateway/streaming
Shows how to use connect to a Janus streaming mountpoint and save to an ivf containerjanus-gateway/video-room
Shows how to use connect to a Janus video-room and publish videopion-to-pion
Shows to communicate between two Pion instance using DataChannels, no browser required!save-to-disk
Shows how to receive VP8 from your browser and save to an ivf containersfu
Shows how to broadcast a video to many peers, while only requiring the broadcaster to upload once
To see what features are planned in the future, please see our roadmap
Aliens of Gold
This is the second public release of pion-WebRTC, thanks for trying it out!
Hopefully you have as much fun using it and we did making it
This release adding the following features
- Full ICE. pion-WebRTC is able to be controlling or controlled and can connect to itself.
- DataChannels. pion-WebRTC can now send and receive messages via SCTP DataChannels.
- RTCP. pion-WebRTC now is able to send and receive RTCP, making it a great building block for building things like an SFU.
We also ship with the following demos you can base your application off of.
data-channels
Shows how to use DataChannels and send/receive data to your browsergstreamer-receive
Shows how to receive video and play or process it via GStreamergstreamer-send
Shows how to generate video via GStreamer and send it to your browserjanus-gateway
Shows how to use connect to a Janus streaming mountpoint and save to an ivf containerpion-to-pion
Shows to communicate between two Pion instance using DataChannels, no browser required!save-to-disk
Shows how to receive VP8 from your browser and save to an ivf containersfu
Shows how to broadcast a video to many peers, while only requiring the broadcaster to upload once
To see what features are planned in the future, please see our roadmap
Planet Strike
This is the first public release of pion-WebRTC. Thank you for checking it out!
pion-WebRTC is not finished, but ships with the following features
- Send and receiving audio and video
- Go Native SRTP
- DTLS via OpenSSL (we still require Cgo just for this, but will be rewritten soon)
- ICE-lite (requires that pion-WebRTC is run on a public IP, or communicates with in a LAN)
We also ship with the following demos you can base your application off of.
gstreamer-send
Shows how to generate video via GStreamer and send it to your browsergstreamer-receive
Shows how to receive video and play or process it via GStreamersave-to-disk
Shows how to receive VP8 from your browser and save to an ivf container
To see what features are planned in the future, please see our roadmap