SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
Bringing WebRTC to producers using NDI
Lorenzo Miniero
ClueCon TGI2021
February 17th 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!
You may have heard of NDI already
https://youtu.be/qazlTnSjVzA?t=3703 (ClueCon 2020 Dangerous Demos)
Broadcasters love NDI
https://www.meetecho.com/blog/webrtc-ndi/
https://www.meetecho.com/blog/webrtc-ndi-part-2/
What is NDI?
• Network Device Interface (NDI)
• Royalty-free software standard developed by NewTek
• https://www.ndi.tv/
• Live exchange of multimedia streams within the same LAN
• Multichannel and uncompressed media streams (high quality)
• mDNS used for service discovery
• Easy to use (and integrate) native SDK
• Available on Windows, Linux, MacOS, Android, etc.
• https://www.ndi.tv/sdk/
• VLC team working on an alternative implementation
• https://code.videolan.org/jbk/libndi
• Plenty of applications for different use cases
What is NDI?
• Network Device Interface (NDI)
• Royalty-free software standard developed by NewTek
• https://www.ndi.tv/
• Live exchange of multimedia streams within the same LAN
• Multichannel and uncompressed media streams (high quality)
• mDNS used for service discovery
• Easy to use (and integrate) native SDK
• Available on Windows, Linux, MacOS, Android, etc.
• https://www.ndi.tv/sdk/
• VLC team working on an alternative implementation
• https://code.videolan.org/jbk/libndi
• Plenty of applications for different use cases
What is NDI?
• Network Device Interface (NDI)
• Royalty-free software standard developed by NewTek
• https://www.ndi.tv/
• Live exchange of multimedia streams within the same LAN
• Multichannel and uncompressed media streams (high quality)
• mDNS used for service discovery
• Easy to use (and integrate) native SDK
• Available on Windows, Linux, MacOS, Android, etc.
• https://www.ndi.tv/sdk/
• VLC team working on an alternative implementation
• https://code.videolan.org/jbk/libndi
• Plenty of applications for different use cases
What is NDI?
• Network Device Interface (NDI)
• Royalty-free software standard developed by NewTek
• https://www.ndi.tv/
• Live exchange of multimedia streams within the same LAN
• Multichannel and uncompressed media streams (high quality)
• mDNS used for service discovery
• Easy to use (and integrate) native SDK
• Available on Windows, Linux, MacOS, Android, etc.
• https://www.ndi.tv/sdk/
• VLC team working on an alternative implementation
• https://code.videolan.org/jbk/libndi
• Plenty of applications for different use cases
No easy way to do WebRTC, though..?
No easy way to do WebRTC, though..?
No easy way to do WebRTC, though..?
Ouch, that hurts...
Ouch, that hurts...
That hurts even MORE!
That hurts even MORE!
A real use case: CommCon Virtual 2020
• Due to the pandemic, CommCon was done virtually in 2020
• https://2020.commcon.xyz/
• Dan Jenkins, the organizer, wanted pre-recorded talks for more quality
• Speakers would present via WebRTC
• Media production team would record and process
• Per Dan’s words, a bit of a painful process, though
• Mix of different applications for different things
• Jitsi and vMix both used at the same time
• NDI, required by media team, hard to capture
• Manual capture of the Jitsi window for live content
• vMix only supports mixed streams, apparently?
• “Life would have been WAY easier with direct WebRTC-to-NDI...”
A real use case: CommCon Virtual 2020
• Due to the pandemic, CommCon was done virtually in 2020
• https://2020.commcon.xyz/
• Dan Jenkins, the organizer, wanted pre-recorded talks for more quality
• Speakers would present via WebRTC
• Media production team would record and process
• Per Dan’s words, a bit of a painful process, though
• Mix of different applications for different things
• Jitsi and vMix both used at the same time
• NDI, required by media team, hard to capture
• Manual capture of the Jitsi window for live content
• vMix only supports mixed streams, apparently?
• “Life would have been WAY easier with direct WebRTC-to-NDI...”
A real use case: CommCon Virtual 2020
• Due to the pandemic, CommCon was done virtually in 2020
• https://2020.commcon.xyz/
• Dan Jenkins, the organizer, wanted pre-recorded talks for more quality
• Speakers would present via WebRTC
• Media production team would record and process
• Per Dan’s words, a bit of a painful process, though
• Mix of different applications for different things
• Jitsi and vMix both used at the same time
• NDI, required by media team, hard to capture
• Manual capture of the Jitsi window for live content
• vMix only supports mixed streams, apparently?
• “Life would have been WAY easier with direct WebRTC-to-NDI...”
A real use case: CommCon Virtual 2020
• Due to the pandemic, CommCon was done virtually in 2020
• https://2020.commcon.xyz/
• Dan Jenkins, the organizer, wanted pre-recorded talks for more quality
• Speakers would present via WebRTC
• Media production team would record and process
• Per Dan’s words, a bit of a painful process, though
• Mix of different applications for different things
• Jitsi and vMix both used at the same time
• NDI, required by media team, hard to capture
• Manual capture of the Jitsi window for live content
• vMix only supports mixed streams, apparently?
• “Life would have been WAY easier with direct WebRTC-to-NDI...”
A real use case: CommCon Virtual 2020
• Due to the pandemic, CommCon was done virtually in 2020
• https://2020.commcon.xyz/
• Dan Jenkins, the organizer, wanted pre-recorded talks for more quality
• Speakers would present via WebRTC
• Media production team would record and process
• Per Dan’s words, a bit of a painful process, though
• Mix of different applications for different things
• Jitsi and vMix both used at the same time
• NDI, required by media team, hard to capture
• Manual capture of the Jitsi window for live content
• vMix only supports mixed streams, apparently?
• “Life would have been WAY easier with direct WebRTC-to-NDI...”
A real use case: CommCon Virtual 2020
• Due to the pandemic, CommCon was done virtually in 2020
• https://2020.commcon.xyz/
• Dan Jenkins, the organizer, wanted pre-recorded talks for more quality
• Speakers would present via WebRTC
• Media production team would record and process
• Per Dan’s words, a bit of a painful process, though
• Mix of different applications for different things
• Jitsi and vMix both used at the same time
• NDI, required by media team, hard to capture
• Manual capture of the Jitsi window for live content
• vMix only supports mixed streams, apparently?
• “Life would have been WAY easier with direct WebRTC-to-NDI...”
GStreamer NDI plugin can only receive
https://github.com/teltek/gst-plugin-ndi
Challenge accepted!
First experiments (RTP-to-NDI)
First experiments (RTP-to-NDI)
First experiments (RTP-to-NDI)
First experiments (RTP-to-NDI)
First experiments (RTP-to-NDI)
First experiments (RTP-to-NDI)
First experiments (RTP-to-NDI)
How to make that WebRTC compliant?
• First very simple step may be RTP forwarders1
• This prototype supports RTP ingestion already
• VideoRoom + RTP forwarders could easily fill the gap
• Why not something more integrated, though?
• RTP forwarders do require a bit of orchestration (e.g., ports exchange)
• Custom plugin to receive WebRTC streams, maybe?
• Audio/video decoding + NDI translation in plugin itself (lightweight enough)
• Quite a straightforward process
• Janus has its own RTP stack, no need for the one in rtp2ndi
• Everything else can work pretty much the same way
1
Don’t miss my workshop, in a couple of hours
How to make that WebRTC compliant?
• First very simple step may be RTP forwarders1
• This prototype supports RTP ingestion already
• VideoRoom + RTP forwarders could easily fill the gap
• Why not something more integrated, though?
• RTP forwarders do require a bit of orchestration (e.g., ports exchange)
• Custom plugin to receive WebRTC streams, maybe?
• Audio/video decoding + NDI translation in plugin itself (lightweight enough)
• Quite a straightforward process
• Janus has its own RTP stack, no need for the one in rtp2ndi
• Everything else can work pretty much the same way
1
Don’t miss my workshop, in a couple of hours
How to make that WebRTC compliant?
• First very simple step may be RTP forwarders1
• This prototype supports RTP ingestion already
• VideoRoom + RTP forwarders could easily fill the gap
• Why not something more integrated, though?
• RTP forwarders do require a bit of orchestration (e.g., ports exchange)
• Custom plugin to receive WebRTC streams, maybe?
• Audio/video decoding + NDI translation in plugin itself (lightweight enough)
• Quite a straightforward process
• Janus has its own RTP stack, no need for the one in rtp2ndi
• Everything else can work pretty much the same way
1
Don’t miss my workshop, in a couple of hours
Bringing Janus in the picture
Bringing Janus in the picture
Bringing Janus in the picture
Bringing Janus in the picture
Bringing Janus in the picture
Users will not be in your own LAN, though...
• As it is, the plugin works great for local users
• Browsers can connect to the Janus + NDI plugin directly
• The WebRTC-to-NDI feature works seamlessly
• What if you need to bring in someone remote, though?
• Janus + NDI plugin needs to be in the LAN (or NDI won’t work)
• Hard to make Janus server reachable, if it’s behind NAT/firewall
• (and you’ll definitely want the server to be publicly reachable anyway)
• A couple of options, here
1 Transform the code (again) to a “client” that can talk to the public instance
2 Leave Janus as it is, and “use” it as a programmable client instead!
Users will not be in your own LAN, though...
• As it is, the plugin works great for local users
• Browsers can connect to the Janus + NDI plugin directly
• The WebRTC-to-NDI feature works seamlessly
• What if you need to bring in someone remote, though?
• Janus + NDI plugin needs to be in the LAN (or NDI won’t work)
• Hard to make Janus server reachable, if it’s behind NAT/firewall
• (and you’ll definitely want the server to be publicly reachable anyway)
• A couple of options, here
1 Transform the code (again) to a “client” that can talk to the public instance
2 Leave Janus as it is, and “use” it as a programmable client instead!
Users will not be in your own LAN, though...
• As it is, the plugin works great for local users
• Browsers can connect to the Janus + NDI plugin directly
• The WebRTC-to-NDI feature works seamlessly
• What if you need to bring in someone remote, though?
• Janus + NDI plugin needs to be in the LAN (or NDI won’t work)
• Hard to make Janus server reachable, if it’s behind NAT/firewall
• (and you’ll definitely want the server to be publicly reachable anyway)
• A couple of options, here
1 Transform the code (again) to a “client” that can talk to the public instance
2 Leave Janus as it is, and “use” it as a programmable client instead!
Users will not be in your own LAN, though...
• As it is, the plugin works great for local users
• Browsers can connect to the Janus + NDI plugin directly
• The WebRTC-to-NDI feature works seamlessly
• What if you need to bring in someone remote, though?
• Janus + NDI plugin needs to be in the LAN (or NDI won’t work)
• Hard to make Janus server reachable, if it’s behind NAT/firewall
• (and you’ll definitely want the server to be publicly reachable anyway)
• A couple of options, here
1 Transform the code (again) to a “client” that can talk to the public instance
2 Leave Janus as it is, and “use” it as a programmable client instead!
Users will not be in your own LAN, though...
• As it is, the plugin works great for local users
• Browsers can connect to the Janus + NDI plugin directly
• The WebRTC-to-NDI feature works seamlessly
• What if you need to bring in someone remote, though?
• Janus + NDI plugin needs to be in the LAN (or NDI won’t work)
• Hard to make Janus server reachable, if it’s behind NAT/firewall
• (and you’ll definitely want the server to be publicly reachable anyway)
• A couple of options, here
1 Transform the code (again) to a “client” that can talk to the public instance
2 Leave Janus as it is, and “use” it as a programmable client instead!
Bringing Janus (and the Internet) in the picture
Bringing Janus (and the Internet) in the picture
Bringing Janus (and the Internet) in the picture
Bringing Janus (and the Internet) in the picture
Now that it works, why not turn it into a “service”?
Now that it works, why not turn it into a “service”?
• Collaboration between Dan Jenkins (Nimble Ape) and Meetecho
• https://broadcaster.vc/
• Approach pretty much the one we’ve seen in the previous slides
• Public Janus instances for conversations (SaaS, hosted by Nimble Ape)
• Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN
• Orchestration between the two done “automagically”
• Local Janus instance automatically subscribes (WebRTC) to active participants
• NDI feeds automatically generated for who joins your room
Give it a try!
We had to improve a few things first (see next slides), but in Beta now
Now that it works, why not turn it into a “service”?
• Collaboration between Dan Jenkins (Nimble Ape) and Meetecho
• https://broadcaster.vc/
• Approach pretty much the one we’ve seen in the previous slides
• Public Janus instances for conversations (SaaS, hosted by Nimble Ape)
• Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN
• Orchestration between the two done “automagically”
• Local Janus instance automatically subscribes (WebRTC) to active participants
• NDI feeds automatically generated for who joins your room
Give it a try!
We had to improve a few things first (see next slides), but in Beta now
Now that it works, why not turn it into a “service”?
• Collaboration between Dan Jenkins (Nimble Ape) and Meetecho
• https://broadcaster.vc/
• Approach pretty much the one we’ve seen in the previous slides
• Public Janus instances for conversations (SaaS, hosted by Nimble Ape)
• Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN
• Orchestration between the two done “automagically”
• Local Janus instance automatically subscribes (WebRTC) to active participants
• NDI feeds automatically generated for who joins your room
Give it a try!
We had to improve a few things first (see next slides), but in Beta now
Now that it works, why not turn it into a “service”?
• Collaboration between Dan Jenkins (Nimble Ape) and Meetecho
• https://broadcaster.vc/
• Approach pretty much the one we’ve seen in the previous slides
• Public Janus instances for conversations (SaaS, hosted by Nimble Ape)
• Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN
• Orchestration between the two done “automagically”
• Local Janus instance automatically subscribes (WebRTC) to active participants
• NDI feeds automatically generated for who joins your room
Give it a try!
We had to improve a few things first (see next slides), but in Beta now
Two channels are better than one!
Fixing artifacts with a jitter buffer
Fixing wrong image management
Test patterns (“Is this working?”)
Test patterns (“Is this working?”)
Water(marks), water(marks), everywhere
Now we have AV1 in there too!
https://www.meetecho.com/blog/av1-h265-janus/
Action!
https://www.youtube.com/watch?v=6MtH9XV4DfQ
Action!
https://www.youtube.com/watch?v=6MtH9XV4DfQ
Thanks! Questions? Comments?
Get in touch!
• https://twitter.com/elminiero
• https://twitter.com/meetecho
• http://www.meetecho.com

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019
 
Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019
 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020
 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
 
Janus/SIP @ OpenSIPS 2017
Janus/SIP @ OpenSIPS 2017Janus/SIP @ OpenSIPS 2017
Janus/SIP @ OpenSIPS 2017
 
IETF remote participation via Meetecho @ WebRTC Meetup Stockholm
IETF remote participation via Meetecho @ WebRTC Meetup StockholmIETF remote participation via Meetecho @ WebRTC Meetup Stockholm
IETF remote participation via Meetecho @ WebRTC Meetup Stockholm
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017
 
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
 
FOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationFOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentation
 
Janus: an open source and general purpose WebRTC (gateway) server
Janus: an open source and general purpose WebRTC (gateway) serverJanus: an open source and general purpose WebRTC (gateway) server
Janus: an open source and general purpose WebRTC (gateway) server
 
Janus + Audio @ Open Source World
Janus + Audio @ Open Source WorldJanus + Audio @ Open Source World
Janus + Audio @ Open Source World
 
Janus/HOMER/HEPIC @ OpenSIPS18
Janus/HOMER/HEPIC @ OpenSIPS18Janus/HOMER/HEPIC @ OpenSIPS18
Janus/HOMER/HEPIC @ OpenSIPS18
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
 
Talk@JanusCon2019: Janus, WebRTC and ML - Fantastic technologies and how to m...
Talk@JanusCon2019: Janus, WebRTC and ML - Fantastic technologies and how to m...Talk@JanusCon2019: Janus, WebRTC and ML - Fantastic technologies and how to m...
Talk@JanusCon2019: Janus, WebRTC and ML - Fantastic technologies and how to m...
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
 
Janus @ RTC2017 Beijing
Janus @ RTC2017 BeijingJanus @ RTC2017 Beijing
Janus @ RTC2017 Beijing
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
 

Similar a Janus + NDI @ ClueCon 2021

Similar a Janus + NDI @ ClueCon 2021 (20)

WebRTC Standards & Implementation Q&A - The Internals of WebRTC Browsers Impl...
WebRTC Standards & Implementation Q&A - The Internals of WebRTC Browsers Impl...WebRTC Standards & Implementation Q&A - The Internals of WebRTC Browsers Impl...
WebRTC Standards & Implementation Q&A - The Internals of WebRTC Browsers Impl...
 
Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTC
 
WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
 
WebRTC Webinar & Q&A - All About Microsoft & WebRTC Hosting Guest Speaker Ja...
WebRTC Webinar & Q&A -  All About Microsoft & WebRTC Hosting Guest Speaker Ja...WebRTC Webinar & Q&A -  All About Microsoft & WebRTC Hosting Guest Speaker Ja...
WebRTC Webinar & Q&A - All About Microsoft & WebRTC Hosting Guest Speaker Ja...
 
Janus @ DevDay Napoli
Janus @ DevDay NapoliJanus @ DevDay Napoli
Janus @ DevDay Napoli
 
WebRTC Reborn SignalConf 2016
WebRTC Reborn SignalConf 2016WebRTC Reborn SignalConf 2016
WebRTC Reborn SignalConf 2016
 
Twilio Signal 2016 WebRTC Reborn
Twilio Signal 2016 WebRTC RebornTwilio Signal 2016 WebRTC Reborn
Twilio Signal 2016 WebRTC Reborn
 
Recording and media manipulation of WebRTC streams
Recording and media manipulation of WebRTC streamsRecording and media manipulation of WebRTC streams
Recording and media manipulation of WebRTC streams
 
Project Baird — Overview for DVB Meeting 2010-11-23
Project Baird — Overview for DVB Meeting 2010-11-23Project Baird — Overview for DVB Meeting 2010-11-23
Project Baird — Overview for DVB Meeting 2010-11-23
 
WebRTC Live Q&A Session #4 - WebRTC in WebKit and the story around Apple and ...
WebRTC Live Q&A Session #4 - WebRTC in WebKit and the story around Apple and ...WebRTC Live Q&A Session #4 - WebRTC in WebKit and the story around Apple and ...
WebRTC Live Q&A Session #4 - WebRTC in WebKit and the story around Apple and ...
 
Keeping It Realtime!
Keeping It Realtime!Keeping It Realtime!
Keeping It Realtime!
 
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit PreconferenceWebRTC for Telco: Informa's WebRTC Global Summit Preconference
WebRTC for Telco: Informa's WebRTC Global Summit Preconference
 
WebRTC 2014 Conference Closing Panel Survey Results
WebRTC 2014 Conference Closing Panel Survey ResultsWebRTC 2014 Conference Closing Panel Survey Results
WebRTC 2014 Conference Closing Panel Survey Results
 
Marco bizzantino Microsoft-Docker Meetup #4 Docker bday intro
Marco bizzantino Microsoft-Docker Meetup #4 Docker bday introMarco bizzantino Microsoft-Docker Meetup #4 Docker bday intro
Marco bizzantino Microsoft-Docker Meetup #4 Docker bday intro
 
Harnessing the potential of WebRTC
Harnessing the potential of WebRTCHarnessing the potential of WebRTC
Harnessing the potential of WebRTC
 
WebRTC Standards & Implementation Q&A - WebRTC Standards Feature Complete 
No...
WebRTC Standards & Implementation Q&A - WebRTC Standards Feature Complete 
No...WebRTC Standards & Implementation Q&A - WebRTC Standards Feature Complete 
No...
WebRTC Standards & Implementation Q&A - WebRTC Standards Feature Complete 
No...
 
Video production in the cloud for live streaming
Video production in the cloud for live streamingVideo production in the cloud for live streaming
Video production in the cloud for live streaming
 

Más de Lorenzo Miniero

Más de Lorenzo Miniero (12)

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
 
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
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
 
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
 
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
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Último (20)

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 

Janus + NDI @ ClueCon 2021

  • 1. Bringing WebRTC to producers using NDI Lorenzo Miniero ClueCon TGI2021 February 17th 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
  • 5. You may have heard of NDI already https://youtu.be/qazlTnSjVzA?t=3703 (ClueCon 2020 Dangerous Demos)
  • 7. What is NDI? • Network Device Interface (NDI) • Royalty-free software standard developed by NewTek • https://www.ndi.tv/ • Live exchange of multimedia streams within the same LAN • Multichannel and uncompressed media streams (high quality) • mDNS used for service discovery • Easy to use (and integrate) native SDK • Available on Windows, Linux, MacOS, Android, etc. • https://www.ndi.tv/sdk/ • VLC team working on an alternative implementation • https://code.videolan.org/jbk/libndi • Plenty of applications for different use cases
  • 8. What is NDI? • Network Device Interface (NDI) • Royalty-free software standard developed by NewTek • https://www.ndi.tv/ • Live exchange of multimedia streams within the same LAN • Multichannel and uncompressed media streams (high quality) • mDNS used for service discovery • Easy to use (and integrate) native SDK • Available on Windows, Linux, MacOS, Android, etc. • https://www.ndi.tv/sdk/ • VLC team working on an alternative implementation • https://code.videolan.org/jbk/libndi • Plenty of applications for different use cases
  • 9. What is NDI? • Network Device Interface (NDI) • Royalty-free software standard developed by NewTek • https://www.ndi.tv/ • Live exchange of multimedia streams within the same LAN • Multichannel and uncompressed media streams (high quality) • mDNS used for service discovery • Easy to use (and integrate) native SDK • Available on Windows, Linux, MacOS, Android, etc. • https://www.ndi.tv/sdk/ • VLC team working on an alternative implementation • https://code.videolan.org/jbk/libndi • Plenty of applications for different use cases
  • 10. What is NDI? • Network Device Interface (NDI) • Royalty-free software standard developed by NewTek • https://www.ndi.tv/ • Live exchange of multimedia streams within the same LAN • Multichannel and uncompressed media streams (high quality) • mDNS used for service discovery • Easy to use (and integrate) native SDK • Available on Windows, Linux, MacOS, Android, etc. • https://www.ndi.tv/sdk/ • VLC team working on an alternative implementation • https://code.videolan.org/jbk/libndi • Plenty of applications for different use cases
  • 11. No easy way to do WebRTC, though..?
  • 12. No easy way to do WebRTC, though..?
  • 13. No easy way to do WebRTC, though..?
  • 18. A real use case: CommCon Virtual 2020 • Due to the pandemic, CommCon was done virtually in 2020 • https://2020.commcon.xyz/ • Dan Jenkins, the organizer, wanted pre-recorded talks for more quality • Speakers would present via WebRTC • Media production team would record and process • Per Dan’s words, a bit of a painful process, though • Mix of different applications for different things • Jitsi and vMix both used at the same time • NDI, required by media team, hard to capture • Manual capture of the Jitsi window for live content • vMix only supports mixed streams, apparently? • “Life would have been WAY easier with direct WebRTC-to-NDI...”
  • 19. A real use case: CommCon Virtual 2020 • Due to the pandemic, CommCon was done virtually in 2020 • https://2020.commcon.xyz/ • Dan Jenkins, the organizer, wanted pre-recorded talks for more quality • Speakers would present via WebRTC • Media production team would record and process • Per Dan’s words, a bit of a painful process, though • Mix of different applications for different things • Jitsi and vMix both used at the same time • NDI, required by media team, hard to capture • Manual capture of the Jitsi window for live content • vMix only supports mixed streams, apparently? • “Life would have been WAY easier with direct WebRTC-to-NDI...”
  • 20. A real use case: CommCon Virtual 2020 • Due to the pandemic, CommCon was done virtually in 2020 • https://2020.commcon.xyz/ • Dan Jenkins, the organizer, wanted pre-recorded talks for more quality • Speakers would present via WebRTC • Media production team would record and process • Per Dan’s words, a bit of a painful process, though • Mix of different applications for different things • Jitsi and vMix both used at the same time • NDI, required by media team, hard to capture • Manual capture of the Jitsi window for live content • vMix only supports mixed streams, apparently? • “Life would have been WAY easier with direct WebRTC-to-NDI...”
  • 21. A real use case: CommCon Virtual 2020 • Due to the pandemic, CommCon was done virtually in 2020 • https://2020.commcon.xyz/ • Dan Jenkins, the organizer, wanted pre-recorded talks for more quality • Speakers would present via WebRTC • Media production team would record and process • Per Dan’s words, a bit of a painful process, though • Mix of different applications for different things • Jitsi and vMix both used at the same time • NDI, required by media team, hard to capture • Manual capture of the Jitsi window for live content • vMix only supports mixed streams, apparently? • “Life would have been WAY easier with direct WebRTC-to-NDI...”
  • 22. A real use case: CommCon Virtual 2020 • Due to the pandemic, CommCon was done virtually in 2020 • https://2020.commcon.xyz/ • Dan Jenkins, the organizer, wanted pre-recorded talks for more quality • Speakers would present via WebRTC • Media production team would record and process • Per Dan’s words, a bit of a painful process, though • Mix of different applications for different things • Jitsi and vMix both used at the same time • NDI, required by media team, hard to capture • Manual capture of the Jitsi window for live content • vMix only supports mixed streams, apparently? • “Life would have been WAY easier with direct WebRTC-to-NDI...”
  • 23. A real use case: CommCon Virtual 2020 • Due to the pandemic, CommCon was done virtually in 2020 • https://2020.commcon.xyz/ • Dan Jenkins, the organizer, wanted pre-recorded talks for more quality • Speakers would present via WebRTC • Media production team would record and process • Per Dan’s words, a bit of a painful process, though • Mix of different applications for different things • Jitsi and vMix both used at the same time • NDI, required by media team, hard to capture • Manual capture of the Jitsi window for live content • vMix only supports mixed streams, apparently? • “Life would have been WAY easier with direct WebRTC-to-NDI...”
  • 24. GStreamer NDI plugin can only receive https://github.com/teltek/gst-plugin-ndi
  • 33. How to make that WebRTC compliant? • First very simple step may be RTP forwarders1 • This prototype supports RTP ingestion already • VideoRoom + RTP forwarders could easily fill the gap • Why not something more integrated, though? • RTP forwarders do require a bit of orchestration (e.g., ports exchange) • Custom plugin to receive WebRTC streams, maybe? • Audio/video decoding + NDI translation in plugin itself (lightweight enough) • Quite a straightforward process • Janus has its own RTP stack, no need for the one in rtp2ndi • Everything else can work pretty much the same way 1 Don’t miss my workshop, in a couple of hours
  • 34. How to make that WebRTC compliant? • First very simple step may be RTP forwarders1 • This prototype supports RTP ingestion already • VideoRoom + RTP forwarders could easily fill the gap • Why not something more integrated, though? • RTP forwarders do require a bit of orchestration (e.g., ports exchange) • Custom plugin to receive WebRTC streams, maybe? • Audio/video decoding + NDI translation in plugin itself (lightweight enough) • Quite a straightforward process • Janus has its own RTP stack, no need for the one in rtp2ndi • Everything else can work pretty much the same way 1 Don’t miss my workshop, in a couple of hours
  • 35. How to make that WebRTC compliant? • First very simple step may be RTP forwarders1 • This prototype supports RTP ingestion already • VideoRoom + RTP forwarders could easily fill the gap • Why not something more integrated, though? • RTP forwarders do require a bit of orchestration (e.g., ports exchange) • Custom plugin to receive WebRTC streams, maybe? • Audio/video decoding + NDI translation in plugin itself (lightweight enough) • Quite a straightforward process • Janus has its own RTP stack, no need for the one in rtp2ndi • Everything else can work pretty much the same way 1 Don’t miss my workshop, in a couple of hours
  • 36. Bringing Janus in the picture
  • 37. Bringing Janus in the picture
  • 38. Bringing Janus in the picture
  • 39. Bringing Janus in the picture
  • 40. Bringing Janus in the picture
  • 41. Users will not be in your own LAN, though... • As it is, the plugin works great for local users • Browsers can connect to the Janus + NDI plugin directly • The WebRTC-to-NDI feature works seamlessly • What if you need to bring in someone remote, though? • Janus + NDI plugin needs to be in the LAN (or NDI won’t work) • Hard to make Janus server reachable, if it’s behind NAT/firewall • (and you’ll definitely want the server to be publicly reachable anyway) • A couple of options, here 1 Transform the code (again) to a “client” that can talk to the public instance 2 Leave Janus as it is, and “use” it as a programmable client instead!
  • 42. Users will not be in your own LAN, though... • As it is, the plugin works great for local users • Browsers can connect to the Janus + NDI plugin directly • The WebRTC-to-NDI feature works seamlessly • What if you need to bring in someone remote, though? • Janus + NDI plugin needs to be in the LAN (or NDI won’t work) • Hard to make Janus server reachable, if it’s behind NAT/firewall • (and you’ll definitely want the server to be publicly reachable anyway) • A couple of options, here 1 Transform the code (again) to a “client” that can talk to the public instance 2 Leave Janus as it is, and “use” it as a programmable client instead!
  • 43. Users will not be in your own LAN, though... • As it is, the plugin works great for local users • Browsers can connect to the Janus + NDI plugin directly • The WebRTC-to-NDI feature works seamlessly • What if you need to bring in someone remote, though? • Janus + NDI plugin needs to be in the LAN (or NDI won’t work) • Hard to make Janus server reachable, if it’s behind NAT/firewall • (and you’ll definitely want the server to be publicly reachable anyway) • A couple of options, here 1 Transform the code (again) to a “client” that can talk to the public instance 2 Leave Janus as it is, and “use” it as a programmable client instead!
  • 44. Users will not be in your own LAN, though... • As it is, the plugin works great for local users • Browsers can connect to the Janus + NDI plugin directly • The WebRTC-to-NDI feature works seamlessly • What if you need to bring in someone remote, though? • Janus + NDI plugin needs to be in the LAN (or NDI won’t work) • Hard to make Janus server reachable, if it’s behind NAT/firewall • (and you’ll definitely want the server to be publicly reachable anyway) • A couple of options, here 1 Transform the code (again) to a “client” that can talk to the public instance 2 Leave Janus as it is, and “use” it as a programmable client instead!
  • 45. Users will not be in your own LAN, though... • As it is, the plugin works great for local users • Browsers can connect to the Janus + NDI plugin directly • The WebRTC-to-NDI feature works seamlessly • What if you need to bring in someone remote, though? • Janus + NDI plugin needs to be in the LAN (or NDI won’t work) • Hard to make Janus server reachable, if it’s behind NAT/firewall • (and you’ll definitely want the server to be publicly reachable anyway) • A couple of options, here 1 Transform the code (again) to a “client” that can talk to the public instance 2 Leave Janus as it is, and “use” it as a programmable client instead!
  • 46. Bringing Janus (and the Internet) in the picture
  • 47. Bringing Janus (and the Internet) in the picture
  • 48. Bringing Janus (and the Internet) in the picture
  • 49. Bringing Janus (and the Internet) in the picture
  • 50. Now that it works, why not turn it into a “service”?
  • 51. Now that it works, why not turn it into a “service”? • Collaboration between Dan Jenkins (Nimble Ape) and Meetecho • https://broadcaster.vc/ • Approach pretty much the one we’ve seen in the previous slides • Public Janus instances for conversations (SaaS, hosted by Nimble Ape) • Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN • Orchestration between the two done “automagically” • Local Janus instance automatically subscribes (WebRTC) to active participants • NDI feeds automatically generated for who joins your room Give it a try! We had to improve a few things first (see next slides), but in Beta now
  • 52. Now that it works, why not turn it into a “service”? • Collaboration between Dan Jenkins (Nimble Ape) and Meetecho • https://broadcaster.vc/ • Approach pretty much the one we’ve seen in the previous slides • Public Janus instances for conversations (SaaS, hosted by Nimble Ape) • Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN • Orchestration between the two done “automagically” • Local Janus instance automatically subscribes (WebRTC) to active participants • NDI feeds automatically generated for who joins your room Give it a try! We had to improve a few things first (see next slides), but in Beta now
  • 53. Now that it works, why not turn it into a “service”? • Collaboration between Dan Jenkins (Nimble Ape) and Meetecho • https://broadcaster.vc/ • Approach pretty much the one we’ve seen in the previous slides • Public Janus instances for conversations (SaaS, hosted by Nimble Ape) • Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN • Orchestration between the two done “automagically” • Local Janus instance automatically subscribes (WebRTC) to active participants • NDI feeds automatically generated for who joins your room Give it a try! We had to improve a few things first (see next slides), but in Beta now
  • 54. Now that it works, why not turn it into a “service”? • Collaboration between Dan Jenkins (Nimble Ape) and Meetecho • https://broadcaster.vc/ • Approach pretty much the one we’ve seen in the previous slides • Public Janus instances for conversations (SaaS, hosted by Nimble Ape) • Docker images with { Janus + Meetecho NDI plugin } to launch in your LAN • Orchestration between the two done “automagically” • Local Janus instance automatically subscribes (WebRTC) to active participants • NDI feeds automatically generated for who joins your room Give it a try! We had to improve a few things first (see next slides), but in Beta now
  • 55. Two channels are better than one!
  • 56. Fixing artifacts with a jitter buffer
  • 57. Fixing wrong image management
  • 58. Test patterns (“Is this working?”)
  • 59. Test patterns (“Is this working?”)
  • 61. Now we have AV1 in there too! https://www.meetecho.com/blog/av1-h265-janus/
  • 64. Thanks! Questions? Comments? Get in touch! • https://twitter.com/elminiero • https://twitter.com/meetecho • http://www.meetecho.com