SlideShare a Scribd company logo
WebRTC broadcasting with WHIP
Lorenzo Miniero
@elminiero
FOSDEM 2022 Real Time Communications
5th February 2022, Brussels My couch
Who am I?
Lorenzo Miniero
ā€¢ Ph.D @ UniNA
ā€¢ Chairman @ Meetecho
ā€¢ Main author of Janus
Contacts and info
ā€¢ lorenzo@meetecho.com
ā€¢ https://twitter.com/elminiero
ā€¢ https://www.slideshare.net/LorenzoMiniero
ā€¢ https://lminiero.bandcamp.com
MCU as a WebRTC topology
SFU as a WebRTC topology
A slightly variation on the theme
How ā€œtraditionalā€ broadcasting typically works
What if we want more interactivity, though?
What if we want more interactivity, though?
What if we want more interactivity, though?
What if we want more interactivity, though?
Why not WebRTC instead?
ā€¢ Traditional broadcasting efficient but higher latency
ā€¢ At best (live), delay will typically be in the range of a few seconds
ā€¢ Besides, different users may experience different delays (buffering)
ā€¢ WebRTC natively conceived for very low latency, instead
ā€¢ Born for conversational audio/video/data
ā€¢ Can be (and often is) easily used for monodirectional streaming as well
ā€¢ Strangely not really considered by the industry up until recently, though
ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€)
ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/
ā€¢ Tooling an important aspect to foster WebRTC adoption, here
ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
Why not WebRTC instead?
ā€¢ Traditional broadcasting efficient but higher latency
ā€¢ At best (live), delay will typically be in the range of a few seconds
ā€¢ Besides, different users may experience different delays (buffering)
ā€¢ WebRTC natively conceived for very low latency, instead
ā€¢ Born for conversational audio/video/data
ā€¢ Can be (and often is) easily used for monodirectional streaming as well
ā€¢ Strangely not really considered by the industry up until recently, though
ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€)
ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/
ā€¢ Tooling an important aspect to foster WebRTC adoption, here
ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
Why not WebRTC instead?
ā€¢ Traditional broadcasting efficient but higher latency
ā€¢ At best (live), delay will typically be in the range of a few seconds
ā€¢ Besides, different users may experience different delays (buffering)
ā€¢ WebRTC natively conceived for very low latency, instead
ā€¢ Born for conversational audio/video/data
ā€¢ Can be (and often is) easily used for monodirectional streaming as well
ā€¢ Strangely not really considered by the industry up until recently, though
ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€)
ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/
ā€¢ Tooling an important aspect to foster WebRTC adoption, here
ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
Why not WebRTC instead?
ā€¢ Traditional broadcasting efficient but higher latency
ā€¢ At best (live), delay will typically be in the range of a few seconds
ā€¢ Besides, different users may experience different delays (buffering)
ā€¢ WebRTC natively conceived for very low latency, instead
ā€¢ Born for conversational audio/video/data
ā€¢ Can be (and often is) easily used for monodirectional streaming as well
ā€¢ Strangely not really considered by the industry up until recently, though
ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€)
ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/
ā€¢ Tooling an important aspect to foster WebRTC adoption, here
ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
WebRTC audio: Opus
ā€¢ WebRTC mandates Opus, and itā€™s a good thing
ā€¢ High quality audio codec designed for the Internet
ā€¢ Very flexible in sampling rates, bitrates, FEC, etc.
ā€¢ Different profiles for voice and music/other
ā€¢ Both encoding and decoding vary, in case
ā€¢ Can be mono and stereo, with dynamic sampling rates and bitrates
ā€¢ Multiopus (5.1 and 7.1)1
ā€¢ Each packet is basically OGG with multiple stereo Opus streams
ā€¢ Number of streams determines number of channels
ā€¢ Not documented, but used by Google for Stadia
1
https://webrtcbydralex.com/index.php/2020/04/08/surround-sound-5-1-and-7-1-in-libwebrtc-and-chrome/
WebRTC audio: Opus
ā€¢ WebRTC mandates Opus, and itā€™s a good thing
ā€¢ High quality audio codec designed for the Internet
ā€¢ Very flexible in sampling rates, bitrates, FEC, etc.
ā€¢ Different profiles for voice and music/other
ā€¢ Both encoding and decoding vary, in case
ā€¢ Can be mono and stereo, with dynamic sampling rates and bitrates
ā€¢ Multiopus (5.1 and 7.1)1
ā€¢ Each packet is basically OGG with multiple stereo Opus streams
ā€¢ Number of streams determines number of channels
ā€¢ Not documented, but used by Google for Stadia
1
https://webrtcbydralex.com/index.php/2020/04/08/surround-sound-5-1-and-7-1-in-libwebrtc-and-chrome/
WebRTC audio: Opus
ā€¢ WebRTC mandates Opus, and itā€™s a good thing
ā€¢ High quality audio codec designed for the Internet
ā€¢ Very flexible in sampling rates, bitrates, FEC, etc.
ā€¢ Different profiles for voice and music/other
ā€¢ Both encoding and decoding vary, in case
ā€¢ Can be mono and stereo, with dynamic sampling rates and bitrates
ā€¢ Multiopus (5.1 and 7.1)1
ā€¢ Each packet is basically OGG with multiple stereo Opus streams
ā€¢ Number of streams determines number of channels
ā€¢ Not documented, but used by Google for Stadia
1
https://webrtcbydralex.com/index.php/2020/04/08/surround-sound-5-1-and-7-1-in-libwebrtc-and-chrome/
WebRTC video: Simulcasting & SVC
https://webrtchacks.com/sfu-simulcast/
WebRTC video: Simulcasting & SVC
https://webrtchacks.com/chrome-vp9-svc/
Two main challenges: ingestion...
Two main challenges: ... and distribution
(and yeah, maybe scaling too! )
Making WebRTC ingestion easy: WISH / WHIP!
https://www.meetecho.com/blog/whip-janus/ (September 2020)
Making WebRTC ingestion easy: WISH / WHIP!
https://www.meetecho.com/blog/whip-janus-part-ii/
There would be no WHIP without Dr. Alex r
A new Working Group in the IETF...
https://datatracker.ietf.org/wg/wish/about/
... and a new draft for the WHIP specification!
https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
WebRTC-HTTP ingestion protocol (WHIP)
ā€¢ HTTP-based signalling to create sendonly PeerConnections
ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response
ā€¢ Teardown of sessions using HTTP DELETE
ā€¢ Authentication and authorization via Bearer tokens
ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html
ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments
ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html
ā€¢ Everything else is your usual WebRTC!
ā€¢ ICE, DTLS, etc.
WebRTC-HTTP ingestion protocol (WHIP)
ā€¢ HTTP-based signalling to create sendonly PeerConnections
ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response
ā€¢ Teardown of sessions using HTTP DELETE
ā€¢ Authentication and authorization via Bearer tokens
ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html
ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments
ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html
ā€¢ Everything else is your usual WebRTC!
ā€¢ ICE, DTLS, etc.
WebRTC-HTTP ingestion protocol (WHIP)
ā€¢ HTTP-based signalling to create sendonly PeerConnections
ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response
ā€¢ Teardown of sessions using HTTP DELETE
ā€¢ Authentication and authorization via Bearer tokens
ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html
ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments
ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html
ā€¢ Everything else is your usual WebRTC!
ā€¢ ICE, DTLS, etc.
WebRTC-HTTP ingestion protocol (WHIP)
ā€¢ HTTP-based signalling to create sendonly PeerConnections
ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response
ā€¢ Teardown of sessions using HTTP DELETE
ā€¢ Authentication and authorization via Bearer tokens
ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html
ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments
ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html
ā€¢ Everything else is your usual WebRTC!
ā€¢ ICE, DTLS, etc.
A few sequence diagrams
A few sequence diagrams
A few sequence diagrams
A WHIP server based on Janus
ā€¢ Janus is a popular WebRTC server, so good option for WHIP
ā€¢ It implements its own JSON-based API, though (Janus API)
ā€¢ Simple (and transparent) solution: basic API translator in front of Janus
ā€¢ WHIP API maps quite simply to set of Janus API primitives
ā€¢ No need to change anything in the WebRTC stack
ā€¢ Implemented simple prototype using node.js and Express
ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly
ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL)
Simple WHIP Server
https://github.com/lminiero/simple-whip-server/
A WHIP server based on Janus
ā€¢ Janus is a popular WebRTC server, so good option for WHIP
ā€¢ It implements its own JSON-based API, though (Janus API)
ā€¢ Simple (and transparent) solution: basic API translator in front of Janus
ā€¢ WHIP API maps quite simply to set of Janus API primitives
ā€¢ No need to change anything in the WebRTC stack
ā€¢ Implemented simple prototype using node.js and Express
ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly
ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL)
Simple WHIP Server
https://github.com/lminiero/simple-whip-server/
A WHIP server based on Janus
ā€¢ Janus is a popular WebRTC server, so good option for WHIP
ā€¢ It implements its own JSON-based API, though (Janus API)
ā€¢ Simple (and transparent) solution: basic API translator in front of Janus
ā€¢ WHIP API maps quite simply to set of Janus API primitives
ā€¢ No need to change anything in the WebRTC stack
ā€¢ Implemented simple prototype using node.js and Express
ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly
ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL)
Simple WHIP Server
https://github.com/lminiero/simple-whip-server/
A WHIP server based on Janus
ā€¢ Janus is a popular WebRTC server, so good option for WHIP
ā€¢ It implements its own JSON-based API, though (Janus API)
ā€¢ Simple (and transparent) solution: basic API translator in front of Janus
ā€¢ WHIP API maps quite simply to set of Janus API primitives
ā€¢ No need to change anything in the WebRTC stack
ā€¢ Implemented simple prototype using node.js and Express
ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly
ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL)
Simple WHIP Server
https://github.com/lminiero/simple-whip-server/
Mapping WHIP interactions to the Janus API
Mapping WHIP interactions to the Janus API
Mapping WHIP interactions to the Janus API
Mapping WHIP interactions to the Janus API
Mapping WHIP interactions to the Janus API
Simple WHIP Server in action
Basic UI to create/manage endpoints
Writing a WHIP client for testing
ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack
ā€¢ Browsers are the obvious choice, but what about a native solution?
ā€¢ Many broadcasters today use custom tools (e.g., OBS)
ā€¢ Unfortunately OBS-WebRTC is not currently an option
ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion
ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose
ā€¢ Used it already with success in other applications (e.g., JamRTC)
ā€¢ Modular and very powerful, so easy to feed with external sources
Simple WHIP Client
https://github.com/lminiero/simple-whip-client/
2
https://gstreamer.freedesktop.org/documentation/webrtc/
Writing a WHIP client for testing
ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack
ā€¢ Browsers are the obvious choice, but what about a native solution?
ā€¢ Many broadcasters today use custom tools (e.g., OBS)
ā€¢ Unfortunately OBS-WebRTC is not currently an option
ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion
ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose
ā€¢ Used it already with success in other applications (e.g., JamRTC)
ā€¢ Modular and very powerful, so easy to feed with external sources
Simple WHIP Client
https://github.com/lminiero/simple-whip-client/
2
https://gstreamer.freedesktop.org/documentation/webrtc/
Writing a WHIP client for testing
ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack
ā€¢ Browsers are the obvious choice, but what about a native solution?
ā€¢ Many broadcasters today use custom tools (e.g., OBS)
ā€¢ Unfortunately OBS-WebRTC is not currently an option
ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion
ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose
ā€¢ Used it already with success in other applications (e.g., JamRTC)
ā€¢ Modular and very powerful, so easy to feed with external sources
Simple WHIP Client
https://github.com/lminiero/simple-whip-client/
2
https://gstreamer.freedesktop.org/documentation/webrtc/
Writing a WHIP client for testing
ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack
ā€¢ Browsers are the obvious choice, but what about a native solution?
ā€¢ Many broadcasters today use custom tools (e.g., OBS)
ā€¢ Unfortunately OBS-WebRTC is not currently an option
ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion
ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose
ā€¢ Used it already with success in other applications (e.g., JamRTC)
ā€¢ Modular and very powerful, so easy to feed with external sources
Simple WHIP Client
https://github.com/lminiero/simple-whip-client/
2
https://gstreamer.freedesktop.org/documentation/webrtc/
Simple WHIP Client options
Usage:
whip-client [OPTION?] -- Simple WHIP client
Help Options:
-h, --help Show help options
Application Options:
-u, --url Address of the WHIP endpoint (required)
-t, --token Authentication Bearer token to use (optional)
-A, --audio GStreamer pipeline to use for audio (optional, required if audio-only)
-V, --video GStreamer pipeline to use for video (optional, required if video-only)
-n, --no-trickle Donā€˜t trickle candidates, but put them in the SDP offer (default: false)
-f, --follow-link Use the Link headers returned by the WHIP server to automatically configure STUN/TURN servers to
use (default: false)
-S, --stun-server STUN server to use, if any (stun://hostname:port)
-T, --turn-server TURN server to use, if any; can be called multiple times
(turn(s)://username:password@host:port?transport=[udp,tcp])
-F, --force-turn In case TURN servers are provided, force using a relay (default: false)
-l, --log-level Logging level (0=disable logging, 7=maximum log level; default: 4)
Simple WHIP Client example
./whip-client -u http://localhost:7080/whip/endpoint/abc123 
-t verysecret 
-A "audiotestsrc is-live=true wave=red-noise ! audioconvert !
audioresample ! queue ! opusenc ! rtpopuspay pt=100 ! queue !
application/x-rtp,media=audio,encoding-name=OPUS,payload=100" 
-V "videotestsrc is-live=true pattern=ball ! videoconvert ! queue !
vp8enc deadline=1 ! rtpvp8pay pt=96 ! queue !
application/x-rtp,media=video,encoding-name=VP8,payload=96" 
-S stun.l.google.com:19302
WHIP client and server + Janus
Simple WHIP Client in action
Testing my WHIP client with Janus
Other WHIP implementations: servers
ā€¢ Lorenzo Miniero ā€“ Simple WHIP Server (Janus)
ā€¢ https://github.com/lminiero/simple-whip-server
ā€¢ Juliusz Chroboczek ā€“ Galene
ā€¢ https://github.com/jech/galene/tree/whip
ā€¢ Sergio Garcia Murillo ā€“ Millicast integration
ā€¢ https://millicast.com/
ā€¢ Cameron Elliott ā€“ Deadsfu
ā€¢ https://github.com/x186k/deadsfu
Other WHIP implementations: clients
ā€¢ Lorenzo Miniero ā€“ Simple WHIP Client (GStreamer)
ā€¢ https://github.com/lminiero/simple-whip-client
ā€¢ Sergio Garcia Murillo ā€“ whip-js (JavaScript)
ā€¢ https://github.com/medooze/whip-js/
ā€¢ Gustavo Garcia ā€“ whip-go (Go)
ā€¢ https://github.com/ggarber/whip-go/
ā€¢ Tim Panton ā€“ whipi (Java / Raspberry Pi)
ā€¢ https://github.com/pipe/whipi
ā€¢ Alberto Gonzalez Trastoy ā€“ free-whip (Python)
ā€¢ https://github.com/agonza1/free-whip/
ā€¢ Cameron Elliott ā€“ whip-whap-js (JavaScript)
ā€¢ https://github.com/x186k/whip-whap-js
WHIP interop tests @ IETF 112 Hackathon!
https://github.com/IETF-Hackathon/ietf112-project-presentations/blob/main/ietf112-hackathon-whip.pdf
WHIP interop tests @ IETF 112 Hackathon!
Simple WHIP Server Galene Millicast deadsfu
Simple WHIP Client
whip-js
whip-go
whipi
free-whip
whip-whap-js
Integration WHIP in broadcasting workflows
ā€¢ Old version of OBS-WebRTC did have WHIP support
ā€¢ Tested for my blog post from last year
ā€¢ Implemented legacy WHIP API, and used libwebrtc
ā€¢ No popular streamer tool supports WHIP yet, though
ā€¢ WHIP will make it easy for the signalling part...
ā€¢ ... but theyā€™ll still need a working WebRTC stack
ā€¢ Why not start with a more ā€œlooseā€ integration then?
ā€¢ Keeping on using existing tools as they work today
ā€¢ Somehow get them to work with my GStreamer-based WHIP client
Integration WHIP in broadcasting workflows
ā€¢ Old version of OBS-WebRTC did have WHIP support
ā€¢ Tested for my blog post from last year
ā€¢ Implemented legacy WHIP API, and used libwebrtc
ā€¢ No popular streamer tool supports WHIP yet, though
ā€¢ WHIP will make it easy for the signalling part...
ā€¢ ... but theyā€™ll still need a working WebRTC stack
ā€¢ Why not start with a more ā€œlooseā€ integration then?
ā€¢ Keeping on using existing tools as they work today
ā€¢ Somehow get them to work with my GStreamer-based WHIP client
Integration WHIP in broadcasting workflows
ā€¢ Old version of OBS-WebRTC did have WHIP support
ā€¢ Tested for my blog post from last year
ā€¢ Implemented legacy WHIP API, and used libwebrtc
ā€¢ No popular streamer tool supports WHIP yet, though
ā€¢ WHIP will make it easy for the signalling part...
ā€¢ ... but theyā€™ll still need a working WebRTC stack
ā€¢ Why not start with a more ā€œlooseā€ integration then?
ā€¢ Keeping on using existing tools as they work today
ā€¢ Somehow get them to work with my GStreamer-based WHIP client
Enter NDI!
https://www.meetecho.com/blog/webrtc-ndi/
https://www.meetecho.com/blog/webrtc-ndi-part-2/
What is NDI?
ā€¢ Network Device Interface (NDI)
ā€¢ Royalty-free software standard developed by NewTek
ā€¢ https://www.ndi.tv/
ā€¢ Live exchange of multimedia streams within the same LAN
ā€¢ Multichannel and uncompressed media streams (high quality)
ā€¢ mDNS used for service discovery
ā€¢ Easy to use (and integrate) native SDK
ā€¢ Available on Windows, Linux, MacOS, Android, etc.
ā€¢ VLC team working on an alternative implementation
ā€¢ Widely used in the broadcasters industry
ā€¢ Natively supported by many devices and streamer tools
What is NDI?
ā€¢ Network Device Interface (NDI)
ā€¢ Royalty-free software standard developed by NewTek
ā€¢ https://www.ndi.tv/
ā€¢ Live exchange of multimedia streams within the same LAN
ā€¢ Multichannel and uncompressed media streams (high quality)
ā€¢ mDNS used for service discovery
ā€¢ Easy to use (and integrate) native SDK
ā€¢ Available on Windows, Linux, MacOS, Android, etc.
ā€¢ VLC team working on an alternative implementation
ā€¢ Widely used in the broadcasters industry
ā€¢ Natively supported by many devices and streamer tools
What is NDI?
ā€¢ Network Device Interface (NDI)
ā€¢ Royalty-free software standard developed by NewTek
ā€¢ https://www.ndi.tv/
ā€¢ Live exchange of multimedia streams within the same LAN
ā€¢ Multichannel and uncompressed media streams (high quality)
ā€¢ mDNS used for service discovery
ā€¢ Easy to use (and integrate) native SDK
ā€¢ Available on Windows, Linux, MacOS, Android, etc.
ā€¢ VLC team working on an alternative implementation
ā€¢ Widely used in the broadcasters industry
ā€¢ Natively supported by many devices and streamer tools
What is NDI?
ā€¢ Network Device Interface (NDI)
ā€¢ Royalty-free software standard developed by NewTek
ā€¢ https://www.ndi.tv/
ā€¢ Live exchange of multimedia streams within the same LAN
ā€¢ Multichannel and uncompressed media streams (high quality)
ā€¢ mDNS used for service discovery
ā€¢ Easy to use (and integrate) native SDK
ā€¢ Available on Windows, Linux, MacOS, Android, etc.
ā€¢ VLC team working on an alternative implementation
ā€¢ Widely used in the broadcasters industry
ā€¢ Natively supported by many devices and streamer tools
Weā€™ve talked about WebRTC-to-NDI before...
What about NDI-to-WebRTC, though?
ā€¢ Thereā€™s a cool NDI plugin for GStreamer
ā€¢ Makes it easy to use NDI sources in GStreamer pipelines
ā€¢ https://github.com/teltek/gst-plugin-ndi
ā€¢ Hey, our WHIP client is based on GStreamer too!
ā€¢ Audio and video pipelines are customizable (command line)
ā€¢ NDI plugin as source for the media āˆ’ā†’ encoders/WebRTC will do the rest
ā€¢ Of course, we need something that generates NDI
ā€¢ OBS has an NDI plugin, for NDI input and output
ā€¢ https://github.com/Palakis/obs-ndi
What about NDI-to-WebRTC, though?
ā€¢ Thereā€™s a cool NDI plugin for GStreamer
ā€¢ Makes it easy to use NDI sources in GStreamer pipelines
ā€¢ https://github.com/teltek/gst-plugin-ndi
ā€¢ Hey, our WHIP client is based on GStreamer too!
ā€¢ Audio and video pipelines are customizable (command line)
ā€¢ NDI plugin as source for the media āˆ’ā†’ encoders/WebRTC will do the rest
ā€¢ Of course, we need something that generates NDI
ā€¢ OBS has an NDI plugin, for NDI input and output
ā€¢ https://github.com/Palakis/obs-ndi
What about NDI-to-WebRTC, though?
ā€¢ Thereā€™s a cool NDI plugin for GStreamer
ā€¢ Makes it easy to use NDI sources in GStreamer pipelines
ā€¢ https://github.com/teltek/gst-plugin-ndi
ā€¢ Hey, our WHIP client is based on GStreamer too!
ā€¢ Audio and video pipelines are customizable (command line)
ā€¢ NDI plugin as source for the media āˆ’ā†’ encoders/WebRTC will do the rest
ā€¢ Of course, we need something that generates NDI
ā€¢ OBS has an NDI plugin, for NDI input and output
ā€¢ https://github.com/Palakis/obs-ndi
1. Configure NDI output in OBS
2. Create your scenes in OBS
3. Setup the WHIP client to capture NDI
Ready for our demo!
Ready for our demo!
Ready for our demo!
More details in a recent CommCon talk
https://2021.commcon.xyz/talks/whip-ndi-and-janus-genesis-of-a-broadcasting-demo
Next step: broadcasting the stream
ā€¢ WHIP server + Janus get you in a VideoRoom, and itā€™s a good starting point
ā€¢ Thatā€™s the whole point of WebRTC ingest!
ā€¢ Already ā€œconsumableā€ via VideoRoom itself (SFU)
ā€¢ Janus VideoRoom plugin not really optimized for broadcasting, though
ā€¢ Conceived for videoconferencing use cases
ā€¢ Will not work well if you have to feed, e.g., 100ā€™s or 1000ā€™s
ā€¢ Janus Streaming plugin a much better choice
ā€¢ Natively optimized for doing one-to-many
ā€¢ Can receive media from VideoRoom (and so WHIP) via ā€œRTP forwardersā€
ā€¢ Even better, multiple Janus instances can work together
Next step: broadcasting the stream
ā€¢ WHIP server + Janus get you in a VideoRoom, and itā€™s a good starting point
ā€¢ Thatā€™s the whole point of WebRTC ingest!
ā€¢ Already ā€œconsumableā€ via VideoRoom itself (SFU)
ā€¢ Janus VideoRoom plugin not really optimized for broadcasting, though
ā€¢ Conceived for videoconferencing use cases
ā€¢ Will not work well if you have to feed, e.g., 100ā€™s or 1000ā€™s
ā€¢ Janus Streaming plugin a much better choice
ā€¢ Natively optimized for doing one-to-many
ā€¢ Can receive media from VideoRoom (and so WHIP) via ā€œRTP forwardersā€
ā€¢ Even better, multiple Janus instances can work together
Next step: broadcasting the stream
ā€¢ WHIP server + Janus get you in a VideoRoom, and itā€™s a good starting point
ā€¢ Thatā€™s the whole point of WebRTC ingest!
ā€¢ Already ā€œconsumableā€ via VideoRoom itself (SFU)
ā€¢ Janus VideoRoom plugin not really optimized for broadcasting, though
ā€¢ Conceived for videoconferencing use cases
ā€¢ Will not work well if you have to feed, e.g., 100ā€™s or 1000ā€™s
ā€¢ Janus Streaming plugin a much better choice
ā€¢ Natively optimized for doing one-to-many
ā€¢ Can receive media from VideoRoom (and so WHIP) via ā€œRTP forwardersā€
ā€¢ Even better, multiple Janus instances can work together
Ph.D Thesis on WebRTC broadcasting (2015)
Using SOLEIL for the purpose
ā€¢ ā€œStreaming Of Large scale Events over Internet cLoudsā€ (Ph.D Thesis)
ā€¢ In a nutshell, tree-based distribution of WebRTC feeds
ā€¢ Ingest and edges are WebRTC (Janus), everything in the middle just RTP
ā€¢ Working with RTP in intermediate layers has many advantages
ā€¢ No WebRTC overhead, and easier to route/manipulate by non-WebRTC tools
ā€¢ You can even take advantage of multicast, here
ā€¢ Just needs RTP forwarding to start everything
ā€¢ PR available in WHIP server to do RTP forwarding (merged)
ā€¢ https://github.com/lminiero/simple-whip-server/pull/2
Using SOLEIL for the purpose
ā€¢ ā€œStreaming Of Large scale Events over Internet cLoudsā€ (Ph.D Thesis)
ā€¢ In a nutshell, tree-based distribution of WebRTC feeds
ā€¢ Ingest and edges are WebRTC (Janus), everything in the middle just RTP
ā€¢ Working with RTP in intermediate layers has many advantages
ā€¢ No WebRTC overhead, and easier to route/manipulate by non-WebRTC tools
ā€¢ You can even take advantage of multicast, here
ā€¢ Just needs RTP forwarding to start everything
ā€¢ PR available in WHIP server to do RTP forwarding (merged)
ā€¢ https://github.com/lminiero/simple-whip-server/pull/2
Using SOLEIL for the purpose
ā€¢ ā€œStreaming Of Large scale Events over Internet cLoudsā€ (Ph.D Thesis)
ā€¢ In a nutshell, tree-based distribution of WebRTC feeds
ā€¢ Ingest and edges are WebRTC (Janus), everything in the middle just RTP
ā€¢ Working with RTP in intermediate layers has many advantages
ā€¢ No WebRTC overhead, and easier to route/manipulate by non-WebRTC tools
ā€¢ You can even take advantage of multicast, here
ā€¢ Just needs RTP forwarding to start everything
ā€¢ PR available in WHIP server to do RTP forwarding (merged)
ā€¢ https://github.com/lminiero/simple-whip-server/pull/2
To learn more about RTP forwarders...
https://archive.fosdem.org/2020/schedule/event/janus/
To learn more about RTP forwarders...
https://archive.fosdem.org/2020/schedule/event/janus/
To learn more about RTP forwarders...
https://archive.fosdem.org/2020/schedule/event/janus/
Distributing WHIP Janus streams via SOLEIL
Distributing WHIP Janus streams via SOLEIL
Distributing WHIP Janus streams via SOLEIL
Distributing WHIP Janus streams via SOLEIL
Distributing WHIP Janus streams via SOLEIL
Leveraging multicast internally for RTP
Leveraging multicast internally for RTP
Thanks! Questions? Comments?
Contacts
ā€¢ https://twitter.com/elminiero
ā€¢ https://twitter.com/meetecho
ā€¢ https://www.meetecho.com

More Related Content

What's hot

TRex Traffic Generator - Hanoch Haim
TRex Traffic Generator - Hanoch HaimTRex Traffic Generator - Hanoch Haim
TRex Traffic Generator - Hanoch Haim
harryvanhaaren
Ā 
Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...
Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...
Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...
HostedbyConfluent
Ā 
Kerbernetes Robotics Distributed System Deep Dive
Kerbernetes Robotics Distributed System Deep DiveKerbernetes Robotics Distributed System Deep Dive
Kerbernetes Robotics Distributed System Deep Dive
Tomoya Fujita
Ā 
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Nati Shalom
Ā 
P4, EPBF, and Linux TC Offload
P4, EPBF, and Linux TC OffloadP4, EPBF, and Linux TC Offload
P4, EPBF, and Linux TC Offload
Open-NFP
Ā 
TRex Realistic Traffic Generator - Stateless support
TRex  Realistic Traffic Generator  - Stateless support TRex  Realistic Traffic Generator  - Stateless support
TRex Realistic Traffic Generator - Stateless support
Hanoch Haim
Ā 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
ScyllaDB
Ā 
ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈
ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈ ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈
ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈
VirtualTech Japan Inc.
Ā 
Thanos - Prometheus on Scale
Thanos - Prometheus on ScaleThanos - Prometheus on Scale
Thanos - Prometheus on Scale
Bartłomiej Płotka
Ā 
Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
Lorenzo Miniero
Ā 
ONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚Æ
ONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚ÆONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚Æ
ONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚Æ
Kentaro Ebisawa
Ā 
LoRaWAN AS923 ćØ ARIB STD-T108
LoRaWAN AS923 ćØ ARIB STD-T108LoRaWAN AS923 ćØ ARIB STD-T108
LoRaWAN AS923 ćØ ARIB STD-T108
Shoichi Sakane
Ā 
Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...
Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...
Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...
Thomas Riley
Ā 
DPDK & Cloud Native
DPDK & Cloud NativeDPDK & Cloud Native
DPDK & Cloud Native
Michelle Holley
Ā 
Openv switch恮ä½æć„ę–¹ćØ恋
Openv switch恮ä½æć„ę–¹ćØ恋Openv switch恮ä½æć„ę–¹ćØ恋
Openv switch恮ä½æć„ę–¹ćØ恋
kotto_hihihi
Ā 
Kvm performance optimization for ubuntu
Kvm performance optimization for ubuntuKvm performance optimization for ubuntu
Kvm performance optimization for ubuntuSim Janghoon
Ā 
WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21
Lorenzo Miniero
Ā 
Janus & docker: friends or foe
Janus & docker: friends or foe Janus & docker: friends or foe
Janus & docker: friends or foe
Alessandro Amirante
Ā 
Kubernetes
KubernetesKubernetes
Kubernetes
erialc_w
Ā 
So You Want to Write an Exporter
So You Want to Write an ExporterSo You Want to Write an Exporter
So You Want to Write an Exporter
Brian Brazil
Ā 

What's hot (20)

TRex Traffic Generator - Hanoch Haim
TRex Traffic Generator - Hanoch HaimTRex Traffic Generator - Hanoch Haim
TRex Traffic Generator - Hanoch Haim
Ā 
Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...
Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...
Monitoring Kafka without instrumentation using eBPF with AntĆ³n RodrĆ­guez | Ka...
Ā 
Kerbernetes Robotics Distributed System Deep Dive
Kerbernetes Robotics Distributed System Deep DiveKerbernetes Robotics Distributed System Deep Dive
Kerbernetes Robotics Distributed System Deep Dive
Ā 
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...Orchestration tool roundup   kubernetes vs. docker vs. heat vs. terra form vs...
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Ā 
P4, EPBF, and Linux TC Offload
P4, EPBF, and Linux TC OffloadP4, EPBF, and Linux TC Offload
P4, EPBF, and Linux TC Offload
Ā 
TRex Realistic Traffic Generator - Stateless support
TRex  Realistic Traffic Generator  - Stateless support TRex  Realistic Traffic Generator  - Stateless support
TRex Realistic Traffic Generator - Stateless support
Ā 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
Ā 
ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈
ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈ ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈
ēŸ„ć£ć¦ć„ć‚‹ć‚ˆć†ć§ēŸ„悉ćŖ恄Neutron -ä»®ęƒ³ćƒ«ćƒ¼ć‚æć®å†—é•·ćØåˆ†ę•£- - OpenStackęœ€ę–°ęƒ…å ±ć‚»ćƒŸćƒŠćƒ¼ 2016幓3꜈
Ā 
Thanos - Prometheus on Scale
Thanos - Prometheus on ScaleThanos - Prometheus on Scale
Thanos - Prometheus on Scale
Ā 
Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
Ā 
ONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚Æ
ONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚ÆONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚Æ
ONIC2017 ćƒ—ćƒ­ć‚°ćƒ©ćƒžćƒ–ćƒ«ćƒ»ćƒ‡ćƒ¼ć‚æćƒ—ćƒ¬ćƒ¼ćƒ³ę™‚ä»£ć«å‘ć‘ćŸ 惍惃惈ćƒÆćƒ¼ć‚Æ惻ć‚Ŗćƒšćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ć‚¹ć‚æ惃ć‚Æ
Ā 
LoRaWAN AS923 ćØ ARIB STD-T108
LoRaWAN AS923 ćØ ARIB STD-T108LoRaWAN AS923 ćØ ARIB STD-T108
LoRaWAN AS923 ćØ ARIB STD-T108
Ā 
Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...
Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...
Prometheus in Practice: High Availability with Thanos (DevOpsDays Edinburgh 2...
Ā 
DPDK & Cloud Native
DPDK & Cloud NativeDPDK & Cloud Native
DPDK & Cloud Native
Ā 
Openv switch恮ä½æć„ę–¹ćØ恋
Openv switch恮ä½æć„ę–¹ćØ恋Openv switch恮ä½æć„ę–¹ćØ恋
Openv switch恮ä½æć„ę–¹ćØ恋
Ā 
Kvm performance optimization for ubuntu
Kvm performance optimization for ubuntuKvm performance optimization for ubuntu
Kvm performance optimization for ubuntu
Ā 
WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21
Ā 
Janus & docker: friends or foe
Janus & docker: friends or foe Janus & docker: friends or foe
Janus & docker: friends or foe
Ā 
Kubernetes
KubernetesKubernetes
Kubernetes
Ā 
So You Want to Write an Exporter
So You Want to Write an ExporterSo You Want to Write an Exporter
So You Want to Write an Exporter
Ā 

Similar to WHIP WebRTC Broadcasting @ FOSDEM 2022

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
Lorenzo Miniero
Ā 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
Lorenzo Miniero
Ā 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
Lorenzo Miniero
Ā 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Lorenzo Miniero
Ā 
Bridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptx
Bridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptxBridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptx
Bridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptx
Alberto GonzƔlez Trastoy
Ā 
Torino js
Torino jsTorino js
Torino js
Matteo Avalle
Ā 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019
Lorenzo Miniero
Ā 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
Lorenzo Miniero
Ā 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021
Lorenzo Miniero
Ā 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
Lorenzo Miniero
Ā 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020
Lorenzo Miniero
Ā 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards Update
UppersideConferences
Ā 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020
Lorenzo Miniero
Ā 
WebRTC & Asterisk 11
WebRTC & Asterisk 11WebRTC & Asterisk 11
WebRTC & Asterisk 11
Sanjay Willie
Ā 
KazooCon 2014 - WebRTC
KazooCon 2014 - WebRTCKazooCon 2014 - WebRTC
KazooCon 2014 - WebRTC
2600Hz
Ā 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
Lorenzo Miniero
Ā 
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit PreconferenceWebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
Tsahi Levent-levi
Ā 
2600hz WebRTC Meetup at WeWork, San Francisco, CA
2600hz WebRTC Meetup at WeWork, San Francisco, CA2600hz WebRTC Meetup at WeWork, San Francisco, CA
2600hz WebRTC Meetup at WeWork, San Francisco, CA
2600Hz
Ā 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
Lorenzo Miniero
Ā 
Workshop oracle
Workshop oracleWorkshop oracle
Workshop oracle
Douglas Tait
Ā 

Similar to WHIP WebRTC Broadcasting @ FOSDEM 2022 (20)

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
Ā 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
Ā 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
Ā 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Ā 
Bridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptx
Bridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptxBridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptx
Bridging_WebRTC_with_SIP_Alberto_WebRTCventures_Cluecon2023_NoVideo.pptx
Ā 
Torino js
Torino jsTorino js
Torino js
Ā 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019
Ā 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
Ā 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021
Ā 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
Ā 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020
Ā 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards Update
Ā 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020
Ā 
WebRTC & Asterisk 11
WebRTC & Asterisk 11WebRTC & Asterisk 11
WebRTC & Asterisk 11
Ā 
KazooCon 2014 - WebRTC
KazooCon 2014 - WebRTCKazooCon 2014 - WebRTC
KazooCon 2014 - WebRTC
Ā 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
Ā 
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit PreconferenceWebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
Ā 
2600hz WebRTC Meetup at WeWork, San Francisco, CA
2600hz WebRTC Meetup at WeWork, San Francisco, CA2600hz WebRTC Meetup at WeWork, San Francisco, CA
2600hz WebRTC Meetup at WeWork, San Francisco, CA
Ā 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
Ā 
Workshop oracle
Workshop oracleWorkshop oracle
Workshop oracle
Ā 

More from Lorenzo Miniero

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Lorenzo Miniero
Ā 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC Server
Lorenzo Miniero
Ā 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023
Lorenzo Miniero
Ā 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023
Lorenzo Miniero
Ā 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!
Lorenzo Miniero
Ā 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022
Lorenzo Miniero
Ā 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
Lorenzo Miniero
Ā 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021
Lorenzo Miniero
Ā 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Lorenzo Miniero
Ā 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
Lorenzo Miniero
Ā 
Turning live events to virtual with Janus
Turning live events to virtual with JanusTurning live events to virtual with Janus
Turning live events to virtual with Janus
Lorenzo Miniero
Ā 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
Lorenzo Miniero
Ā 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
Lorenzo Miniero
Ā 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
Lorenzo Miniero
Ā 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of Janus
Lorenzo Miniero
Ā 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
Lorenzo Miniero
Ā 

More from Lorenzo Miniero (16)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Ā 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC Server
Ā 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023
Ā 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023
Ā 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!
Ā 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022
Ā 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
Ā 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021
Ā 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Ā 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
Ā 
Turning live events to virtual with Janus
Turning live events to virtual with JanusTurning live events to virtual with Janus
Turning live events to virtual with Janus
Ā 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
Ā 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
Ā 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
Ā 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of Janus
Ā 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
Ā 

Recently uploaded

Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
UiPathCommunity
Ā 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
Ā 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
Ā 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
Ā 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
Ā 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
Ā 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
Ā 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
Ā 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
Ā 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
Ā 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
Ā 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
Ā 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
Ā 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
Ā 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
Ā 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
Ā 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
Ā 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
Ā 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
Ā 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
Ā 

Recently uploaded (20)

Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Ā 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
Ā 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
Ā 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Ā 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Ā 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
Ā 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
Ā 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Ā 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Ā 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Ā 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Ā 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Ā 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Ā 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Ā 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Ā 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Ā 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
Ā 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
Ā 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Ā 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ā 

WHIP WebRTC Broadcasting @ FOSDEM 2022

  • 1. WebRTC broadcasting with WHIP Lorenzo Miniero @elminiero FOSDEM 2022 Real Time Communications 5th February 2022, Brussels My couch
  • 2. Who am I? Lorenzo Miniero ā€¢ Ph.D @ UniNA ā€¢ Chairman @ Meetecho ā€¢ Main author of Janus Contacts and info ā€¢ lorenzo@meetecho.com ā€¢ https://twitter.com/elminiero ā€¢ https://www.slideshare.net/LorenzoMiniero ā€¢ https://lminiero.bandcamp.com
  • 3. MCU as a WebRTC topology
  • 4. SFU as a WebRTC topology
  • 5. A slightly variation on the theme
  • 7. What if we want more interactivity, though?
  • 8. What if we want more interactivity, though?
  • 9. What if we want more interactivity, though?
  • 10. What if we want more interactivity, though?
  • 11. Why not WebRTC instead? ā€¢ Traditional broadcasting efficient but higher latency ā€¢ At best (live), delay will typically be in the range of a few seconds ā€¢ Besides, different users may experience different delays (buffering) ā€¢ WebRTC natively conceived for very low latency, instead ā€¢ Born for conversational audio/video/data ā€¢ Can be (and often is) easily used for monodirectional streaming as well ā€¢ Strangely not really considered by the industry up until recently, though ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€) ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/ ā€¢ Tooling an important aspect to foster WebRTC adoption, here ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
  • 12. Why not WebRTC instead? ā€¢ Traditional broadcasting efficient but higher latency ā€¢ At best (live), delay will typically be in the range of a few seconds ā€¢ Besides, different users may experience different delays (buffering) ā€¢ WebRTC natively conceived for very low latency, instead ā€¢ Born for conversational audio/video/data ā€¢ Can be (and often is) easily used for monodirectional streaming as well ā€¢ Strangely not really considered by the industry up until recently, though ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€) ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/ ā€¢ Tooling an important aspect to foster WebRTC adoption, here ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
  • 13. Why not WebRTC instead? ā€¢ Traditional broadcasting efficient but higher latency ā€¢ At best (live), delay will typically be in the range of a few seconds ā€¢ Besides, different users may experience different delays (buffering) ā€¢ WebRTC natively conceived for very low latency, instead ā€¢ Born for conversational audio/video/data ā€¢ Can be (and often is) easily used for monodirectional streaming as well ā€¢ Strangely not really considered by the industry up until recently, though ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€) ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/ ā€¢ Tooling an important aspect to foster WebRTC adoption, here ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
  • 14. Why not WebRTC instead? ā€¢ Traditional broadcasting efficient but higher latency ā€¢ At best (live), delay will typically be in the range of a few seconds ā€¢ Besides, different users may experience different delays (buffering) ā€¢ WebRTC natively conceived for very low latency, instead ā€¢ Born for conversational audio/video/data ā€¢ Can be (and often is) easily used for monodirectional streaming as well ā€¢ Strangely not really considered by the industry up until recently, though ā€¢ Topic of my Ph.D years ago (ā€œStreaming Of Large scale Events over Internet cLoudsā€) ā€¢ Clearing the industry FUD: https://webrtcbydralex.com/index.php/2020/04/14/ ā€¢ Tooling an important aspect to foster WebRTC adoption, here ā€¢ e.g., a standard way to send media, and tools Ć  la OBS, XSplit, or others
  • 15. WebRTC audio: Opus ā€¢ WebRTC mandates Opus, and itā€™s a good thing ā€¢ High quality audio codec designed for the Internet ā€¢ Very flexible in sampling rates, bitrates, FEC, etc. ā€¢ Different profiles for voice and music/other ā€¢ Both encoding and decoding vary, in case ā€¢ Can be mono and stereo, with dynamic sampling rates and bitrates ā€¢ Multiopus (5.1 and 7.1)1 ā€¢ Each packet is basically OGG with multiple stereo Opus streams ā€¢ Number of streams determines number of channels ā€¢ Not documented, but used by Google for Stadia 1 https://webrtcbydralex.com/index.php/2020/04/08/surround-sound-5-1-and-7-1-in-libwebrtc-and-chrome/
  • 16. WebRTC audio: Opus ā€¢ WebRTC mandates Opus, and itā€™s a good thing ā€¢ High quality audio codec designed for the Internet ā€¢ Very flexible in sampling rates, bitrates, FEC, etc. ā€¢ Different profiles for voice and music/other ā€¢ Both encoding and decoding vary, in case ā€¢ Can be mono and stereo, with dynamic sampling rates and bitrates ā€¢ Multiopus (5.1 and 7.1)1 ā€¢ Each packet is basically OGG with multiple stereo Opus streams ā€¢ Number of streams determines number of channels ā€¢ Not documented, but used by Google for Stadia 1 https://webrtcbydralex.com/index.php/2020/04/08/surround-sound-5-1-and-7-1-in-libwebrtc-and-chrome/
  • 17. WebRTC audio: Opus ā€¢ WebRTC mandates Opus, and itā€™s a good thing ā€¢ High quality audio codec designed for the Internet ā€¢ Very flexible in sampling rates, bitrates, FEC, etc. ā€¢ Different profiles for voice and music/other ā€¢ Both encoding and decoding vary, in case ā€¢ Can be mono and stereo, with dynamic sampling rates and bitrates ā€¢ Multiopus (5.1 and 7.1)1 ā€¢ Each packet is basically OGG with multiple stereo Opus streams ā€¢ Number of streams determines number of channels ā€¢ Not documented, but used by Google for Stadia 1 https://webrtcbydralex.com/index.php/2020/04/08/surround-sound-5-1-and-7-1-in-libwebrtc-and-chrome/
  • 18. WebRTC video: Simulcasting & SVC https://webrtchacks.com/sfu-simulcast/
  • 19. WebRTC video: Simulcasting & SVC https://webrtchacks.com/chrome-vp9-svc/
  • 20. Two main challenges: ingestion...
  • 21. Two main challenges: ... and distribution
  • 22. (and yeah, maybe scaling too! )
  • 23. Making WebRTC ingestion easy: WISH / WHIP! https://www.meetecho.com/blog/whip-janus/ (September 2020)
  • 24. Making WebRTC ingestion easy: WISH / WHIP! https://www.meetecho.com/blog/whip-janus-part-ii/
  • 25. There would be no WHIP without Dr. Alex r
  • 26. A new Working Group in the IETF... https://datatracker.ietf.org/wg/wish/about/
  • 27. ... and a new draft for the WHIP specification! https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
  • 28. WebRTC-HTTP ingestion protocol (WHIP) ā€¢ HTTP-based signalling to create sendonly PeerConnections ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response ā€¢ Teardown of sessions using HTTP DELETE ā€¢ Authentication and authorization via Bearer tokens ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html ā€¢ Everything else is your usual WebRTC! ā€¢ ICE, DTLS, etc.
  • 29. WebRTC-HTTP ingestion protocol (WHIP) ā€¢ HTTP-based signalling to create sendonly PeerConnections ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response ā€¢ Teardown of sessions using HTTP DELETE ā€¢ Authentication and authorization via Bearer tokens ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html ā€¢ Everything else is your usual WebRTC! ā€¢ ICE, DTLS, etc.
  • 30. WebRTC-HTTP ingestion protocol (WHIP) ā€¢ HTTP-based signalling to create sendonly PeerConnections ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response ā€¢ Teardown of sessions using HTTP DELETE ā€¢ Authentication and authorization via Bearer tokens ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html ā€¢ Everything else is your usual WebRTC! ā€¢ ICE, DTLS, etc.
  • 31. WebRTC-HTTP ingestion protocol (WHIP) ā€¢ HTTP-based signalling to create sendonly PeerConnections ā€¢ HTTP POST to send SDP offer, and get an SDP answer in the response ā€¢ Teardown of sessions using HTTP DELETE ā€¢ Authentication and authorization via Bearer tokens ā€¢ https://www.rfc-editor.org/rfc/rfc6750.html ā€¢ Trickle and ICE restart via HTTP PATCH and SDP fragments ā€¢ https://www.rfc-editor.org/rfc/rfc8840.html ā€¢ Everything else is your usual WebRTC! ā€¢ ICE, DTLS, etc.
  • 32. A few sequence diagrams
  • 33. A few sequence diagrams
  • 34. A few sequence diagrams
  • 35. A WHIP server based on Janus ā€¢ Janus is a popular WebRTC server, so good option for WHIP ā€¢ It implements its own JSON-based API, though (Janus API) ā€¢ Simple (and transparent) solution: basic API translator in front of Janus ā€¢ WHIP API maps quite simply to set of Janus API primitives ā€¢ No need to change anything in the WebRTC stack ā€¢ Implemented simple prototype using node.js and Express ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL) Simple WHIP Server https://github.com/lminiero/simple-whip-server/
  • 36. A WHIP server based on Janus ā€¢ Janus is a popular WebRTC server, so good option for WHIP ā€¢ It implements its own JSON-based API, though (Janus API) ā€¢ Simple (and transparent) solution: basic API translator in front of Janus ā€¢ WHIP API maps quite simply to set of Janus API primitives ā€¢ No need to change anything in the WebRTC stack ā€¢ Implemented simple prototype using node.js and Express ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL) Simple WHIP Server https://github.com/lminiero/simple-whip-server/
  • 37. A WHIP server based on Janus ā€¢ Janus is a popular WebRTC server, so good option for WHIP ā€¢ It implements its own JSON-based API, though (Janus API) ā€¢ Simple (and transparent) solution: basic API translator in front of Janus ā€¢ WHIP API maps quite simply to set of Janus API primitives ā€¢ No need to change anything in the WebRTC stack ā€¢ Implemented simple prototype using node.js and Express ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL) Simple WHIP Server https://github.com/lminiero/simple-whip-server/
  • 38. A WHIP server based on Janus ā€¢ Janus is a popular WebRTC server, so good option for WHIP ā€¢ It implements its own JSON-based API, though (Janus API) ā€¢ Simple (and transparent) solution: basic API translator in front of Janus ā€¢ WHIP API maps quite simply to set of Janus API primitives ā€¢ No need to change anything in the WebRTC stack ā€¢ Implemented simple prototype using node.js and Express ā€¢ REST server that implements the WHIP API, and talks to Janus accordingly ā€¢ Only takes care of ingest: distribution out of scope (e.g., via SOLEIL) Simple WHIP Server https://github.com/lminiero/simple-whip-server/
  • 39. Mapping WHIP interactions to the Janus API
  • 40. Mapping WHIP interactions to the Janus API
  • 41. Mapping WHIP interactions to the Janus API
  • 42. Mapping WHIP interactions to the Janus API
  • 43. Mapping WHIP interactions to the Janus API
  • 44. Simple WHIP Server in action
  • 45. Basic UI to create/manage endpoints
  • 46. Writing a WHIP client for testing ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack ā€¢ Browsers are the obvious choice, but what about a native solution? ā€¢ Many broadcasters today use custom tools (e.g., OBS) ā€¢ Unfortunately OBS-WebRTC is not currently an option ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose ā€¢ Used it already with success in other applications (e.g., JamRTC) ā€¢ Modular and very powerful, so easy to feed with external sources Simple WHIP Client https://github.com/lminiero/simple-whip-client/ 2 https://gstreamer.freedesktop.org/documentation/webrtc/
  • 47. Writing a WHIP client for testing ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack ā€¢ Browsers are the obvious choice, but what about a native solution? ā€¢ Many broadcasters today use custom tools (e.g., OBS) ā€¢ Unfortunately OBS-WebRTC is not currently an option ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose ā€¢ Used it already with success in other applications (e.g., JamRTC) ā€¢ Modular and very powerful, so easy to feed with external sources Simple WHIP Client https://github.com/lminiero/simple-whip-client/ 2 https://gstreamer.freedesktop.org/documentation/webrtc/
  • 48. Writing a WHIP client for testing ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack ā€¢ Browsers are the obvious choice, but what about a native solution? ā€¢ Many broadcasters today use custom tools (e.g., OBS) ā€¢ Unfortunately OBS-WebRTC is not currently an option ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose ā€¢ Used it already with success in other applications (e.g., JamRTC) ā€¢ Modular and very powerful, so easy to feed with external sources Simple WHIP Client https://github.com/lminiero/simple-whip-client/ 2 https://gstreamer.freedesktop.org/documentation/webrtc/
  • 49. Writing a WHIP client for testing ā€¢ Needs to support HTTP (WHIP API) and have a WebRTC stack ā€¢ Browsers are the obvious choice, but what about a native solution? ā€¢ Many broadcasters today use custom tools (e.g., OBS) ā€¢ Unfortunately OBS-WebRTC is not currently an option ā€¢ Used legacy WHIP API, and currently only supports Millicast ingestion ā€¢ Chose GStreamerā€™s webrtcbin2 for the purpose ā€¢ Used it already with success in other applications (e.g., JamRTC) ā€¢ Modular and very powerful, so easy to feed with external sources Simple WHIP Client https://github.com/lminiero/simple-whip-client/ 2 https://gstreamer.freedesktop.org/documentation/webrtc/
  • 50. Simple WHIP Client options Usage: whip-client [OPTION?] -- Simple WHIP client Help Options: -h, --help Show help options Application Options: -u, --url Address of the WHIP endpoint (required) -t, --token Authentication Bearer token to use (optional) -A, --audio GStreamer pipeline to use for audio (optional, required if audio-only) -V, --video GStreamer pipeline to use for video (optional, required if video-only) -n, --no-trickle Donā€˜t trickle candidates, but put them in the SDP offer (default: false) -f, --follow-link Use the Link headers returned by the WHIP server to automatically configure STUN/TURN servers to use (default: false) -S, --stun-server STUN server to use, if any (stun://hostname:port) -T, --turn-server TURN server to use, if any; can be called multiple times (turn(s)://username:password@host:port?transport=[udp,tcp]) -F, --force-turn In case TURN servers are provided, force using a relay (default: false) -l, --log-level Logging level (0=disable logging, 7=maximum log level; default: 4)
  • 51. Simple WHIP Client example ./whip-client -u http://localhost:7080/whip/endpoint/abc123 -t verysecret -A "audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay pt=100 ! queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=100" -V "videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay pt=96 ! queue ! application/x-rtp,media=video,encoding-name=VP8,payload=96" -S stun.l.google.com:19302
  • 52. WHIP client and server + Janus
  • 53. Simple WHIP Client in action
  • 54. Testing my WHIP client with Janus
  • 55. Other WHIP implementations: servers ā€¢ Lorenzo Miniero ā€“ Simple WHIP Server (Janus) ā€¢ https://github.com/lminiero/simple-whip-server ā€¢ Juliusz Chroboczek ā€“ Galene ā€¢ https://github.com/jech/galene/tree/whip ā€¢ Sergio Garcia Murillo ā€“ Millicast integration ā€¢ https://millicast.com/ ā€¢ Cameron Elliott ā€“ Deadsfu ā€¢ https://github.com/x186k/deadsfu
  • 56. Other WHIP implementations: clients ā€¢ Lorenzo Miniero ā€“ Simple WHIP Client (GStreamer) ā€¢ https://github.com/lminiero/simple-whip-client ā€¢ Sergio Garcia Murillo ā€“ whip-js (JavaScript) ā€¢ https://github.com/medooze/whip-js/ ā€¢ Gustavo Garcia ā€“ whip-go (Go) ā€¢ https://github.com/ggarber/whip-go/ ā€¢ Tim Panton ā€“ whipi (Java / Raspberry Pi) ā€¢ https://github.com/pipe/whipi ā€¢ Alberto Gonzalez Trastoy ā€“ free-whip (Python) ā€¢ https://github.com/agonza1/free-whip/ ā€¢ Cameron Elliott ā€“ whip-whap-js (JavaScript) ā€¢ https://github.com/x186k/whip-whap-js
  • 57. WHIP interop tests @ IETF 112 Hackathon! https://github.com/IETF-Hackathon/ietf112-project-presentations/blob/main/ietf112-hackathon-whip.pdf
  • 58. WHIP interop tests @ IETF 112 Hackathon! Simple WHIP Server Galene Millicast deadsfu Simple WHIP Client whip-js whip-go whipi free-whip whip-whap-js
  • 59. Integration WHIP in broadcasting workflows ā€¢ Old version of OBS-WebRTC did have WHIP support ā€¢ Tested for my blog post from last year ā€¢ Implemented legacy WHIP API, and used libwebrtc ā€¢ No popular streamer tool supports WHIP yet, though ā€¢ WHIP will make it easy for the signalling part... ā€¢ ... but theyā€™ll still need a working WebRTC stack ā€¢ Why not start with a more ā€œlooseā€ integration then? ā€¢ Keeping on using existing tools as they work today ā€¢ Somehow get them to work with my GStreamer-based WHIP client
  • 60. Integration WHIP in broadcasting workflows ā€¢ Old version of OBS-WebRTC did have WHIP support ā€¢ Tested for my blog post from last year ā€¢ Implemented legacy WHIP API, and used libwebrtc ā€¢ No popular streamer tool supports WHIP yet, though ā€¢ WHIP will make it easy for the signalling part... ā€¢ ... but theyā€™ll still need a working WebRTC stack ā€¢ Why not start with a more ā€œlooseā€ integration then? ā€¢ Keeping on using existing tools as they work today ā€¢ Somehow get them to work with my GStreamer-based WHIP client
  • 61. Integration WHIP in broadcasting workflows ā€¢ Old version of OBS-WebRTC did have WHIP support ā€¢ Tested for my blog post from last year ā€¢ Implemented legacy WHIP API, and used libwebrtc ā€¢ No popular streamer tool supports WHIP yet, though ā€¢ WHIP will make it easy for the signalling part... ā€¢ ... but theyā€™ll still need a working WebRTC stack ā€¢ Why not start with a more ā€œlooseā€ integration then? ā€¢ Keeping on using existing tools as they work today ā€¢ Somehow get them to work with my GStreamer-based WHIP client
  • 63. What is NDI? ā€¢ Network Device Interface (NDI) ā€¢ Royalty-free software standard developed by NewTek ā€¢ https://www.ndi.tv/ ā€¢ Live exchange of multimedia streams within the same LAN ā€¢ Multichannel and uncompressed media streams (high quality) ā€¢ mDNS used for service discovery ā€¢ Easy to use (and integrate) native SDK ā€¢ Available on Windows, Linux, MacOS, Android, etc. ā€¢ VLC team working on an alternative implementation ā€¢ Widely used in the broadcasters industry ā€¢ Natively supported by many devices and streamer tools
  • 64. What is NDI? ā€¢ Network Device Interface (NDI) ā€¢ Royalty-free software standard developed by NewTek ā€¢ https://www.ndi.tv/ ā€¢ Live exchange of multimedia streams within the same LAN ā€¢ Multichannel and uncompressed media streams (high quality) ā€¢ mDNS used for service discovery ā€¢ Easy to use (and integrate) native SDK ā€¢ Available on Windows, Linux, MacOS, Android, etc. ā€¢ VLC team working on an alternative implementation ā€¢ Widely used in the broadcasters industry ā€¢ Natively supported by many devices and streamer tools
  • 65. What is NDI? ā€¢ Network Device Interface (NDI) ā€¢ Royalty-free software standard developed by NewTek ā€¢ https://www.ndi.tv/ ā€¢ Live exchange of multimedia streams within the same LAN ā€¢ Multichannel and uncompressed media streams (high quality) ā€¢ mDNS used for service discovery ā€¢ Easy to use (and integrate) native SDK ā€¢ Available on Windows, Linux, MacOS, Android, etc. ā€¢ VLC team working on an alternative implementation ā€¢ Widely used in the broadcasters industry ā€¢ Natively supported by many devices and streamer tools
  • 66. What is NDI? ā€¢ Network Device Interface (NDI) ā€¢ Royalty-free software standard developed by NewTek ā€¢ https://www.ndi.tv/ ā€¢ Live exchange of multimedia streams within the same LAN ā€¢ Multichannel and uncompressed media streams (high quality) ā€¢ mDNS used for service discovery ā€¢ Easy to use (and integrate) native SDK ā€¢ Available on Windows, Linux, MacOS, Android, etc. ā€¢ VLC team working on an alternative implementation ā€¢ Widely used in the broadcasters industry ā€¢ Natively supported by many devices and streamer tools
  • 67. Weā€™ve talked about WebRTC-to-NDI before...
  • 68. What about NDI-to-WebRTC, though? ā€¢ Thereā€™s a cool NDI plugin for GStreamer ā€¢ Makes it easy to use NDI sources in GStreamer pipelines ā€¢ https://github.com/teltek/gst-plugin-ndi ā€¢ Hey, our WHIP client is based on GStreamer too! ā€¢ Audio and video pipelines are customizable (command line) ā€¢ NDI plugin as source for the media āˆ’ā†’ encoders/WebRTC will do the rest ā€¢ Of course, we need something that generates NDI ā€¢ OBS has an NDI plugin, for NDI input and output ā€¢ https://github.com/Palakis/obs-ndi
  • 69. What about NDI-to-WebRTC, though? ā€¢ Thereā€™s a cool NDI plugin for GStreamer ā€¢ Makes it easy to use NDI sources in GStreamer pipelines ā€¢ https://github.com/teltek/gst-plugin-ndi ā€¢ Hey, our WHIP client is based on GStreamer too! ā€¢ Audio and video pipelines are customizable (command line) ā€¢ NDI plugin as source for the media āˆ’ā†’ encoders/WebRTC will do the rest ā€¢ Of course, we need something that generates NDI ā€¢ OBS has an NDI plugin, for NDI input and output ā€¢ https://github.com/Palakis/obs-ndi
  • 70. What about NDI-to-WebRTC, though? ā€¢ Thereā€™s a cool NDI plugin for GStreamer ā€¢ Makes it easy to use NDI sources in GStreamer pipelines ā€¢ https://github.com/teltek/gst-plugin-ndi ā€¢ Hey, our WHIP client is based on GStreamer too! ā€¢ Audio and video pipelines are customizable (command line) ā€¢ NDI plugin as source for the media āˆ’ā†’ encoders/WebRTC will do the rest ā€¢ Of course, we need something that generates NDI ā€¢ OBS has an NDI plugin, for NDI input and output ā€¢ https://github.com/Palakis/obs-ndi
  • 71. 1. Configure NDI output in OBS
  • 72. 2. Create your scenes in OBS
  • 73. 3. Setup the WHIP client to capture NDI
  • 74. Ready for our demo!
  • 75. Ready for our demo!
  • 76. Ready for our demo!
  • 77. More details in a recent CommCon talk https://2021.commcon.xyz/talks/whip-ndi-and-janus-genesis-of-a-broadcasting-demo
  • 78. Next step: broadcasting the stream ā€¢ WHIP server + Janus get you in a VideoRoom, and itā€™s a good starting point ā€¢ Thatā€™s the whole point of WebRTC ingest! ā€¢ Already ā€œconsumableā€ via VideoRoom itself (SFU) ā€¢ Janus VideoRoom plugin not really optimized for broadcasting, though ā€¢ Conceived for videoconferencing use cases ā€¢ Will not work well if you have to feed, e.g., 100ā€™s or 1000ā€™s ā€¢ Janus Streaming plugin a much better choice ā€¢ Natively optimized for doing one-to-many ā€¢ Can receive media from VideoRoom (and so WHIP) via ā€œRTP forwardersā€ ā€¢ Even better, multiple Janus instances can work together
  • 79. Next step: broadcasting the stream ā€¢ WHIP server + Janus get you in a VideoRoom, and itā€™s a good starting point ā€¢ Thatā€™s the whole point of WebRTC ingest! ā€¢ Already ā€œconsumableā€ via VideoRoom itself (SFU) ā€¢ Janus VideoRoom plugin not really optimized for broadcasting, though ā€¢ Conceived for videoconferencing use cases ā€¢ Will not work well if you have to feed, e.g., 100ā€™s or 1000ā€™s ā€¢ Janus Streaming plugin a much better choice ā€¢ Natively optimized for doing one-to-many ā€¢ Can receive media from VideoRoom (and so WHIP) via ā€œRTP forwardersā€ ā€¢ Even better, multiple Janus instances can work together
  • 80. Next step: broadcasting the stream ā€¢ WHIP server + Janus get you in a VideoRoom, and itā€™s a good starting point ā€¢ Thatā€™s the whole point of WebRTC ingest! ā€¢ Already ā€œconsumableā€ via VideoRoom itself (SFU) ā€¢ Janus VideoRoom plugin not really optimized for broadcasting, though ā€¢ Conceived for videoconferencing use cases ā€¢ Will not work well if you have to feed, e.g., 100ā€™s or 1000ā€™s ā€¢ Janus Streaming plugin a much better choice ā€¢ Natively optimized for doing one-to-many ā€¢ Can receive media from VideoRoom (and so WHIP) via ā€œRTP forwardersā€ ā€¢ Even better, multiple Janus instances can work together
  • 81. Ph.D Thesis on WebRTC broadcasting (2015)
  • 82. Using SOLEIL for the purpose ā€¢ ā€œStreaming Of Large scale Events over Internet cLoudsā€ (Ph.D Thesis) ā€¢ In a nutshell, tree-based distribution of WebRTC feeds ā€¢ Ingest and edges are WebRTC (Janus), everything in the middle just RTP ā€¢ Working with RTP in intermediate layers has many advantages ā€¢ No WebRTC overhead, and easier to route/manipulate by non-WebRTC tools ā€¢ You can even take advantage of multicast, here ā€¢ Just needs RTP forwarding to start everything ā€¢ PR available in WHIP server to do RTP forwarding (merged) ā€¢ https://github.com/lminiero/simple-whip-server/pull/2
  • 83. Using SOLEIL for the purpose ā€¢ ā€œStreaming Of Large scale Events over Internet cLoudsā€ (Ph.D Thesis) ā€¢ In a nutshell, tree-based distribution of WebRTC feeds ā€¢ Ingest and edges are WebRTC (Janus), everything in the middle just RTP ā€¢ Working with RTP in intermediate layers has many advantages ā€¢ No WebRTC overhead, and easier to route/manipulate by non-WebRTC tools ā€¢ You can even take advantage of multicast, here ā€¢ Just needs RTP forwarding to start everything ā€¢ PR available in WHIP server to do RTP forwarding (merged) ā€¢ https://github.com/lminiero/simple-whip-server/pull/2
  • 84. Using SOLEIL for the purpose ā€¢ ā€œStreaming Of Large scale Events over Internet cLoudsā€ (Ph.D Thesis) ā€¢ In a nutshell, tree-based distribution of WebRTC feeds ā€¢ Ingest and edges are WebRTC (Janus), everything in the middle just RTP ā€¢ Working with RTP in intermediate layers has many advantages ā€¢ No WebRTC overhead, and easier to route/manipulate by non-WebRTC tools ā€¢ You can even take advantage of multicast, here ā€¢ Just needs RTP forwarding to start everything ā€¢ PR available in WHIP server to do RTP forwarding (merged) ā€¢ https://github.com/lminiero/simple-whip-server/pull/2
  • 85. To learn more about RTP forwarders... https://archive.fosdem.org/2020/schedule/event/janus/
  • 86. To learn more about RTP forwarders... https://archive.fosdem.org/2020/schedule/event/janus/
  • 87. To learn more about RTP forwarders... https://archive.fosdem.org/2020/schedule/event/janus/
  • 88. Distributing WHIP Janus streams via SOLEIL
  • 89. Distributing WHIP Janus streams via SOLEIL
  • 90. Distributing WHIP Janus streams via SOLEIL
  • 91. Distributing WHIP Janus streams via SOLEIL
  • 92. Distributing WHIP Janus streams via SOLEIL
  • 95. Thanks! Questions? Comments? Contacts ā€¢ https://twitter.com/elminiero ā€¢ https://twitter.com/meetecho ā€¢ https://www.meetecho.com