SlideShare a Scribd company logo
Audio ergo sum: Playing with
Audio-only Streams in WebRTC and Janus
Lorenzo Miniero
Open Source World – Miami, FL, USA (kinda!)
June 23rd 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
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!
WebRTC reference architecture: peer-to-peer
WebRTC reference architecture: peer-to-peer
Involving a server as a peer (and applications)
Involving a server as a peer (and applications)
Involving a server as a peer (and applications)
Involving a server as a peer (and applications)
Involving different technologies as well
Involving different technologies as well
Involving different technologies as well
What’s 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
A vibrant community
A vibrant community
A growing community!
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
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!
A quick look at plugins: EchoTest
https://janus.conf.meetecho.com/docs/echotest
A quick look at plugins: Record & Play
https://janus.conf.meetecho.com/docs/recordplay
A quick look at plugins: Record & Play
https://janus.conf.meetecho.com/docs/recordplay
A quick look at plugins: SIP gateway
https://janus.conf.meetecho.com/docs/sipsofia
A quick look at plugins: NoSIP plugin
https://janus.conf.meetecho.com/docs/nosip
A quick look at plugins: Audio MCU
https://janus.conf.meetecho.com/docs/audiobridge
A quick look at plugins: Video SFU
https://janus.conf.meetecho.com/docs/videoroom
A quick look at plugins: Streaming
https://janus.conf.meetecho.com/docs/streaming
Combining plugins: Webinar example
Combining plugins: SocialTV example
It’s not just about video!
• Video obviously takes the lion share
• 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 share
• 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 share
• 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
• 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
• 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
• 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!
A simple use case to start from: podcasts
• Good example that combines interaction and scalability requirements
• One or more people talking, and a (potentially) wide audience
• Ability to invite people in can be a plus
• WebRTC a good fit for the conversation part
• Easy to have a chat just using your browser
• Broadcasting could be done with WebRTC too!
• May make sense to have the conversation mixed, though
• If broadcasting with WebRTC, the more the speakers, the more the bandwidth
• If NOT broadcasting with WebRTC, you need a mix to transcode anyway
• More control on additional media (e.g., themes, clips, ads, etc.)
• How to optimize mixing with the ability to bring people in in a scalable way?
A simple use case to start from: podcasts
• Good example that combines interaction and scalability requirements
• One or more people talking, and a (potentially) wide audience
• Ability to invite people in can be a plus
• WebRTC a good fit for the conversation part
• Easy to have a chat just using your browser
• Broadcasting could be done with WebRTC too!
• May make sense to have the conversation mixed, though
• If broadcasting with WebRTC, the more the speakers, the more the bandwidth
• If NOT broadcasting with WebRTC, you need a mix to transcode anyway
• More control on additional media (e.g., themes, clips, ads, etc.)
• How to optimize mixing with the ability to bring people in in a scalable way?
A simple use case to start from: podcasts
• Good example that combines interaction and scalability requirements
• One or more people talking, and a (potentially) wide audience
• Ability to invite people in can be a plus
• WebRTC a good fit for the conversation part
• Easy to have a chat just using your browser
• Broadcasting could be done with WebRTC too!
• May make sense to have the conversation mixed, though
• If broadcasting with WebRTC, the more the speakers, the more the bandwidth
• If NOT broadcasting with WebRTC, you need a mix to transcode anyway
• More control on additional media (e.g., themes, clips, ads, etc.)
• How to optimize mixing with the ability to bring people in in a scalable way?
A simple use case to start from: podcasts
• Good example that combines interaction and scalability requirements
• One or more people talking, and a (potentially) wide audience
• Ability to invite people in can be a plus
• WebRTC a good fit for the conversation part
• Easy to have a chat just using your browser
• Broadcasting could be done with WebRTC too!
• May make sense to have the conversation mixed, though
• If broadcasting with WebRTC, the more the speakers, the more the bandwidth
• If NOT broadcasting with WebRTC, you need a mix to transcode anyway
• More control on additional media (e.g., themes, clips, ads, etc.)
• How to optimize mixing with the ability to bring people in in a scalable way?
Remember the AudioBridge plugin?
Bringing RTP forwarders into the picture
AudioBridge + RTP forwarding + Streaming
AudioBridge + RTP forwarding + Streaming
AudioBridge + RTP forwarding + Streaming
Using this approach for interpreter services
Foundation for our Virtual Event Platform
https://commcon.xyz/session/turning-live-events-to-virtual-with-janus
New audio-related Janus efforts
• 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!
New audio-related Janus efforts
• 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!
New audio-related Janus efforts
• 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!
New audio-related Janus efforts
• 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!
Multiopus: 5.1 and 7.1 surround audio
• This is little known, but Chrome does support surround audio in WebRTC
• Not really documented or standardized, though
• Mostly just there because it’s used by Stadia, today
• Multiopus (5.1 and 7.1)
• Each packet is basically OGG with multiple stereo Opus streams
• Number of streams determines number of channels (SDP munging for mapping)
• We have a cool demo, which currently doesn’t work due to a bug in Chrome...
• https://janus.conf.meetecho.com/multiopus.html
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2059
Multiopus: 5.1 and 7.1 surround audio
• This is little known, but Chrome does support surround audio in WebRTC
• Not really documented or standardized, though
• Mostly just there because it’s used by Stadia, today
• Multiopus (5.1 and 7.1)
• Each packet is basically OGG with multiple stereo Opus streams
• Number of streams determines number of channels (SDP munging for mapping)
• We have a cool demo, which currently doesn’t work due to a bug in Chrome...
• https://janus.conf.meetecho.com/multiopus.html
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2059
Multiopus: 5.1 and 7.1 surround audio
• This is little known, but Chrome does support surround audio in WebRTC
• Not really documented or standardized, though
• Mostly just there because it’s used by Stadia, today
• Multiopus (5.1 and 7.1)
• Each packet is basically OGG with multiple stereo Opus streams
• Number of streams determines number of channels (SDP munging for mapping)
• We have a cool demo, which currently doesn’t work due to a bug in Chrome...
• https://janus.conf.meetecho.com/multiopus.html
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2059
Multiopus: 5.1 and 7.1 surround audio
• This is little known, but Chrome does support surround audio in WebRTC
• Not really documented or standardized, though
• Mostly just there because it’s used by Stadia, today
• Multiopus (5.1 and 7.1)
• Each packet is basically OGG with multiple stereo Opus streams
• Number of streams determines number of channels (SDP munging for mapping)
• We have a cool demo, which currently doesn’t work due to a bug in Chrome...
• https://janus.conf.meetecho.com/multiopus.html
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2059
Multiopus: 5.1 and 7.1 surround audio
Playback of pre-recorded streams in AudioBridge
• We kinda had it already, but in a different plugin
• Streaming plugin always supported streaming static audio files via WebRTC
• Initially G.711 files only, now Opus as well (check the demos online!)
• We needed it in AudioBridge as well
• e.g., to play announcements or background music
• Basically a way to play an Opus file in an Opus room
• Now used in several contexts in production environments
• e.g., WebRTC-based auctions services
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2088
Playback of pre-recorded streams in AudioBridge
• We kinda had it already, but in a different plugin
• Streaming plugin always supported streaming static audio files via WebRTC
• Initially G.711 files only, now Opus as well (check the demos online!)
• We needed it in AudioBridge as well
• e.g., to play announcements or background music
• Basically a way to play an Opus file in an Opus room
• Now used in several contexts in production environments
• e.g., WebRTC-based auctions services
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2088
Playback of pre-recorded streams in AudioBridge
• We kinda had it already, but in a different plugin
• Streaming plugin always supported streaming static audio files via WebRTC
• Initially G.711 files only, now Opus as well (check the demos online!)
• We needed it in AudioBridge as well
• e.g., to play announcements or background music
• Basically a way to play an Opus file in an Opus room
• Now used in several contexts in production environments
• e.g., WebRTC-based auctions services
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2088
Playback of pre-recorded streams in AudioBridge
• We kinda had it already, but in a different plugin
• Streaming plugin always supported streaming static audio files via WebRTC
• Initially G.711 files only, now Opus as well (check the demos online!)
• We needed it in AudioBridge as well
• e.g., to play announcements or background music
• Basically a way to play an Opus file in an Opus room
• Now used in several contexts in production environments
• e.g., WebRTC-based auctions services
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2088
Playback of pre-recorded streams in AudioBridge
Spatial audio support in AudioBridge
• Besides experimental surround, WebRTC supports “regular” stereo too
• Easy to enable via negotiation in SDP
• Supported in most Janus plugins that simply relay media
• AudioBridge so far limited to mono only, though
• Decoding and mixing needs to be aware of number of channels
• Stereo mixing more complex as well
• Effort started to add stereo mode, and use it for spatial audio
• Participants joining can send/receive stereo audio
• Spatial positioning for participants in stereo space (0=L, 50=C, 100=R)
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2446
Spatial audio support in AudioBridge
• Besides experimental surround, WebRTC supports “regular” stereo too
• Easy to enable via negotiation in SDP
• Supported in most Janus plugins that simply relay media
• AudioBridge so far limited to mono only, though
• Decoding and mixing needs to be aware of number of channels
• Stereo mixing more complex as well
• Effort started to add stereo mode, and use it for spatial audio
• Participants joining can send/receive stereo audio
• Spatial positioning for participants in stereo space (0=L, 50=C, 100=R)
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2446
Spatial audio support in AudioBridge
• Besides experimental surround, WebRTC supports “regular” stereo too
• Easy to enable via negotiation in SDP
• Supported in most Janus plugins that simply relay media
• AudioBridge so far limited to mono only, though
• Decoding and mixing needs to be aware of number of channels
• Stereo mixing more complex as well
• Effort started to add stereo mode, and use it for spatial audio
• Participants joining can send/receive stereo audio
• Spatial positioning for participants in stereo space (0=L, 50=C, 100=R)
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2446
Spatial audio support in AudioBridge
• Besides experimental surround, WebRTC supports “regular” stereo too
• Easy to enable via negotiation in SDP
• Supported in most Janus plugins that simply relay media
• AudioBridge so far limited to mono only, though
• Decoding and mixing needs to be aware of number of channels
• Stereo mixing more complex as well
• Effort started to add stereo mode, and use it for spatial audio
• Participants joining can send/receive stereo audio
• Spatial positioning for participants in stereo space (0=L, 50=C, 100=R)
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2446
Spatial audio support in AudioBridge
Support for plain-RTP participants in AudioBridge
• AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer
• Only WebRTC users allowed to join, via the Janus API
• As such, so far no way for, e.g., SIP users to participate
• Backend plain-RTP channel added to address that shortcoming
• Janus API still needed to add and manage RTP participant
• SDP crafting up to application (AudioBridge won’t do SIP/SDP for you)
• Opus still a requirement for participation (no further transcoding)
• In the future, plan is to use this for cascaded mixing as well
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2464
Support for plain-RTP participants in AudioBridge
• AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer
• Only WebRTC users allowed to join, via the Janus API
• As such, so far no way for, e.g., SIP users to participate
• Backend plain-RTP channel added to address that shortcoming
• Janus API still needed to add and manage RTP participant
• SDP crafting up to application (AudioBridge won’t do SIP/SDP for you)
• Opus still a requirement for participation (no further transcoding)
• In the future, plan is to use this for cascaded mixing as well
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2464
Support for plain-RTP participants in AudioBridge
• AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer
• Only WebRTC users allowed to join, via the Janus API
• As such, so far no way for, e.g., SIP users to participate
• Backend plain-RTP channel added to address that shortcoming
• Janus API still needed to add and manage RTP participant
• SDP crafting up to application (AudioBridge won’t do SIP/SDP for you)
• Opus still a requirement for participation (no further transcoding)
• In the future, plan is to use this for cascaded mixing as well
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2464
Support for plain-RTP participants in AudioBridge
• AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer
• Only WebRTC users allowed to join, via the Janus API
• As such, so far no way for, e.g., SIP users to participate
• Backend plain-RTP channel added to address that shortcoming
• Janus API still needed to add and manage RTP participant
• SDP crafting up to application (AudioBridge won’t do SIP/SDP for you)
• Opus still a requirement for participation (no further transcoding)
• In the future, plan is to use this for cascaded mixing as well
Pull request (now merged)
https://github.com/meetecho/janus-gateway/pull/2464
Support for plain-RTP participants in AudioBridge
Grouping participants in AudioBridge
• We introduced AudioBridge RTP forwarders before
• Easy way to forward a room mix, e.g., for broadcasting purposes
• Sometimes helpful to only get a mix of some participants
• e.g., for selective processing of a class of participants
• Added participants tagging functionality to create “groups”
• Nothing changes for participants (they can still all hear each other)
• RTP forwarders, though, can now forward everything or just a group
Pull request (in testing phase)
https://github.com/meetecho/janus-gateway/pull/2653
Grouping participants in AudioBridge
• We introduced AudioBridge RTP forwarders before
• Easy way to forward a room mix, e.g., for broadcasting purposes
• Sometimes helpful to only get a mix of some participants
• e.g., for selective processing of a class of participants
• Added participants tagging functionality to create “groups”
• Nothing changes for participants (they can still all hear each other)
• RTP forwarders, though, can now forward everything or just a group
Pull request (in testing phase)
https://github.com/meetecho/janus-gateway/pull/2653
Grouping participants in AudioBridge
• We introduced AudioBridge RTP forwarders before
• Easy way to forward a room mix, e.g., for broadcasting purposes
• Sometimes helpful to only get a mix of some participants
• e.g., for selective processing of a class of participants
• Added participants tagging functionality to create “groups”
• Nothing changes for participants (they can still all hear each other)
• RTP forwarders, though, can now forward everything or just a group
Pull request (in testing phase)
https://github.com/meetecho/janus-gateway/pull/2653
Grouping participants in AudioBridge
• We introduced AudioBridge RTP forwarders before
• Easy way to forward a room mix, e.g., for broadcasting purposes
• Sometimes helpful to only get a mix of some participants
• e.g., for selective processing of a class of participants
• Added participants tagging functionality to create “groups”
• Nothing changes for participants (they can still all hear each other)
• RTP forwarders, though, can now forward everything or just a group
Pull request (in testing phase)
https://github.com/meetecho/janus-gateway/pull/2653
Grouping participants in AudioBridge
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://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://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://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
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
• EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor
• “Big guns” like AudioBridge and VideoRoom to come next!
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
• EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor
• “Big guns” like AudioBridge and VideoRoom to come next!
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
• EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor
• “Big guns” like AudioBridge and VideoRoom to come next!
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
• EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor
• “Big guns” like AudioBridge and VideoRoom to come next!
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
Thanks! Questions? Comments?
Get in touch!
• https://twitter.com/elminiero
• https://twitter.com/meetecho
• https://www.meetecho.com

More Related Content

What's hot

Using GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnlUsing GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnl
Kentaro Ebisawa
 
Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019
Lorenzo Miniero
 
Asterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus Gateway
Asterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus GatewayAsterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus Gateway
Asterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus Gateway
Alessandro Polidori
 
Kea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISCKea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISC
Men and Mice
 
OpenStack High Availability
OpenStack High AvailabilityOpenStack High Availability
OpenStack High Availability
Jakub Pavlik
 
Prometheus: From technical metrics to business observability
Prometheus: From technical metrics to business observabilityPrometheus: From technical metrics to business observability
Prometheus: From technical metrics to business observability
Julien Pivotto
 
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
ShapeBlue
 
ROS/ROS2 Distributed System with Kubernetes
ROS/ROS2 Distributed System with KubernetesROS/ROS2 Distributed System with Kubernetes
ROS/ROS2 Distributed System with Kubernetes
Tomoya Fujita
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
Lorenzo 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 2020
Lorenzo Miniero
 
meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23
Frederic Leger
 
Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networking
Lorenzo Fontana
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
Jian-Hong Pan
 
Citrix XenDesktop and XenApp 7.5 Architecture Deployment
Citrix XenDesktop and XenApp 7.5 Architecture DeploymentCitrix XenDesktop and XenApp 7.5 Architecture Deployment
Citrix XenDesktop and XenApp 7.5 Architecture Deployment
Huy Pham
 
Kamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load BalancersKamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load Balancers
Daniel-Constantin Mierla
 
Real-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFiReal-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFi
Manish Gupta
 
Apache NiFi Crash Course Intro
Apache NiFi Crash Course IntroApache NiFi Crash Course Intro
Apache NiFi Crash Course Intro
DataWorks Summit/Hadoop Summit
 
Understanding iptables
Understanding iptablesUnderstanding iptables
Understanding iptables
Denys Haryachyy
 
Using Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephUsing Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with Ceph
CloudOps2005
 
Media Handling in FreeSWITCH
Media Handling in FreeSWITCHMedia Handling in FreeSWITCH
Media Handling in FreeSWITCH
Moises Silva
 

What's hot (20)

Using GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnlUsing GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnl
 
Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019
 
Asterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus Gateway
Asterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus GatewayAsterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus Gateway
Asterisk WebRTC frontier: make client SIP Phone with sipML5 and Janus Gateway
 
Kea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISCKea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISC
 
OpenStack High Availability
OpenStack High AvailabilityOpenStack High Availability
OpenStack High Availability
 
Prometheus: From technical metrics to business observability
Prometheus: From technical metrics to business observabilityPrometheus: From technical metrics to business observability
Prometheus: From technical metrics to business observability
 
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
 
ROS/ROS2 Distributed System with Kubernetes
ROS/ROS2 Distributed System with KubernetesROS/ROS2 Distributed System with Kubernetes
ROS/ROS2 Distributed System with Kubernetes
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
 
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
 
meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23meetup devops aix marseille du 16/05/23
meetup devops aix marseille du 16/05/23
 
Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networking
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 
Citrix XenDesktop and XenApp 7.5 Architecture Deployment
Citrix XenDesktop and XenApp 7.5 Architecture DeploymentCitrix XenDesktop and XenApp 7.5 Architecture Deployment
Citrix XenDesktop and XenApp 7.5 Architecture Deployment
 
Kamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load BalancersKamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load Balancers
 
Real-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFiReal-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFi
 
Apache NiFi Crash Course Intro
Apache NiFi Crash Course IntroApache NiFi Crash Course Intro
Apache NiFi Crash Course Intro
 
Understanding iptables
Understanding iptablesUnderstanding iptables
Understanding iptables
 
Using Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephUsing Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with Ceph
 
Media Handling in FreeSWITCH
Media Handling in FreeSWITCHMedia Handling in FreeSWITCH
Media Handling in FreeSWITCH
 

Similar to Janus + Audio @ Open Source World

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
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
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
Lorenzo Miniero
 
Janus @ RTC2017 Beijing
Janus @ RTC2017 BeijingJanus @ RTC2017 Beijing
Janus @ RTC2017 Beijing
Lorenzo Miniero
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
Lorenzo Miniero
 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
Lorenzo Miniero
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
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
 
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
 
How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...
How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...
How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...
Alan Quayle
 
Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019
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
 
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
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019
Lorenzo 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 miniero
Greg Kawere
 
Torino js
Torino jsTorino js
Torino js
Matteo Avalle
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards Update
UppersideConferences
 
Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014
Steffen Larsen
 
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
 
Architecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin SimeArchitecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin Sime
Alan Quayle
 

Similar to Janus + Audio @ Open Source World (20)

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
 
Janus @ RTC2017 Beijing
Janus @ RTC2017 BeijingJanus @ RTC2017 Beijing
Janus @ RTC2017 Beijing
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
 
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
 
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
 
How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...
How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...
How to Architect your WebRTC application, Alberto Gonzalez and Arin Sime, Web...
 
Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019
 
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
 
Torino js
Torino jsTorino js
Torino js
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards Update
 
Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014
 
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
 
Architecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin SimeArchitecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin Sime
 

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
 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
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 Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
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
 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020
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 workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
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
 

More from Lorenzo Miniero (14)

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
 
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
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
 
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
 
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
 
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
 
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

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
 
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
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
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
 
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
 
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
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
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
 
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
 
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
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
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
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.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
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
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
 
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
 

Recently uploaded (20)

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
 
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
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
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
 
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
 
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...
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
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
 
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
 
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
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
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...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.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
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
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
 
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
 

Janus + Audio @ Open Source World

  • 1. Audio ergo sum: Playing with Audio-only Streams in WebRTC and Janus Lorenzo Miniero Open Source World – Miami, FL, USA (kinda!) June 23rd 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
  • 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
  • 7. Involving a server as a peer (and applications)
  • 8. Involving a server as a peer (and applications)
  • 9. Involving a server as a peer (and applications)
  • 10. Involving a server as a peer (and applications)
  • 14. What’s 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
  • 18. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 19. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 20. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 21. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 24. 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!
  • 25. A quick look at plugins: EchoTest https://janus.conf.meetecho.com/docs/echotest
  • 26. A quick look at plugins: Record & Play https://janus.conf.meetecho.com/docs/recordplay
  • 27. A quick look at plugins: Record & Play https://janus.conf.meetecho.com/docs/recordplay
  • 28. A quick look at plugins: SIP gateway https://janus.conf.meetecho.com/docs/sipsofia
  • 29. A quick look at plugins: NoSIP plugin https://janus.conf.meetecho.com/docs/nosip
  • 30. A quick look at plugins: Audio MCU https://janus.conf.meetecho.com/docs/audiobridge
  • 31. A quick look at plugins: Video SFU https://janus.conf.meetecho.com/docs/videoroom
  • 32. A quick look at plugins: Streaming https://janus.conf.meetecho.com/docs/streaming
  • 35. It’s not just about video! • Video obviously takes the lion share • 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
  • 36. It’s not just about video! • Video obviously takes the lion share • 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
  • 37. It’s not just about video! • Video obviously takes the lion share • 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
  • 38. A relevant example: Clubhouse
  • 39. Another relevant example: Twitter Spaces
  • 40. You didn’t hear it from me...
  • 41. “Can WebRTC help musicians?” https://fosdem.org/2021/schedule/event/webrtc_musicians/
  • 42. 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 • A few interesting “tools” • Audio levels RTP extension (VAD) • Opus inband Forward Error Correction (FEC) • Opus Discontinuous transmission (DTX)
  • 43. 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 • A few interesting “tools” • Audio levels RTP extension (VAD) • Opus inband Forward Error Correction (FEC) • Opus Discontinuous transmission (DTX)
  • 44. 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 • A few interesting “tools” • Audio levels RTP extension (VAD) • Opus inband Forward Error Correction (FEC) • Opus Discontinuous transmission (DTX)
  • 45. 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!
  • 46. 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!
  • 47. 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!
  • 48. A simple use case to start from: podcasts • Good example that combines interaction and scalability requirements • One or more people talking, and a (potentially) wide audience • Ability to invite people in can be a plus • WebRTC a good fit for the conversation part • Easy to have a chat just using your browser • Broadcasting could be done with WebRTC too! • May make sense to have the conversation mixed, though • If broadcasting with WebRTC, the more the speakers, the more the bandwidth • If NOT broadcasting with WebRTC, you need a mix to transcode anyway • More control on additional media (e.g., themes, clips, ads, etc.) • How to optimize mixing with the ability to bring people in in a scalable way?
  • 49. A simple use case to start from: podcasts • Good example that combines interaction and scalability requirements • One or more people talking, and a (potentially) wide audience • Ability to invite people in can be a plus • WebRTC a good fit for the conversation part • Easy to have a chat just using your browser • Broadcasting could be done with WebRTC too! • May make sense to have the conversation mixed, though • If broadcasting with WebRTC, the more the speakers, the more the bandwidth • If NOT broadcasting with WebRTC, you need a mix to transcode anyway • More control on additional media (e.g., themes, clips, ads, etc.) • How to optimize mixing with the ability to bring people in in a scalable way?
  • 50. A simple use case to start from: podcasts • Good example that combines interaction and scalability requirements • One or more people talking, and a (potentially) wide audience • Ability to invite people in can be a plus • WebRTC a good fit for the conversation part • Easy to have a chat just using your browser • Broadcasting could be done with WebRTC too! • May make sense to have the conversation mixed, though • If broadcasting with WebRTC, the more the speakers, the more the bandwidth • If NOT broadcasting with WebRTC, you need a mix to transcode anyway • More control on additional media (e.g., themes, clips, ads, etc.) • How to optimize mixing with the ability to bring people in in a scalable way?
  • 51. A simple use case to start from: podcasts • Good example that combines interaction and scalability requirements • One or more people talking, and a (potentially) wide audience • Ability to invite people in can be a plus • WebRTC a good fit for the conversation part • Easy to have a chat just using your browser • Broadcasting could be done with WebRTC too! • May make sense to have the conversation mixed, though • If broadcasting with WebRTC, the more the speakers, the more the bandwidth • If NOT broadcasting with WebRTC, you need a mix to transcode anyway • More control on additional media (e.g., themes, clips, ads, etc.) • How to optimize mixing with the ability to bring people in in a scalable way?
  • 53. Bringing RTP forwarders into the picture
  • 54. AudioBridge + RTP forwarding + Streaming
  • 55. AudioBridge + RTP forwarding + Streaming
  • 56. AudioBridge + RTP forwarding + Streaming
  • 57. Using this approach for interpreter services
  • 58. Foundation for our Virtual Event Platform https://commcon.xyz/session/turning-live-events-to-virtual-with-janus
  • 59. New audio-related Janus efforts • 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!
  • 60. New audio-related Janus efforts • 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!
  • 61. New audio-related Janus efforts • 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!
  • 62. New audio-related Janus efforts • 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!
  • 63. Multiopus: 5.1 and 7.1 surround audio • This is little known, but Chrome does support surround audio in WebRTC • Not really documented or standardized, though • Mostly just there because it’s used by Stadia, today • Multiopus (5.1 and 7.1) • Each packet is basically OGG with multiple stereo Opus streams • Number of streams determines number of channels (SDP munging for mapping) • We have a cool demo, which currently doesn’t work due to a bug in Chrome... • https://janus.conf.meetecho.com/multiopus.html Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2059
  • 64. Multiopus: 5.1 and 7.1 surround audio • This is little known, but Chrome does support surround audio in WebRTC • Not really documented or standardized, though • Mostly just there because it’s used by Stadia, today • Multiopus (5.1 and 7.1) • Each packet is basically OGG with multiple stereo Opus streams • Number of streams determines number of channels (SDP munging for mapping) • We have a cool demo, which currently doesn’t work due to a bug in Chrome... • https://janus.conf.meetecho.com/multiopus.html Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2059
  • 65. Multiopus: 5.1 and 7.1 surround audio • This is little known, but Chrome does support surround audio in WebRTC • Not really documented or standardized, though • Mostly just there because it’s used by Stadia, today • Multiopus (5.1 and 7.1) • Each packet is basically OGG with multiple stereo Opus streams • Number of streams determines number of channels (SDP munging for mapping) • We have a cool demo, which currently doesn’t work due to a bug in Chrome... • https://janus.conf.meetecho.com/multiopus.html Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2059
  • 66. Multiopus: 5.1 and 7.1 surround audio • This is little known, but Chrome does support surround audio in WebRTC • Not really documented or standardized, though • Mostly just there because it’s used by Stadia, today • Multiopus (5.1 and 7.1) • Each packet is basically OGG with multiple stereo Opus streams • Number of streams determines number of channels (SDP munging for mapping) • We have a cool demo, which currently doesn’t work due to a bug in Chrome... • https://janus.conf.meetecho.com/multiopus.html Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2059
  • 67. Multiopus: 5.1 and 7.1 surround audio
  • 68. Playback of pre-recorded streams in AudioBridge • We kinda had it already, but in a different plugin • Streaming plugin always supported streaming static audio files via WebRTC • Initially G.711 files only, now Opus as well (check the demos online!) • We needed it in AudioBridge as well • e.g., to play announcements or background music • Basically a way to play an Opus file in an Opus room • Now used in several contexts in production environments • e.g., WebRTC-based auctions services Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2088
  • 69. Playback of pre-recorded streams in AudioBridge • We kinda had it already, but in a different plugin • Streaming plugin always supported streaming static audio files via WebRTC • Initially G.711 files only, now Opus as well (check the demos online!) • We needed it in AudioBridge as well • e.g., to play announcements or background music • Basically a way to play an Opus file in an Opus room • Now used in several contexts in production environments • e.g., WebRTC-based auctions services Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2088
  • 70. Playback of pre-recorded streams in AudioBridge • We kinda had it already, but in a different plugin • Streaming plugin always supported streaming static audio files via WebRTC • Initially G.711 files only, now Opus as well (check the demos online!) • We needed it in AudioBridge as well • e.g., to play announcements or background music • Basically a way to play an Opus file in an Opus room • Now used in several contexts in production environments • e.g., WebRTC-based auctions services Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2088
  • 71. Playback of pre-recorded streams in AudioBridge • We kinda had it already, but in a different plugin • Streaming plugin always supported streaming static audio files via WebRTC • Initially G.711 files only, now Opus as well (check the demos online!) • We needed it in AudioBridge as well • e.g., to play announcements or background music • Basically a way to play an Opus file in an Opus room • Now used in several contexts in production environments • e.g., WebRTC-based auctions services Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2088
  • 72. Playback of pre-recorded streams in AudioBridge
  • 73. Spatial audio support in AudioBridge • Besides experimental surround, WebRTC supports “regular” stereo too • Easy to enable via negotiation in SDP • Supported in most Janus plugins that simply relay media • AudioBridge so far limited to mono only, though • Decoding and mixing needs to be aware of number of channels • Stereo mixing more complex as well • Effort started to add stereo mode, and use it for spatial audio • Participants joining can send/receive stereo audio • Spatial positioning for participants in stereo space (0=L, 50=C, 100=R) Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2446
  • 74. Spatial audio support in AudioBridge • Besides experimental surround, WebRTC supports “regular” stereo too • Easy to enable via negotiation in SDP • Supported in most Janus plugins that simply relay media • AudioBridge so far limited to mono only, though • Decoding and mixing needs to be aware of number of channels • Stereo mixing more complex as well • Effort started to add stereo mode, and use it for spatial audio • Participants joining can send/receive stereo audio • Spatial positioning for participants in stereo space (0=L, 50=C, 100=R) Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2446
  • 75. Spatial audio support in AudioBridge • Besides experimental surround, WebRTC supports “regular” stereo too • Easy to enable via negotiation in SDP • Supported in most Janus plugins that simply relay media • AudioBridge so far limited to mono only, though • Decoding and mixing needs to be aware of number of channels • Stereo mixing more complex as well • Effort started to add stereo mode, and use it for spatial audio • Participants joining can send/receive stereo audio • Spatial positioning for participants in stereo space (0=L, 50=C, 100=R) Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2446
  • 76. Spatial audio support in AudioBridge • Besides experimental surround, WebRTC supports “regular” stereo too • Easy to enable via negotiation in SDP • Supported in most Janus plugins that simply relay media • AudioBridge so far limited to mono only, though • Decoding and mixing needs to be aware of number of channels • Stereo mixing more complex as well • Effort started to add stereo mode, and use it for spatial audio • Participants joining can send/receive stereo audio • Spatial positioning for participants in stereo space (0=L, 50=C, 100=R) Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2446
  • 77. Spatial audio support in AudioBridge
  • 78. Support for plain-RTP participants in AudioBridge • AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer • Only WebRTC users allowed to join, via the Janus API • As such, so far no way for, e.g., SIP users to participate • Backend plain-RTP channel added to address that shortcoming • Janus API still needed to add and manage RTP participant • SDP crafting up to application (AudioBridge won’t do SIP/SDP for you) • Opus still a requirement for participation (no further transcoding) • In the future, plan is to use this for cascaded mixing as well Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2464
  • 79. Support for plain-RTP participants in AudioBridge • AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer • Only WebRTC users allowed to join, via the Janus API • As such, so far no way for, e.g., SIP users to participate • Backend plain-RTP channel added to address that shortcoming • Janus API still needed to add and manage RTP participant • SDP crafting up to application (AudioBridge won’t do SIP/SDP for you) • Opus still a requirement for participation (no further transcoding) • In the future, plan is to use this for cascaded mixing as well Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2464
  • 80. Support for plain-RTP participants in AudioBridge • AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer • Only WebRTC users allowed to join, via the Janus API • As such, so far no way for, e.g., SIP users to participate • Backend plain-RTP channel added to address that shortcoming • Janus API still needed to add and manage RTP participant • SDP crafting up to application (AudioBridge won’t do SIP/SDP for you) • Opus still a requirement for participation (no further transcoding) • In the future, plan is to use this for cascaded mixing as well Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2464
  • 81. Support for plain-RTP participants in AudioBridge • AudioBridge plugin conceived as a simple, and WebRTC-only, audio mixer • Only WebRTC users allowed to join, via the Janus API • As such, so far no way for, e.g., SIP users to participate • Backend plain-RTP channel added to address that shortcoming • Janus API still needed to add and manage RTP participant • SDP crafting up to application (AudioBridge won’t do SIP/SDP for you) • Opus still a requirement for participation (no further transcoding) • In the future, plan is to use this for cascaded mixing as well Pull request (now merged) https://github.com/meetecho/janus-gateway/pull/2464
  • 82. Support for plain-RTP participants in AudioBridge
  • 83. Grouping participants in AudioBridge • We introduced AudioBridge RTP forwarders before • Easy way to forward a room mix, e.g., for broadcasting purposes • Sometimes helpful to only get a mix of some participants • e.g., for selective processing of a class of participants • Added participants tagging functionality to create “groups” • Nothing changes for participants (they can still all hear each other) • RTP forwarders, though, can now forward everything or just a group Pull request (in testing phase) https://github.com/meetecho/janus-gateway/pull/2653
  • 84. Grouping participants in AudioBridge • We introduced AudioBridge RTP forwarders before • Easy way to forward a room mix, e.g., for broadcasting purposes • Sometimes helpful to only get a mix of some participants • e.g., for selective processing of a class of participants • Added participants tagging functionality to create “groups” • Nothing changes for participants (they can still all hear each other) • RTP forwarders, though, can now forward everything or just a group Pull request (in testing phase) https://github.com/meetecho/janus-gateway/pull/2653
  • 85. Grouping participants in AudioBridge • We introduced AudioBridge RTP forwarders before • Easy way to forward a room mix, e.g., for broadcasting purposes • Sometimes helpful to only get a mix of some participants • e.g., for selective processing of a class of participants • Added participants tagging functionality to create “groups” • Nothing changes for participants (they can still all hear each other) • RTP forwarders, though, can now forward everything or just a group Pull request (in testing phase) https://github.com/meetecho/janus-gateway/pull/2653
  • 86. Grouping participants in AudioBridge • We introduced AudioBridge RTP forwarders before • Easy way to forward a room mix, e.g., for broadcasting purposes • Sometimes helpful to only get a mix of some participants • e.g., for selective processing of a class of participants • Added participants tagging functionality to create “groups” • Nothing changes for participants (they can still all hear each other) • RTP forwarders, though, can now forward everything or just a group Pull request (in testing phase) https://github.com/meetecho/janus-gateway/pull/2653
  • 88. 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://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
  • 89. 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://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
  • 90. 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://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
  • 96. 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 • EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor • “Big guns” like AudioBridge and VideoRoom to come next! If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 97. 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 • EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor • “Big guns” like AudioBridge and VideoRoom to come next! If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 98. 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 • EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor • “Big guns” like AudioBridge and VideoRoom to come next! If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 99. 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 • EchoTest, VideoCall, SIP, NoSIP, Record&Play, Streaming, recordings post-processor • “Big guns” like AudioBridge and VideoRoom to come next! If you want to learn more... (PR in testing phase) https://www.meetecho.com/blog/opus-red/
  • 105. Thanks! Questions? Comments? Get in touch! • https://twitter.com/elminiero • https://twitter.com/meetecho • https://www.meetecho.com