1 of 37

P I O N

2 of 37

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

亢少军

徐志强

湖北捷智云技术有限公司

3 of 37

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

4 of 37

WHAT IS WEBRTC?

5 of 37

E2E Secure Connection between Peers

Multiple Audio/Video Tracks

Binary Data

- Can be lossy

- Can be unordered

- Multiple distinct DataChannels

2

Protocol for Browsers

6 of 37

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)

- ?

7 of 37

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

8 of 37

BUILT WITH PION

9 of 37

5

Formant

10 of 37

6

Formant (Diligent)

11 of 37

7

Formant (BP)

12 of 37

8

Formant (Naïo Technologies)

13 of 37

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

14 of 37

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

15 of 37

11

Coder.com

16 of 37

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

17 of 37

13

LiveKit

Comes with batteries included

  • High performance SFU
  • Client SDKs for JS, React, iOS, Android, and Flutter
  • Up & running in minutes

Flexible and production-ready

  • Powering drones, spatial offices, tele-operations, virtual worlds
  • Cloud-native, deploys via Kubernetes
  • OSS with an awesome community

OSS platform for real-time audio/video

18 of 37

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

19 of 37

15

Kerberos.io

20 of 37

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

21 of 37

17

Neverinstall

22 of 37

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

23 of 37

19

Ecobee

24 of 37

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

25 of 37

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

26 of 37

22

PiePacker

27 of 37

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

28 of 37

24

haia.live

29 of 37

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

30 of 37

26

Strivecast

31 of 37

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`

32 of 37

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

33 of 37

29

Yous.ai

34 of 37

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)

35 of 37

github.com/pion/awesome-pion

We want to share your projects!

31

Even more projects

36 of 37

Empower those helping the internet!

Gain deep WebRTC knowledge

A fun challenge where you pick the goals

32

Pion needs you

37 of 37

github.com/pion

pion.ly/slack

twitter.com/_pion

33