SlideShare a Scribd company logo
1 of 54
Download to read offline
Audio redundancy in WebRTC and Janus via RED
Lorenzo Miniero
ClueCon – Chicago, IL, USA (kinda!)
October 27th 2021
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://soundcloud.com/lminiero
• https://lminiero.bandcamp.com
Just a few words on Meetecho
• Co-founded in 2009 as an academic spin-off
• University research efforts brought to the market
• Completely independent from the University
• Focus on real-time multimedia applications
• Strong perspective on standardization and open source
• Several activities
• Consulting services
• Commercial support and Janus licenses
• Streaming of live events (IETF, ACM, etc.)
• Proudly brewed in sunny Napoli, Italy
Home Sweet Home!
Remember Janus?
Janus
General purpose, open source WebRTC server
• https://github.com/meetecho/janus-gateway
• Demos and documentation: https://janus.conf.meetecho.com
• Community: https://groups.google.com/forum/#!forum/meetecho-janus
Modular architecture
Modular architecture
A ton of scenarios done today with Janus!
• SIP and RTSP gatewaying
• WebRTC-based call/contact centers
• Conferencing & collaboration
• E-learning & webinars
• Cloud platforms
• Media production
• Broadcasting & Gaming
• Identity verification
• Internet of Things
• Augmented/Virtual Reality
• ...and more!
It’s not just about video!
• Video obviously takes the lion’s share, most of the times
• Pretty much ubiquitous
• Most use cases assume video, one way or another
• It’s not the only thing that matters, though
• We still need to communicate, somehow
• Audio (and data) can be just as important, if not more
• Some applications even focus JUST on audio!
• ... and not only call/contact centers, PBX, or legacy infrastructures
It’s not just about video!
• Video obviously takes the lion’s share, most of the times
• Pretty much ubiquitous
• Most use cases assume video, one way or another
• It’s not the only thing that matters, though
• We still need to communicate, somehow
• Audio (and data) can be just as important, if not more
• Some applications even focus JUST on audio!
• ... and not only call/contact centers, PBX, or legacy infrastructures
It’s not just about video!
• Video obviously takes the lion’s share, most of the times
• Pretty much ubiquitous
• Most use cases assume video, one way or another
• It’s not the only thing that matters, though
• We still need to communicate, somehow
• Audio (and data) can be just as important, if not more
• Some applications even focus JUST on audio!
• ... and not only call/contact centers, PBX, or legacy infrastructures
A relevant example: Clubhouse
Another relevant example: Twitter Spaces
You didn’t hear it from me...
“Can WebRTC help musicians?”
https://fosdem.org/2021/schedule/event/webrtc_musicians/
WebRTC and audio
• A couple of mandatory-to-implement codecs
• Opus + G.711
• G.711 just there as a fallback (and legacy interopability)
• Opus FTW!
• High quality audio codec designed for the Internet
• Very flexible in sampling rates, bitrates, etc.
• Support for stereo, and different “profiles” for voice/music
• Surround availble too, on an experimental basis (multiopus)
• A few interesting “tools”
• Audio levels RTP extension (VAD)
• Opus inband Forward Error Correction (FEC)
• Opus Discontinuous transmission (DTX)
WebRTC and audio
• A couple of mandatory-to-implement codecs
• Opus + G.711
• G.711 just there as a fallback (and legacy interopability)
• Opus FTW!
• High quality audio codec designed for the Internet
• Very flexible in sampling rates, bitrates, etc.
• Support for stereo, and different “profiles” for voice/music
• Surround availble too, on an experimental basis (multiopus)
• A few interesting “tools”
• Audio levels RTP extension (VAD)
• Opus inband Forward Error Correction (FEC)
• Opus Discontinuous transmission (DTX)
WebRTC and audio
• A couple of mandatory-to-implement codecs
• Opus + G.711
• G.711 just there as a fallback (and legacy interopability)
• Opus FTW!
• High quality audio codec designed for the Internet
• Very flexible in sampling rates, bitrates, etc.
• Support for stereo, and different “profiles” for voice/music
• Surround availble too, on an experimental basis (multiopus)
• A few interesting “tools”
• Audio levels RTP extension (VAD)
• Opus inband Forward Error Correction (FEC)
• Opus Discontinuous transmission (DTX)
Audio-only: SFU or MCU?
• SFUs ideal to just relay media
• No mixing/transcoding to worry about −→ less CPU on server, less delay
• More streams to distribute −→ more bandwidth needed
• Different streams −→ more control on UI
• MCUs ideal to just mix media
• Mixing/transcoding taking place −→ more CPU on server, more delay
• Just one stream to distribute −→ bandwidth constant
• Single output stream −→ UI rendering constrained
• Sometimes it makes sense to use them both!
• Use SFU where applicable (e.g., video, plenty of bandwidth)
• Use MCU to complement (e.g., audio, lower power devices)
• Besides, an MCU can mix SFU streams to broadcast to a CDN!
Audio-only: SFU or MCU?
• SFUs ideal to just relay media
• No mixing/transcoding to worry about −→ less CPU on server, less delay
• More streams to distribute −→ more bandwidth needed
• Different streams −→ more control on UI
• MCUs ideal to just mix media
• Mixing/transcoding taking place −→ more CPU on server, more delay
• Just one stream to distribute −→ bandwidth constant
• Single output stream −→ UI rendering constrained
• Sometimes it makes sense to use them both!
• Use SFU where applicable (e.g., video, plenty of bandwidth)
• Use MCU to complement (e.g., audio, lower power devices)
• Besides, an MCU can mix SFU streams to broadcast to a CDN!
Audio-only: SFU or MCU?
• SFUs ideal to just relay media
• No mixing/transcoding to worry about −→ less CPU on server, less delay
• More streams to distribute −→ more bandwidth needed
• Different streams −→ more control on UI
• MCUs ideal to just mix media
• Mixing/transcoding taking place −→ more CPU on server, more delay
• Just one stream to distribute −→ bandwidth constant
• Single output stream −→ UI rendering constrained
• Sometimes it makes sense to use them both!
• Use SFU where applicable (e.g., video, plenty of bandwidth)
• Use MCU to complement (e.g., audio, lower power devices)
• Besides, an MCU can mix SFU streams to broadcast to a CDN!
We do use both in our Virtual Event Platform!
https://commcon.xyz/session/turning-live-events-to-virtual-with-janus
Many efforts focused on audio in Janus, recently
• Modular nature of Janus encourages new functionality
• Not necessarily in new plugins
• VideoRoom, AudioBridge, Streaming plugins can all benefit
• Several activities done, started or planned to enhance audio experience
• Mostly in AudioBridge... (due to the nature of the plugin)
• ... but some features actually available to all plugins!
• Many coming from requirements for our Virtual Event Platform
• But we like to experiment as well!
• Main topic of a recent talk @ Open Source World
• https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
Many efforts focused on audio in Janus, recently
• Modular nature of Janus encourages new functionality
• Not necessarily in new plugins
• VideoRoom, AudioBridge, Streaming plugins can all benefit
• Several activities done, started or planned to enhance audio experience
• Mostly in AudioBridge... (due to the nature of the plugin)
• ... but some features actually available to all plugins!
• Many coming from requirements for our Virtual Event Platform
• But we like to experiment as well!
• Main topic of a recent talk @ Open Source World
• https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
Many efforts focused on audio in Janus, recently
• Modular nature of Janus encourages new functionality
• Not necessarily in new plugins
• VideoRoom, AudioBridge, Streaming plugins can all benefit
• Several activities done, started or planned to enhance audio experience
• Mostly in AudioBridge... (due to the nature of the plugin)
• ... but some features actually available to all plugins!
• Many coming from requirements for our Virtual Event Platform
• But we like to experiment as well!
• Main topic of a recent talk @ Open Source World
• https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
Many efforts focused on audio in Janus, recently
• Modular nature of Janus encourages new functionality
• Not necessarily in new plugins
• VideoRoom, AudioBridge, Streaming plugins can all benefit
• Several activities done, started or planned to enhance audio experience
• Mostly in AudioBridge... (due to the nature of the plugin)
• ... but some features actually available to all plugins!
• Many coming from requirements for our Virtual Event Platform
• But we like to experiment as well!
• Main topic of a recent talk @ Open Source World
• https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
Audio redundancy via RED
• Old RTP payload format for Redundant Audio Data (RED)
• https://datatracker.ietf.org/doc/html/rfc2198
• Recently added to Chrome on an experimental basis
• https://bugs.chromium.org/p/webrtc/issues/detail?id=11640
• https://webrtchacks.com/red-improving-audio-quality-with-redundancy/
• https://webrtchacks.com/implementing-redundant-audio-on-an-sfu/
• Basically a simple way to group multiple audio frames in a single RTP packet
• Current audio frame + one or more previously sent frames
• Allows recipient to easily recover lost packets at the cost of more bandwidth
Audio redundancy via RED
• Old RTP payload format for Redundant Audio Data (RED)
• https://datatracker.ietf.org/doc/html/rfc2198
• Recently added to Chrome on an experimental basis
• https://bugs.chromium.org/p/webrtc/issues/detail?id=11640
• https://webrtchacks.com/red-improving-audio-quality-with-redundancy/
• https://webrtchacks.com/implementing-redundant-audio-on-an-sfu/
• Basically a simple way to group multiple audio frames in a single RTP packet
• Current audio frame + one or more previously sent frames
• Allows recipient to easily recover lost packets at the cost of more bandwidth
Audio redundancy via RED
• Old RTP payload format for Redundant Audio Data (RED)
• https://datatracker.ietf.org/doc/html/rfc2198
• Recently added to Chrome on an experimental basis
• https://bugs.chromium.org/p/webrtc/issues/detail?id=11640
• https://webrtchacks.com/red-improving-audio-quality-with-redundancy/
• https://webrtchacks.com/implementing-redundant-audio-on-an-sfu/
• Basically a simple way to group multiple audio frames in a single RTP packet
• Current audio frame + one or more previously sent frames
• Allows recipient to easily recover lost packets at the cost of more bandwidth
Packet loss without RED
Packet loss without RED
Packet loss with RED
Packet loss with RED
Packet loss with RED
Negotiating RED in SDP
Offer (“I support RED”)
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126
[..]
a=rtpmap:111 opus/48000/2
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
[..]
Answer (”Ok, let’s use RED”)
m=audio 9 UDP/TLS/RTP/SAVPF 63 111
[..]
a=rtpmap:63 red/48000/2
a=rtpmap:111 opus/48000/2
a=fmtp:63 111/111
[..]
Support for audio redundancy via RED in Janus
• Support in Janus needed work in both core and plugins
• Core needed to negotiate RED, and be able to unpack/pack RED
• Plugins needed to be able to do something with the data
• Important to support both endpoints that can do RED, and those who can’t
• RED-to-RED and nonRED-to-nonRED are easy
• In other cases, Janus may have to pack/unpack RED accordingly
• First integration basically done in most plugins
• Still missing in AudioBridge, though
If you want to learn more... (PR in testing phase)
https://www.meetecho.com/blog/opus-red/
Support for audio redundancy via RED in Janus
• Support in Janus needed work in both core and plugins
• Core needed to negotiate RED, and be able to unpack/pack RED
• Plugins needed to be able to do something with the data
• Important to support both endpoints that can do RED, and those who can’t
• RED-to-RED and nonRED-to-nonRED are easy
• In other cases, Janus may have to pack/unpack RED accordingly
• First integration basically done in most plugins
• Still missing in AudioBridge, though
If you want to learn more... (PR in testing phase)
https://www.meetecho.com/blog/opus-red/
Support for audio redundancy via RED in Janus
• Support in Janus needed work in both core and plugins
• Core needed to negotiate RED, and be able to unpack/pack RED
• Plugins needed to be able to do something with the data
• Important to support both endpoints that can do RED, and those who can’t
• RED-to-RED and nonRED-to-nonRED are easy
• In other cases, Janus may have to pack/unpack RED accordingly
• First integration basically done in most plugins
• Still missing in AudioBridge, though
If you want to learn more... (PR in testing phase)
https://www.meetecho.com/blog/opus-red/
Support for audio redundancy via RED in Janus
• Support in Janus needed work in both core and plugins
• Core needed to negotiate RED, and be able to unpack/pack RED
• Plugins needed to be able to do something with the data
• Important to support both endpoints that can do RED, and those who can’t
• RED-to-RED and nonRED-to-nonRED are easy
• In other cases, Janus may have to pack/unpack RED accordingly
• First integration basically done in most plugins
• Still missing in AudioBridge, though
If you want to learn more... (PR in testing phase)
https://www.meetecho.com/blog/opus-red/
non-RED to non-RED
RED to RED
RED to non-RED
non-RED to RED
non-RED to RED
A few challenges to address
• RED to non-RED doesn’t currently take into account redundant info
• If RED packet N-1 is lost, we don’t use packet N to get lost one
• RED packetization code in Janus assumes in-order packets
• May not always be the case (e.g., Streaming plugin and external RTP source)
• RED packetization is shared when doing one-to-many
• New subscribers get redundant info on pre-join audio packets
• Switching subscription in-session briefly mixes redundant info of different sessions
• (N-1 of new stream) != (N-1 of previous stream)
• Discontinuous Transmission (DTX) can cause issues
• Big timestamp jumps can overflow the smaller “timestamp” diff in RED
A few challenges to address
• RED to non-RED doesn’t currently take into account redundant info
• If RED packet N-1 is lost, we don’t use packet N to get lost one
• RED packetization code in Janus assumes in-order packets
• May not always be the case (e.g., Streaming plugin and external RTP source)
• RED packetization is shared when doing one-to-many
• New subscribers get redundant info on pre-join audio packets
• Switching subscription in-session briefly mixes redundant info of different sessions
• (N-1 of new stream) != (N-1 of previous stream)
• Discontinuous Transmission (DTX) can cause issues
• Big timestamp jumps can overflow the smaller “timestamp” diff in RED
A few challenges to address
• RED to non-RED doesn’t currently take into account redundant info
• If RED packet N-1 is lost, we don’t use packet N to get lost one
• RED packetization code in Janus assumes in-order packets
• May not always be the case (e.g., Streaming plugin and external RTP source)
• RED packetization is shared when doing one-to-many
• New subscribers get redundant info on pre-join audio packets
• Switching subscription in-session briefly mixes redundant info of different sessions
• (N-1 of new stream) != (N-1 of previous stream)
• Discontinuous Transmission (DTX) can cause issues
• Big timestamp jumps can overflow the smaller “timestamp” diff in RED
A few challenges to address
• RED to non-RED doesn’t currently take into account redundant info
• If RED packet N-1 is lost, we don’t use packet N to get lost one
• RED packetization code in Janus assumes in-order packets
• May not always be the case (e.g., Streaming plugin and external RTP source)
• RED packetization is shared when doing one-to-many
• New subscribers get redundant info on pre-join audio packets
• Switching subscription in-session briefly mixes redundant info of different sessions
• (N-1 of new stream) != (N-1 of previous stream)
• Discontinuous Transmission (DTX) can cause issues
• Big timestamp jumps can overflow the smaller “timestamp” diff in RED
A few challenges to address
• RED to non-RED doesn’t currently take into account redundant info
• If RED packet N-1 is lost, we don’t use packet N to get lost one
• RED packetization code in Janus assumes in-order packets
• May not always be the case (e.g., Streaming plugin and external RTP source)
• RED packetization is shared when doing one-to-many
• New subscribers get redundant info on pre-join audio packets
• Switching subscription in-session briefly mixes redundant info of different sessions
• (N-1 of new stream) != (N-1 of previous stream)
• Discontinuous Transmission (DTX) can cause issues
• Big timestamp jumps can overflow the smaller “timestamp” diff in RED
What about the impact on bandwidth?
• RED does help with redundancy...
• ... but uses much more bandwidth than usual for audio!
• Initial integration in Chrome used distance of two “generations”
• Each audio packet contains payload of previous two packets
• Bitrate of audio stream increases considerably!
• Less bandwidth available for other streams, e.g., video
• Latest version defaults to a single redundant packet instead
• Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
What about the impact on bandwidth?
• RED does help with redundancy...
• ... but uses much more bandwidth than usual for audio!
• Initial integration in Chrome used distance of two “generations”
• Each audio packet contains payload of previous two packets
• Bitrate of audio stream increases considerably!
• Less bandwidth available for other streams, e.g., video
• Latest version defaults to a single redundant packet instead
• Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
What about the impact on bandwidth?
• RED does help with redundancy...
• ... but uses much more bandwidth than usual for audio!
• Initial integration in Chrome used distance of two “generations”
• Each audio packet contains payload of previous two packets
• Bitrate of audio stream increases considerably!
• Less bandwidth available for other streams, e.g., video
• Latest version defaults to a single redundant packet instead
• Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
What about the impact on bandwidth?
• RED does help with redundancy...
• ... but uses much more bandwidth than usual for audio!
• Initial integration in Chrome used distance of two “generations”
• Each audio packet contains payload of previous two packets
• Bitrate of audio stream increases considerably!
• Less bandwidth available for other streams, e.g., video
• Latest version defaults to a single redundant packet instead
• Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
Thanks! Questions? Comments?
Get in touch!
• https://twitter.com/elminiero
• https://twitter.com/meetecho
• https://www.meetecho.com

More Related Content

What's hot

Cilium + Istio with Gloo Mesh
Cilium + Istio with Gloo MeshCilium + Istio with Gloo Mesh
Cilium + Istio with Gloo MeshChristian Posta
 
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 MBONEDLorenzo Miniero
 
Top 5 Challenges To Add Web Calls to Truphone VoIP Platform
Top 5 Challenges To Add Web Calls to Truphone VoIP PlatformTop 5 Challenges To Add Web Calls to Truphone VoIP Platform
Top 5 Challenges To Add Web Calls to Truphone VoIP PlatformGiacomo Vacca
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Lorenzo Miniero
 
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best PracticesKafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practicesconfluent
 
ライブストリーミングの基礎知識
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識kumaryu
 
動画配信の基礎知識
動画配信の基礎知識動画配信の基礎知識
動画配信の基礎知識Daiyu Hatakeyama
 
Kubernetes Networking 101
Kubernetes Networking 101Kubernetes Networking 101
Kubernetes Networking 101Weaveworks
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with JanusLorenzo Miniero
 
Let's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg MeetupLet's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg MeetupHenning Jacobs
 
Reactive Microservices with Quarkus
Reactive Microservices with QuarkusReactive Microservices with Quarkus
Reactive Microservices with QuarkusNiklas Heidloff
 
Exactly-once Semantics in Apache Kafka
Exactly-once Semantics in Apache KafkaExactly-once Semantics in Apache Kafka
Exactly-once Semantics in Apache Kafkaconfluent
 
Intégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciIntégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciwiemfourati
 
Deploying Confluent Platform for Production
Deploying Confluent Platform for ProductionDeploying Confluent Platform for Production
Deploying Confluent Platform for Productionconfluent
 
Kafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced ProducersKafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced ProducersJean-Paul Azar
 
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Henning Jacobs
 
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어NHN FORWARD
 

What's hot (20)

Cilium + Istio with Gloo Mesh
Cilium + Istio with Gloo MeshCilium + Istio with Gloo Mesh
Cilium + Istio with Gloo Mesh
 
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
 
Top 5 Challenges To Add Web Calls to Truphone VoIP Platform
Top 5 Challenges To Add Web Calls to Truphone VoIP PlatformTop 5 Challenges To Add Web Calls to Truphone VoIP Platform
Top 5 Challenges To Add Web Calls to Truphone VoIP Platform
 
HTTP/3
HTTP/3HTTP/3
HTTP/3
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
 
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best PracticesKafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practices
 
ライブストリーミングの基礎知識
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識
 
動画配信の基礎知識
動画配信の基礎知識動画配信の基礎知識
動画配信の基礎知識
 
Kubernetes Networking 101
Kubernetes Networking 101Kubernetes Networking 101
Kubernetes Networking 101
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
 
Docker, LinuX Container
Docker, LinuX ContainerDocker, LinuX Container
Docker, LinuX Container
 
Let's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg MeetupLet's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg Meetup
 
Reactive Microservices with Quarkus
Reactive Microservices with QuarkusReactive Microservices with Quarkus
Reactive Microservices with Quarkus
 
Exactly-once Semantics in Apache Kafka
Exactly-once Semantics in Apache KafkaExactly-once Semantics in Apache Kafka
Exactly-once Semantics in Apache Kafka
 
Intégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciIntégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ci
 
Deploying Confluent Platform for Production
Deploying Confluent Platform for ProductionDeploying Confluent Platform for Production
Deploying Confluent Platform for Production
 
Kafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced ProducersKafka Tutorial: Advanced Producers
Kafka Tutorial: Advanced Producers
 
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
 
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
 

Similar to WebRTC, RED and Janus @ ClueCon21

Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Lorenzo 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 2023Lorenzo Miniero
 
WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023Lorenzo Miniero
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022Lorenzo Miniero
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Lorenzo Miniero
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Lorenzo Miniero
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Lorenzo Miniero
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceLorenzo 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 2024Lorenzo Miniero
 
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 2020Lorenzo Miniero
 
Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)Derek Buitenhuis
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021Lorenzo 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 MOPSLorenzo Miniero
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Lorenzo Miniero
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroGreg Kawere
 
Digitizing and Delivering Audio and Video
Digitizing and Delivering Audio and VideoDigitizing and Delivering Audio and Video
Digitizing and Delivering Audio and VideoJenn Riley
 

Similar to WebRTC, RED and Janus @ ClueCon21 (20)

Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
 
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
 
WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
 
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
 
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
 
Janus @ RTC2017 Beijing
Janus @ RTC2017 BeijingJanus @ RTC2017 Beijing
Janus @ RTC2017 Beijing
 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
 
Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 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/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo miniero
 
Spotify: behind the scenes
Spotify: behind the scenesSpotify: behind the scenes
Spotify: behind the scenes
 
FOSS in Broadcast
FOSS in BroadcastFOSS in Broadcast
FOSS in Broadcast
 
Digitizing and Delivering Audio and Video
Digitizing and Delivering Audio and VideoDigitizing and Delivering Audio and Video
Digitizing and Delivering Audio and Video
 

More from 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 ServerLorenzo 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 2023Lorenzo 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 2022Lorenzo Miniero
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Lorenzo Miniero
 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Lorenzo Miniero
 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Lorenzo 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 JanusLorenzo Miniero
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingLorenzo Miniero
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Lorenzo Miniero
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Lorenzo 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 JanusLorenzo Miniero
 

More from Lorenzo Miniero (13)

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
 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
 
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
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021
 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020
 
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 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
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 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
 

Recently uploaded

Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 

Recently uploaded (20)

Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 

WebRTC, RED and Janus @ ClueCon21

  • 1. Audio redundancy in WebRTC and Janus via RED Lorenzo Miniero ClueCon – Chicago, IL, USA (kinda!) October 27th 2021
  • 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://soundcloud.com/lminiero • https://lminiero.bandcamp.com
  • 3. Just a few words on Meetecho • Co-founded in 2009 as an academic spin-off • University research efforts brought to the market • Completely independent from the University • Focus on real-time multimedia applications • Strong perspective on standardization and open source • Several activities • Consulting services • Commercial support and Janus licenses • Streaming of live events (IETF, ACM, etc.) • Proudly brewed in sunny Napoli, Italy
  • 5. Remember Janus? Janus General purpose, open source WebRTC server • https://github.com/meetecho/janus-gateway • Demos and documentation: https://janus.conf.meetecho.com • Community: https://groups.google.com/forum/#!forum/meetecho-janus
  • 8. A ton of scenarios done today with Janus! • SIP and RTSP gatewaying • WebRTC-based call/contact centers • Conferencing & collaboration • E-learning & webinars • Cloud platforms • Media production • Broadcasting & Gaming • Identity verification • Internet of Things • Augmented/Virtual Reality • ...and more!
  • 9. It’s not just about video! • Video obviously takes the lion’s share, most of the times • Pretty much ubiquitous • Most use cases assume video, one way or another • It’s not the only thing that matters, though • We still need to communicate, somehow • Audio (and data) can be just as important, if not more • Some applications even focus JUST on audio! • ... and not only call/contact centers, PBX, or legacy infrastructures
  • 10. It’s not just about video! • Video obviously takes the lion’s share, most of the times • Pretty much ubiquitous • Most use cases assume video, one way or another • It’s not the only thing that matters, though • We still need to communicate, somehow • Audio (and data) can be just as important, if not more • Some applications even focus JUST on audio! • ... and not only call/contact centers, PBX, or legacy infrastructures
  • 11. It’s not just about video! • Video obviously takes the lion’s share, most of the times • Pretty much ubiquitous • Most use cases assume video, one way or another • It’s not the only thing that matters, though • We still need to communicate, somehow • Audio (and data) can be just as important, if not more • Some applications even focus JUST on audio! • ... and not only call/contact centers, PBX, or legacy infrastructures
  • 12. A relevant example: Clubhouse
  • 13. Another relevant example: Twitter Spaces
  • 14. You didn’t hear it from me...
  • 15. “Can WebRTC help musicians?” https://fosdem.org/2021/schedule/event/webrtc_musicians/
  • 16. WebRTC and audio • A couple of mandatory-to-implement codecs • Opus + G.711 • G.711 just there as a fallback (and legacy interopability) • Opus FTW! • High quality audio codec designed for the Internet • Very flexible in sampling rates, bitrates, etc. • Support for stereo, and different “profiles” for voice/music • Surround availble too, on an experimental basis (multiopus) • A few interesting “tools” • Audio levels RTP extension (VAD) • Opus inband Forward Error Correction (FEC) • Opus Discontinuous transmission (DTX)
  • 17. WebRTC and audio • A couple of mandatory-to-implement codecs • Opus + G.711 • G.711 just there as a fallback (and legacy interopability) • Opus FTW! • High quality audio codec designed for the Internet • Very flexible in sampling rates, bitrates, etc. • Support for stereo, and different “profiles” for voice/music • Surround availble too, on an experimental basis (multiopus) • A few interesting “tools” • Audio levels RTP extension (VAD) • Opus inband Forward Error Correction (FEC) • Opus Discontinuous transmission (DTX)
  • 18. WebRTC and audio • A couple of mandatory-to-implement codecs • Opus + G.711 • G.711 just there as a fallback (and legacy interopability) • Opus FTW! • High quality audio codec designed for the Internet • Very flexible in sampling rates, bitrates, etc. • Support for stereo, and different “profiles” for voice/music • Surround availble too, on an experimental basis (multiopus) • A few interesting “tools” • Audio levels RTP extension (VAD) • Opus inband Forward Error Correction (FEC) • Opus Discontinuous transmission (DTX)
  • 19. Audio-only: SFU or MCU? • SFUs ideal to just relay media • No mixing/transcoding to worry about −→ less CPU on server, less delay • More streams to distribute −→ more bandwidth needed • Different streams −→ more control on UI • MCUs ideal to just mix media • Mixing/transcoding taking place −→ more CPU on server, more delay • Just one stream to distribute −→ bandwidth constant • Single output stream −→ UI rendering constrained • Sometimes it makes sense to use them both! • Use SFU where applicable (e.g., video, plenty of bandwidth) • Use MCU to complement (e.g., audio, lower power devices) • Besides, an MCU can mix SFU streams to broadcast to a CDN!
  • 20. Audio-only: SFU or MCU? • SFUs ideal to just relay media • No mixing/transcoding to worry about −→ less CPU on server, less delay • More streams to distribute −→ more bandwidth needed • Different streams −→ more control on UI • MCUs ideal to just mix media • Mixing/transcoding taking place −→ more CPU on server, more delay • Just one stream to distribute −→ bandwidth constant • Single output stream −→ UI rendering constrained • Sometimes it makes sense to use them both! • Use SFU where applicable (e.g., video, plenty of bandwidth) • Use MCU to complement (e.g., audio, lower power devices) • Besides, an MCU can mix SFU streams to broadcast to a CDN!
  • 21. Audio-only: SFU or MCU? • SFUs ideal to just relay media • No mixing/transcoding to worry about −→ less CPU on server, less delay • More streams to distribute −→ more bandwidth needed • Different streams −→ more control on UI • MCUs ideal to just mix media • Mixing/transcoding taking place −→ more CPU on server, more delay • Just one stream to distribute −→ bandwidth constant • Single output stream −→ UI rendering constrained • Sometimes it makes sense to use them both! • Use SFU where applicable (e.g., video, plenty of bandwidth) • Use MCU to complement (e.g., audio, lower power devices) • Besides, an MCU can mix SFU streams to broadcast to a CDN!
  • 22. We do use both in our Virtual Event Platform! https://commcon.xyz/session/turning-live-events-to-virtual-with-janus
  • 23. Many efforts focused on audio in Janus, recently • Modular nature of Janus encourages new functionality • Not necessarily in new plugins • VideoRoom, AudioBridge, Streaming plugins can all benefit • Several activities done, started or planned to enhance audio experience • Mostly in AudioBridge... (due to the nature of the plugin) • ... but some features actually available to all plugins! • Many coming from requirements for our Virtual Event Platform • But we like to experiment as well! • Main topic of a recent talk @ Open Source World • https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
  • 24. Many efforts focused on audio in Janus, recently • Modular nature of Janus encourages new functionality • Not necessarily in new plugins • VideoRoom, AudioBridge, Streaming plugins can all benefit • Several activities done, started or planned to enhance audio experience • Mostly in AudioBridge... (due to the nature of the plugin) • ... but some features actually available to all plugins! • Many coming from requirements for our Virtual Event Platform • But we like to experiment as well! • Main topic of a recent talk @ Open Source World • https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
  • 25. Many efforts focused on audio in Janus, recently • Modular nature of Janus encourages new functionality • Not necessarily in new plugins • VideoRoom, AudioBridge, Streaming plugins can all benefit • Several activities done, started or planned to enhance audio experience • Mostly in AudioBridge... (due to the nature of the plugin) • ... but some features actually available to all plugins! • Many coming from requirements for our Virtual Event Platform • But we like to experiment as well! • Main topic of a recent talk @ Open Source World • https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
  • 26. Many efforts focused on audio in Janus, recently • Modular nature of Janus encourages new functionality • Not necessarily in new plugins • VideoRoom, AudioBridge, Streaming plugins can all benefit • Several activities done, started or planned to enhance audio experience • Mostly in AudioBridge... (due to the nature of the plugin) • ... but some features actually available to all plugins! • Many coming from requirements for our Virtual Event Platform • But we like to experiment as well! • Main topic of a recent talk @ Open Source World • https://www.slideshare.net/LorenzoMiniero/janus-audio-open-source-world
  • 27. Audio redundancy via RED • Old RTP payload format for Redundant Audio Data (RED) • https://datatracker.ietf.org/doc/html/rfc2198 • Recently added to Chrome on an experimental basis • https://bugs.chromium.org/p/webrtc/issues/detail?id=11640 • https://webrtchacks.com/red-improving-audio-quality-with-redundancy/ • https://webrtchacks.com/implementing-redundant-audio-on-an-sfu/ • Basically a simple way to group multiple audio frames in a single RTP packet • Current audio frame + one or more previously sent frames • Allows recipient to easily recover lost packets at the cost of more bandwidth
  • 28. Audio redundancy via RED • Old RTP payload format for Redundant Audio Data (RED) • https://datatracker.ietf.org/doc/html/rfc2198 • Recently added to Chrome on an experimental basis • https://bugs.chromium.org/p/webrtc/issues/detail?id=11640 • https://webrtchacks.com/red-improving-audio-quality-with-redundancy/ • https://webrtchacks.com/implementing-redundant-audio-on-an-sfu/ • Basically a simple way to group multiple audio frames in a single RTP packet • Current audio frame + one or more previously sent frames • Allows recipient to easily recover lost packets at the cost of more bandwidth
  • 29. Audio redundancy via RED • Old RTP payload format for Redundant Audio Data (RED) • https://datatracker.ietf.org/doc/html/rfc2198 • Recently added to Chrome on an experimental basis • https://bugs.chromium.org/p/webrtc/issues/detail?id=11640 • https://webrtchacks.com/red-improving-audio-quality-with-redundancy/ • https://webrtchacks.com/implementing-redundant-audio-on-an-sfu/ • Basically a simple way to group multiple audio frames in a single RTP packet • Current audio frame + one or more previously sent frames • Allows recipient to easily recover lost packets at the cost of more bandwidth
  • 35. Negotiating RED in SDP Offer (“I support RED”) m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126 [..] a=rtpmap:111 opus/48000/2 a=rtpmap:63 red/48000/2 a=fmtp:63 111/111 [..] Answer (”Ok, let’s use RED”) m=audio 9 UDP/TLS/RTP/SAVPF 63 111 [..] a=rtpmap:63 red/48000/2 a=rtpmap:111 opus/48000/2 a=fmtp:63 111/111 [..]
  • 36. Support for audio redundancy via RED in Janus • Support in Janus needed work in both core and plugins • Core needed to negotiate RED, and be able to unpack/pack RED • Plugins needed to be able to do something with the data • Important to support both endpoints that can do RED, and those who can’t • RED-to-RED and nonRED-to-nonRED are easy • In other cases, Janus may have to pack/unpack RED accordingly • First integration basically done in most plugins • Still missing in AudioBridge, though If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 37. Support for audio redundancy via RED in Janus • Support in Janus needed work in both core and plugins • Core needed to negotiate RED, and be able to unpack/pack RED • Plugins needed to be able to do something with the data • Important to support both endpoints that can do RED, and those who can’t • RED-to-RED and nonRED-to-nonRED are easy • In other cases, Janus may have to pack/unpack RED accordingly • First integration basically done in most plugins • Still missing in AudioBridge, though If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 38. Support for audio redundancy via RED in Janus • Support in Janus needed work in both core and plugins • Core needed to negotiate RED, and be able to unpack/pack RED • Plugins needed to be able to do something with the data • Important to support both endpoints that can do RED, and those who can’t • RED-to-RED and nonRED-to-nonRED are easy • In other cases, Janus may have to pack/unpack RED accordingly • First integration basically done in most plugins • Still missing in AudioBridge, though If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 39. Support for audio redundancy via RED in Janus • Support in Janus needed work in both core and plugins • Core needed to negotiate RED, and be able to unpack/pack RED • Plugins needed to be able to do something with the data • Important to support both endpoints that can do RED, and those who can’t • RED-to-RED and nonRED-to-nonRED are easy • In other cases, Janus may have to pack/unpack RED accordingly • First integration basically done in most plugins • Still missing in AudioBridge, though If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 45. A few challenges to address • RED to non-RED doesn’t currently take into account redundant info • If RED packet N-1 is lost, we don’t use packet N to get lost one • RED packetization code in Janus assumes in-order packets • May not always be the case (e.g., Streaming plugin and external RTP source) • RED packetization is shared when doing one-to-many • New subscribers get redundant info on pre-join audio packets • Switching subscription in-session briefly mixes redundant info of different sessions • (N-1 of new stream) != (N-1 of previous stream) • Discontinuous Transmission (DTX) can cause issues • Big timestamp jumps can overflow the smaller “timestamp” diff in RED
  • 46. A few challenges to address • RED to non-RED doesn’t currently take into account redundant info • If RED packet N-1 is lost, we don’t use packet N to get lost one • RED packetization code in Janus assumes in-order packets • May not always be the case (e.g., Streaming plugin and external RTP source) • RED packetization is shared when doing one-to-many • New subscribers get redundant info on pre-join audio packets • Switching subscription in-session briefly mixes redundant info of different sessions • (N-1 of new stream) != (N-1 of previous stream) • Discontinuous Transmission (DTX) can cause issues • Big timestamp jumps can overflow the smaller “timestamp” diff in RED
  • 47. A few challenges to address • RED to non-RED doesn’t currently take into account redundant info • If RED packet N-1 is lost, we don’t use packet N to get lost one • RED packetization code in Janus assumes in-order packets • May not always be the case (e.g., Streaming plugin and external RTP source) • RED packetization is shared when doing one-to-many • New subscribers get redundant info on pre-join audio packets • Switching subscription in-session briefly mixes redundant info of different sessions • (N-1 of new stream) != (N-1 of previous stream) • Discontinuous Transmission (DTX) can cause issues • Big timestamp jumps can overflow the smaller “timestamp” diff in RED
  • 48. A few challenges to address • RED to non-RED doesn’t currently take into account redundant info • If RED packet N-1 is lost, we don’t use packet N to get lost one • RED packetization code in Janus assumes in-order packets • May not always be the case (e.g., Streaming plugin and external RTP source) • RED packetization is shared when doing one-to-many • New subscribers get redundant info on pre-join audio packets • Switching subscription in-session briefly mixes redundant info of different sessions • (N-1 of new stream) != (N-1 of previous stream) • Discontinuous Transmission (DTX) can cause issues • Big timestamp jumps can overflow the smaller “timestamp” diff in RED
  • 49. A few challenges to address • RED to non-RED doesn’t currently take into account redundant info • If RED packet N-1 is lost, we don’t use packet N to get lost one • RED packetization code in Janus assumes in-order packets • May not always be the case (e.g., Streaming plugin and external RTP source) • RED packetization is shared when doing one-to-many • New subscribers get redundant info on pre-join audio packets • Switching subscription in-session briefly mixes redundant info of different sessions • (N-1 of new stream) != (N-1 of previous stream) • Discontinuous Transmission (DTX) can cause issues • Big timestamp jumps can overflow the smaller “timestamp” diff in RED
  • 50. What about the impact on bandwidth? • RED does help with redundancy... • ... but uses much more bandwidth than usual for audio! • Initial integration in Chrome used distance of two “generations” • Each audio packet contains payload of previous two packets • Bitrate of audio stream increases considerably! • Less bandwidth available for other streams, e.g., video • Latest version defaults to a single redundant packet instead • Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
  • 51. What about the impact on bandwidth? • RED does help with redundancy... • ... but uses much more bandwidth than usual for audio! • Initial integration in Chrome used distance of two “generations” • Each audio packet contains payload of previous two packets • Bitrate of audio stream increases considerably! • Less bandwidth available for other streams, e.g., video • Latest version defaults to a single redundant packet instead • Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
  • 52. What about the impact on bandwidth? • RED does help with redundancy... • ... but uses much more bandwidth than usual for audio! • Initial integration in Chrome used distance of two “generations” • Each audio packet contains payload of previous two packets • Bitrate of audio stream increases considerably! • Less bandwidth available for other streams, e.g., video • Latest version defaults to a single redundant packet instead • Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
  • 53. What about the impact on bandwidth? • RED does help with redundancy... • ... but uses much more bandwidth than usual for audio! • Initial integration in Chrome used distance of two “generations” • Each audio packet contains payload of previous two packets • Bitrate of audio stream increases considerably! • Less bandwidth available for other streams, e.g., video • Latest version defaults to a single redundant packet instead • Overridable with WebRTC-Audio-Red-For-Opus/Enabled-[1-9]/
  • 54. Thanks! Questions? Comments? Get in touch! • https://twitter.com/elminiero • https://twitter.com/meetecho • https://www.meetecho.com