2. Thank You
Aaron France
Adam Kiss
Aleksandr Razumov
Alex Browne
Alex Harford
AlexWoo(武杰)
Antoine Baché
Ato Araki
Atsushi Watanabe
Brendan Rius
Cecylia Bocovich
Chao Yuan
Chris Hiszpanski
Christopher Fry
CloudWebRTC
Daniele Sluijters
Denis
Gareth Hayes
Guilherme
Hongchao Ma
Hugo Arregui
Igor German
Ingmar Wittkau
Jadon Bennett
Jake B
Jason Maldonis
John Bradley
Justin Okamoto
Konstantin Itskov
Lander Noterman
Lukas Herman
Lukas Rezek
Luke Curley
Marouane
Max Hawkins
Michael MacDonald
Michiel De Backker
Mike Coleman
Mészáros Mihály
Oleg Kovalov
Rafael Viscarra
Raphael Derosso Pereira
Raphael Randschau
Robert Eperjesi
RunningMan
Ryan Gordon
Sean DuBois
Sebastian Waisbrot
Slugalisk
Stefan Tatschner
Steve
Suhas Gaddam
Tobias Fridén
Vicken Simonian
Will Watson
Woodrow Douglass
Yutaka Takeda
Zizheng Tai
adwpc
chenkaiC4
earle
feixiao
frank
igolaizola
imalic3
jinleileiking
jose nazario
mchlrhw
mxmCherry
notedit
rob-deutsch
ronan
simonacca-fotokite
songjiayang
spaceCh1mp
sylba2050
wattanakorn495
xsbchen
zigazeljko
Clayton McCray
Hendrik Hofstadt
Luke S
Bao Nguyen
Konstantin Chugalinskiy
3. 1
What is this talk
Go programmer
fi
guring out real-time networking
This is the evolution of my understanding
If you are familiar with these topics please reach
out! I still have a lot to learn
4. 2
What is WebRTC
RTP (rfc1889) over ICE (rfc8445)
Media packetized for UDP Datagrams
Needs to be sub-second, minimal buffering
6. 3
Avoiding The Problem
WebRTC can mostly be implemented via RFCs
- SDP, ICE, SRTP, RTP/RTCP all in IETF
Bandwidth Estimation isn’t as clear
IETF RMCAT exists, but didn’t
fi
nd a conclusion
Space is still evolving/more complicated problem?
7. 4
Pion doesn’t work in X network
Users are complaining sharing screenshots of
broken video.
At this point all I knew was ‘UDP drops packets’
10. libwebrtc does the work
7
libwebrtc sends ‘Receiver Estimated Max Bitrate’
Pion can read that packet and act upon it
Great all
fi
xed….
11. Only solves half the problem
8
What if Chrome is sending the video?
I don’t know what numbers to send in a REMB
12. libwebrtc does all the work (again)
9
Use RTCP to send ‘Receiver Reports’
- Number of Packets Lost
- Jitter (Is one way trip time smooth)
If we generate Chrome adjusts as a Sender
17. False Starts
13
Was told that GCC is best thing to use
- Spec was out of date
- SCReAM and NADA are not ‘as good’?
Maybe BBR is better since it is documented/widely
implemented?
I have no idea what I am doing….
23. Increase/Decrease Test
19
Loss-Based
- Loss < 2% Increase Bitrate
- Loss > 10% Decrease Bitrate
Delay-based
- Delay Increasing, Delay Bitrate
- Delay Decreasing, Increase Bitrate
24. Try it out!
20
We have a easy to use example
- bandwidth-estimation-from-disk
Code is in pion/interceptor
- Needs things like fast start, but works!
27. Server
Running GCC 3 Times?
22
Publisher 1 Publisher 2 Publisher 3
Viewer
Server
28. GCC on Simulcast
23
Can’t adjust the encoder
- We can add probing packets
Do we run the state machine per publisher?
- Large CPU overhead
- Large network overhead