P I O N
Contributors (339!)
18871002288 3Byuan Aaron France Adam Kiss adamroach Adam Roach adwpc aggresss agnek akil Aleksandr Aleksandr Arofikin Aleksandr Kulagin Aleksandr Razumov aler9 Alexander Kozhevnikov Alexander Panko Alex Browne Alexey Kravtsov Alex Harford AlexWoo(武杰) alvarowolfx andrefsp Andrei Nistor Andrew N. Shalaev Anindya Chatterjee Antoine Baché Artur Shellunts Assad Obaid Ato Araki Atsushi Watanabe avxit a-wing Ayush Rajguru backkem baiyufei Bao Nguyen Benny Daon Ben Weitzman Billy Lindeman bjdgyc Bjørn Remseth bkim BN Bo Shi Bragadeesh Brendan Abolivier Brendan Rius bshihr buptczq cameronej Cameron Elliott Carson Hoffman Cecylia Bocovich Cedric Fung Cédric Verstraeten cgojin Chad Retz Chao Yuan | chenkaiC4 Chris Hiszpanski Christian Muehlhaeuser Christopher Fry Clayton McCray CloudWebRTC cnderrauber Cory Schwartz cszdlt cyannuk Daniel Beseda Daniele Sluijters Daniel Truong David-dp- David Hamilton David Zhao Dean Eigenmann Dean Sheather debiandebiandebian decanus Denis digitalix donotanswer Doug Cone earle Egon Elbre Emir Aganovic Eric Daniels EricSong ernado ezzghhe feixiao f-fl0 ffmiyo folbrich fossabot frank Gabor Pongracz Gareth Hayes ged Graham King Greg Burd greko Guilherme Haiyang Wang Hanjun Kim harkirat singh Harrison Hayden James Hendrik Hofstadt Henry Herman Banken hn8 Hongchao Ma Hugo Arregui | igolaizola Igor German Ilya Mayorov imalic3 Ingmar Wittkau Issac Trotts Ivan Egorov Ivelin Ivanov JacobZwang Jadon Bennett Jake B Jake Coffman Jamie Good Jannis Mattheis Jason Jason Brady Jason Maldonis Jeffrey Barron Jeffrey Stoke Jeff Tchang Jerko Steiner Jeroen de Bruijn Jerry Tao Jim Wert Jin Gong jinleileiking Johannes Horn John Berthels John Bradley John R. Bradley jonah zheng Jonathan Jackson Jonathan Müller Jon Lundy JooYoung Jorropo jose nazario Josh Bleecher Snyder Joshua Obasaju Jozef Kralik Julien Salleyron Juliusz Chroboczek Justin Okamoto Kazuyuki Honda Kegan Dougal Kevin De Jong Kevin King Kevin McConnell Kevin Wang Kgothatso Ngako Konstantin Chugalinskiy Konstantin Itskov korymiller1489 krishna chiatanya Kushagra Mehta | Kuzmin Vladimir Kyle Carberry Lander Noterman lawl Leeward Bound Levin Du lllf Lukas Herman Lukas Rezek Luke Luke Curley Luke S Luke Strickland lxb Maanas Royy Magnus Wahlstrand Manish marcnnn Markus Markus Tzoe Marouane Masahiro Nakamura Mathis Engelbart Matthew Starkey Max Hawkins Maxim Oransky mchlrhw Meelap Shah Mészáros Mihály M.H.Zarei Michael MacDonald Michael Uti Michael Zabka Michiel De Backker Mike Coleman Mindgamesnl mission-liao Moises Marangoni Muhammad Salar Khan mxmCherry Nam V. Do Nevio Vesic Nick Mykins Nico Nikita Konev Nikola Novakovic nindolabs Noah Shrader Norman Rasmussen notedit Novel Corpse Nurdism o0olele oasangqi | obasajujoshua31 Ogundele Olumide Okamoto Oleg Kovalov oliverpool Olumide Ogundele Onwuka Gideon opennota Ori Bernstein OrlandoCo pascal-ace Pascal Benoit Patrick Lange Patryk Rogalski phil romanov PhVHoang Pieere Pi Pion pythexcel q191201771 Quentin Renard Rafael Viscarra rahulnakre Raphael Derosso Pereira Raphael Randschau Ravi Malleboina Reese renovate[bot] Renovate Bot rob-deutsch Robert Eperjesi Robin Raymond Rob Lofthouse Roman Romanenko ronan RunningMan Rupesh Singh Ryan Gordon Ryan Shumate salmān aljammāz Sam Lancia Sean DuBois Sean Knight Sebastian Waisbrot Sergey Kamardin Serhii M Seth Kimmel Shahin Sabooni Shinichi Ishimura Sidney San Martín simonacca-fotokite Simone Gotti Simon Eisenmann Slugalisk SnaiCrys songjiayang soolaugust | spaceCh1mp Stefan Tatschner Steffen Vogel Steve Suhas Gaddam Suzuki Takeo sylba2050 TannerGabriel tarrencev Tarrence van As Teddy Thomas Miller Tim Su Tobias Fridén Toby DiPasquale Tom Berger Tom Clift Tomek Tom Sundstrom Travis James Tristan Matthews Tushar Tripathi Twometer Vadim Vadim Filimonov Valentin Cocaud vashish1 Venkatesh Prasad Vicken Simonian Vic Ramon Vladislav Yarmak vrngupta53 wattanakorn495 wawesomeNOGUI Will Forcey Will LE Will Watson Winlin Woodrow Douglass xsbchen XuanTung95 yed podtrzitko Y.Horie yueming Yuki Igarashi Yukinari Toyota yusuke Yusuke Nakamura Yutaka Takeda ZHENK zhongqin0820 zhq zigazeljko Zizheng Tai 亢少军 徐志强 湖北捷智云技术有限公司 |
Provide software in Go to make building RTC easier
* WebRTC (ICE/DTLS/SRTP/SCTP) Implementation
* SFU/Media/TURN Server
* getUserMedia for desktops/servers/mobile
* More!
Non-commerical/driven by individual contributors
1
Community project for RTC
WHAT IS WEBRTC?
E2E Secure Connection between Peers
Multiple Audio/Video Tracks
Binary Data
- Can be lossy
- Can be unordered
- Multiple distinct DataChannels
2
Protocol for Browsers
3
And More!
- aiortc (Python)
- GStreamer’s webrtcbin (C)
- werift (Typescript)
- Pion (Golang)
- Shiguredo (Erlang)
- |pipe| (Java)
- rawrtc (C++)
- webrtc-rs (Rust)
- AWS WebRTC (C/Embedded)
- ?
4
WebRTC for the Curious
Book on how WebRTC really works
- Not just about the public APIs!
- Deep dive on protocols
History of WebRTC
- Interviews with RFC authors
WebRTC in practice
- Debugging every piece
- Teach the sharp edges
BUILT WITH PION
5
Formant
6
Formant (Diligent)
7
Formant (BP)
8
Formant (Naïo Technologies)
9
Fast+Simple build and deploy
Simple Build
- No dependencies or build chain manage
- Cross Compile just define platform+architecture
- Static Binary
Fast!
- examples/broadcast builds in 0.945 seconds (i5-2520M ~2011)
- rtsp-bench serves ~25 thousand viewers on m4.2xlarge
10
Full control of video streaming
Input/Output is RTP or Unpacketized Media
- Relay other protocols (RTSP, RTMP, SRT, X11 or file from disk)
- Connect and capture WebRTC sources
Interceptors (Pluggable, Chainable Media Pipeline)
- NACK, Sender Report, Receiver Report, TWCC… or not
- Disable/modify for performance? You know your needs best
11
Coder.com
12
Browser API Consistency
Predictable
- Similar to JavaScript WebRTC APIs
- Logic matches existing JavaScript examples for easy debugging
WebAssembly Support
- Potential to use our implementation in the browser
- Enables one codebase that handles all of Coder’s networking
13
LiveKit
Comes with batteries included
Flexible and production-ready
OSS platform for real-time audio/video
14
Easy to customize and improve
Extensible architecture
- Ability to go beyond standard WebRTC capabilities
- Interfaces makes it easy to customize & extend
Straight forward to contribute to
- Incredible community with diverse expertise
- Worked together to add UDPMux, WebRTC on a single port
- A well-run community project
15
Kerberos.io
16
Learn WebRTC while building
Documentation
- GoDoc for WebRTC API
- Split across multiple single purpose repos (ICE, DTLS, RTCP…)
You need to understand WebRTC, but not overwhelmed by it
- Pion doesn’t abstract WebRTC, but makes it easier to learn
17
Neverinstall
18
Active Community
Code Health
- Large set of contributors
- Not driven by a single contributor or company
More then software
- WebRTC for the Curious
- awesome-pion
Community
- Slack, 2000 members help debugging and interesting conversation
- Twitter, project updates and Pion news
19
Ecobee
20
Prototype to Production
Great for prototyping
- Rapid Development
- Allowed code re-use from backend/web platforms
With tuning went to production
- Golang was written right to the firmware
- Require some tuning, Go has first class tooling
21
Designed to Debug
Comprehensible Code
- Go is designed to be a simple language to read/modify
- golangci-lint ensures we don’t write clever/complex code
Consistent Logging
- Setting environment variables allows (trace/debug/info) logging
- Every subsystem uses same logging. Debug DTLS/ICE/RTP...
22
PiePacker
23
CGo
Provide or call C APIs
- Call C APIs, supports cflags/pkg-config
- with no additional libraries or steps
Provide C APIs
- Provide a shared object + header
- After entrypoint you can use anything Go
24
haia.live
25
Written in Go
Go is the language of Cloud/Web
- Lots of services are already written in Go
- No context switching between languages saves lots of time
- Integration between different languages can be fragile
Easy to learn
- Designed to be maintainable at scale
- C style, statically typed and memory safe
26
Strivecast
27
Examples for easy start
Simple examples of common use cases
- RTP -> WebRTC
- WebRTC -> RTP
- Saving/Playing from Disk
- SFU
- DataChannel
- Simulcast
Can be fetched/built with single command
- `go install github.com/pion/webrtc/examples/rtp-to-webrtc@latest`
28
Robust
Low defect rate
- Unit Coverage @ 80%
- E2E Tested against Chrome/libwebrtc every commit
- sipsorcery/webrtc-echoes tested against SFUs/Implementations
Semantic Versioning
- Pion is tracked with major.minor.patch
- Go requires all dependencies are pinned
29
Yous.ai
30
Extendable
Write your own code easily
- RTP/RTCP allows integration with other libraries
- cloudwebrtc/go-sip-ua doesn’t use Pion, but easily integrates
Pion implements stdlib interfaces
- DTLS/DataChannel/ICE implement io.Reader
- You can just these objects to other libraries (Like a SSH client)
github.com/pion/awesome-pion
We want to share your projects!
31
Even more projects
Empower those helping the internet!
Gain deep WebRTC knowledge
A fun challenge where you pick the goals
32
Pion needs you
33