SlideShare une entreprise Scribd logo
1  sur  105
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023Lorenzo Miniero
 
Alexei Vladishev - Zabbix - Monitoring Solution for Everyone
Alexei Vladishev - Zabbix - Monitoring Solution for EveryoneAlexei Vladishev - Zabbix - Monitoring Solution for Everyone
Alexei Vladishev - Zabbix - Monitoring Solution for EveryoneZabbix
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版Contest Ntt-west
 
An SFU/MCU integration for heterogeneous environments
An SFU/MCU integration for heterogeneous environmentsAn SFU/MCU integration for heterogeneous environments
An SFU/MCU integration for heterogeneous environmentsGiacomo Vacca
 
Janus conf19: TUTORIAL: KITE with network-instrumentation
Janus conf19: TUTORIAL: KITE with network-instrumentationJanus conf19: TUTORIAL: KITE with network-instrumentation
Janus conf19: TUTORIAL: KITE with network-instrumentationAlexandre Gouaillard
 
Developing with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDeveloping with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDragan Panjkov
 
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022Lorenzo Miniero
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編Contest Ntt-west
 
Configuring the Device as a PPPoE Client on Huawei AR1200
Configuring the Device as a PPPoE Client on Huawei AR1200Configuring the Device as a PPPoE Client on Huawei AR1200
Configuring the Device as a PPPoE Client on Huawei AR1200Huanetwork
 
CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)
CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)
CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)Chen Cheng-Wei
 
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parserfukamachi
 
Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6Educática
 
WebRTC overview
WebRTC overviewWebRTC overview
WebRTC overviewRouyun Pan
 
Using DASH and MPEG-2 TS
Using DASH and MPEG-2 TSUsing DASH and MPEG-2 TS
Using DASH and MPEG-2 TSAlex Giladi
 
Avaya outbound update apr 2015
Avaya outbound update apr 2015Avaya outbound update apr 2015
Avaya outbound update apr 2015David Ward
 
How VXLAN works on Linux
How VXLAN works on LinuxHow VXLAN works on Linux
How VXLAN works on LinuxEtsuji Nakai
 
Ce hv7 module 05 system hacking
Ce hv7 module 05 system hackingCe hv7 module 05 system hacking
Ce hv7 module 05 system hackingZuleima Parada
 

Tendances (20)

Understanding Keylogger
Understanding KeyloggerUnderstanding Keylogger
Understanding Keylogger
 
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
 
Alexei Vladishev - Zabbix - Monitoring Solution for Everyone
Alexei Vladishev - Zabbix - Monitoring Solution for EveryoneAlexei Vladishev - Zabbix - Monitoring Solution for Everyone
Alexei Vladishev - Zabbix - Monitoring Solution for Everyone
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版
 
An SFU/MCU integration for heterogeneous environments
An SFU/MCU integration for heterogeneous environmentsAn SFU/MCU integration for heterogeneous environments
An SFU/MCU integration for heterogeneous environments
 
Janus conf19: TUTORIAL: KITE with network-instrumentation
Janus conf19: TUTORIAL: KITE with network-instrumentationJanus conf19: TUTORIAL: KITE with network-instrumentation
Janus conf19: TUTORIAL: KITE with network-instrumentation
 
Developing with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premisesDeveloping with SharePoint Framework (SPFx) on-premises
Developing with SharePoint Framework (SPFx) on-premises
 
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編
 
Vpn presentation
Vpn presentationVpn presentation
Vpn presentation
 
Configuring the Device as a PPPoE Client on Huawei AR1200
Configuring the Device as a PPPoE Client on Huawei AR1200Configuring the Device as a PPPoE Client on Huawei AR1200
Configuring the Device as a PPPoE Client on Huawei AR1200
 
CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)
CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)
CI/CD、自動化,你還沒準備好(GCPUG.TW Meetup #34)
 
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parser
 
Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6Asignación de bloques de direcciones IPv6
Asignación de bloques de direcciones IPv6
 
WebRTC overview
WebRTC overviewWebRTC overview
WebRTC overview
 
Design Fundamentals for Remote and Branch Access Networks
Design Fundamentals for Remote and Branch Access NetworksDesign Fundamentals for Remote and Branch Access Networks
Design Fundamentals for Remote and Branch Access Networks
 
Using DASH and MPEG-2 TS
Using DASH and MPEG-2 TSUsing DASH and MPEG-2 TS
Using DASH and MPEG-2 TS
 
Avaya outbound update apr 2015
Avaya outbound update apr 2015Avaya outbound update apr 2015
Avaya outbound update apr 2015
 
How VXLAN works on Linux
How VXLAN works on LinuxHow VXLAN works on Linux
How VXLAN works on Linux
 
Ce hv7 module 05 system hacking
Ce hv7 module 05 system hackingCe hv7 module 05 system hacking
Ce hv7 module 05 system hacking
 

Similaire à Janus + Audio @ Open Source World

Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Lorenzo Miniero
 
WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023Lorenzo Miniero
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022Lorenzo Miniero
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Lorenzo Miniero
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Lorenzo Miniero
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Lorenzo Miniero
 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Lorenzo Miniero
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017Lorenzo Miniero
 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDLorenzo 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 2019Lorenzo Miniero
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021Lorenzo Miniero
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Lorenzo Miniero
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Lorenzo Miniero
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroGreg Kawere
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with JanusLorenzo Miniero
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUppersideConferences
 

Similaire à Janus + Audio @ Open Source World (20)

Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
 
WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022
 
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
 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
 
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
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
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
 

Plus de 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 2024Lorenzo Miniero
 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerLorenzo Miniero
 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Lorenzo Miniero
 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!Lorenzo Miniero
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceLorenzo Miniero
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Lorenzo Miniero
 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Lorenzo Miniero
 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSLorenzo Miniero
 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Lorenzo Miniero
 
Turning live events to virtual with Janus
Turning live events to virtual with JanusTurning live events to virtual with Janus
Turning live events to virtual with JanusLorenzo Miniero
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Lorenzo Miniero
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Lorenzo Miniero
 

Plus de Lorenzo Miniero (13)

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!
 
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 RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
 

Dernier

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Dernier (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

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