SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
Having fun with Janus and WebRTC!
Lorenzo Miniero
@elminiero
OpenSIPS Summit Distributed
September 13th 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
((*)
I’m legally obliged to show this)
A quick reminder on what Janus is!
Janus
General purpose, open source WebRTC server
• https://github.com/meetecho/janus-gateway
• Demos and documentation: https://janus.conf.meetecho.com
• Community: https://groups.google.com/forum/#!forum/meetecho-janus
Modular architecture
• 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.
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!
How do you talk to Janus?
https://janus.conf.meetecho.com/docs/rest
How do you talk to Janus?
https://janus.conf.meetecho.com/docs/rest
Session, Handles and PeerConnections
https://janus.conf.meetecho.com/docs/rest
Session, Handles and PeerConnections
https://janus.conf.meetecho.com/docs/rest
Session, Handles and PeerConnections
https://janus.conf.meetecho.com/docs/rest
Our practical use case for today: SocialTV!
A few requirements for a SocialTV demo
• An interesting scenario
• A few friends connect to the same web page to watch TV
• They can talk to each other while watching
• Any of them can change channel at any time
• Effective example of combining different plugins
• We’ll need something for the TV broadcasting...
• ... something to let them mingle ...
• ... and something for the interactive features (e.g., channel surfing)
• This workshop will guide you through the process
• Choosing plugins, combining handles, etc.
A few requirements for a SocialTV demo
• An interesting scenario
• A few friends connect to the same web page to watch TV
• They can talk to each other while watching
• Any of them can change channel at any time
• Effective example of combining different plugins
• We’ll need something for the TV broadcasting...
• ... something to let them mingle ...
• ... and something for the interactive features (e.g., channel surfing)
• This workshop will guide you through the process
• Choosing plugins, combining handles, etc.
A few requirements for a SocialTV demo
• An interesting scenario
• A few friends connect to the same web page to watch TV
• They can talk to each other while watching
• Any of them can change channel at any time
• Effective example of combining different plugins
• We’ll need something for the TV broadcasting...
• ... something to let them mingle ...
• ... and something for the interactive features (e.g., channel surfing)
• This workshop will guide you through the process
• Choosing plugins, combining handles, etc.
First obvious choice: VideoRoom plugin!
https://janus.conf.meetecho.com/docs/videoroom
Chatting with friends using the VideoRoom
• The VideoRoom plugin is an SFU (Selective Forwarding Unit)
• Publish/Subscribe approach
• Participants can send their media and subscribe to others
• Very widely used in conferencing scenarios
• Obvious choice for the friends mingling feature
• They’re basically in a “conference” with each other
• We may want to constrain it a bit compared to a traditional conference, though
• Maybe a limited number of participants? (e.g., 4)
• Capping the bandwidth is a good idea too (they’ll be thumbnails)
Chatting with friends using the VideoRoom
• The VideoRoom plugin is an SFU (Selective Forwarding Unit)
• Publish/Subscribe approach
• Participants can send their media and subscribe to others
• Very widely used in conferencing scenarios
• Obvious choice for the friends mingling feature
• They’re basically in a “conference” with each other
• We may want to constrain it a bit compared to a traditional conference, though
• Maybe a limited number of participants? (e.g., 4)
• Capping the bandwidth is a good idea too (they’ll be thumbnails)
Chatting with friends using the VideoRoom
• The VideoRoom plugin is an SFU (Selective Forwarding Unit)
• Publish/Subscribe approach
• Participants can send their media and subscribe to others
• Very widely used in conferencing scenarios
• Obvious choice for the friends mingling feature
• They’re basically in a “conference” with each other
• We may want to constrain it a bit compared to a traditional conference, though
• Maybe a limited number of participants? (e.g., 4)
• Capping the bandwidth is a good idea too (they’ll be thumbnails)
Sample configuration for the room
room-1000: {
description = "Social TV Room"
secret = "verysecret"
pin = "zapp"
require_pvtid = true
publishers = 4
bitrate = 200000
fir_freq = 10
audiocodec = "opus"
videocodec = "vp8"
transport_wide_cc_ext = true
}
Broadcasting with the Streaming plugin
https://janus.conf.meetecho.com/docs/streaming
Using the Streaming plugin for TV channels
• The Streaming plugin is an effective RTP-to-WebRTC broadcaster
• It works by creating so called “mountpoints” to identify a stream
• A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others)
• Multiple participants can subscribe to receive the same stream via WebRTC
• Easy to generate WebRTC streams using non-WebRTC tools
• Tools only need to understand RTP and support the right codecs
• Janus “wraps” RTP in WebRTC coat, but won’t transcode
• Browsers need to be able to decode the media
• Only need a single copy of the stream
• The Streaming plugin duplicates it to interested subscribers
Using the Streaming plugin for TV channels
• The Streaming plugin is an effective RTP-to-WebRTC broadcaster
• It works by creating so called “mountpoints” to identify a stream
• A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others)
• Multiple participants can subscribe to receive the same stream via WebRTC
• Easy to generate WebRTC streams using non-WebRTC tools
• Tools only need to understand RTP and support the right codecs
• Janus “wraps” RTP in WebRTC coat, but won’t transcode
• Browsers need to be able to decode the media
• Only need a single copy of the stream
• The Streaming plugin duplicates it to interested subscribers
Using the Streaming plugin for TV channels
• The Streaming plugin is an effective RTP-to-WebRTC broadcaster
• It works by creating so called “mountpoints” to identify a stream
• A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others)
• Multiple participants can subscribe to receive the same stream via WebRTC
• Easy to generate WebRTC streams using non-WebRTC tools
• Tools only need to understand RTP and support the right codecs
• Janus “wraps” RTP in WebRTC coat, but won’t transcode
• Browsers need to be able to decode the media
• Only need a single copy of the stream
• The Streaming plugin duplicates it to interested subscribers
Using the Streaming plugin for TV channels
• The Streaming plugin is an effective RTP-to-WebRTC broadcaster
• It works by creating so called “mountpoints” to identify a stream
• A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others)
• Multiple participants can subscribe to receive the same stream via WebRTC
• Easy to generate WebRTC streams using non-WebRTC tools
• Tools only need to understand RTP and support the right codecs
• Janus “wraps” RTP in WebRTC coat, but won’t transcode
• Browsers need to be able to decode the media
• Only need a single copy of the stream
• The Streaming plugin duplicates it to interested subscribers
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Different ways of implementing TV channels
• One mountpoint per room?
• RTP source of the mountpoint must change when surfing TV
• Requires server side management of the media
• No need for channel synchronization among participants, but...
• ... can’t re-use mountpoints/channels for different rooms
• One mountpoint per channel?
• RTP source of the mountpoint never changes
• Participants change mountpoint they receive when surfing TV
• Does require channel synchronization among participants, but...
• ... allows channels re-use for different rooms
Mapping TV channels to mountpoints
• Each channel can be mapped to a separate mountpoint
• Independent channels and separate RTP media sources
• A cool feature called mountpoint “switching”
• If you’re watching mountpoint #1, you can “switch” to #2
• No need to create a new PeerConnection for the purpose, it’s the source that changes
• Only works if the two mountpoints were configured with the same codecs, of course
• For our SocialTV, different mountpoints can be different TV channels
• Participants start with a channel and can change dynamically
• Logic used to change channels can be delegated to a different plugin
Mapping TV channels to mountpoints
• Each channel can be mapped to a separate mountpoint
• Independent channels and separate RTP media sources
• A cool feature called mountpoint “switching”
• If you’re watching mountpoint #1, you can “switch” to #2
• No need to create a new PeerConnection for the purpose, it’s the source that changes
• Only works if the two mountpoints were configured with the same codecs, of course
• For our SocialTV, different mountpoints can be different TV channels
• Participants start with a channel and can change dynamically
• Logic used to change channels can be delegated to a different plugin
Mapping TV channels to mountpoints
• Each channel can be mapped to a separate mountpoint
• Independent channels and separate RTP media sources
• A cool feature called mountpoint “switching”
• If you’re watching mountpoint #1, you can “switch” to #2
• No need to create a new PeerConnection for the purpose, it’s the source that changes
• Only works if the two mountpoints were configured with the same codecs, of course
• For our SocialTV, different mountpoints can be different TV channels
• Participants start with a channel and can change dynamically
• Logic used to change channels can be delegated to a different plugin
Sample configuration for a mountpoint
rtp-sample-12: {
type = "rtp"
id = 12
description = "Sports"
audio = true
video = true
audioport = 6002
audiopt = 111
audiortpmap = "opus/48000/2"
videoport = 6004
videortcpport = 6005
videopt = 100
videortpmap = "VP8/90000"
secret = "verysecret"
}
Sample configuration for another mountpoint
rtp-sample-13: {
type = "rtp"
id = 13
description = "Comedy"
audio = true
video = true
audioport = 7002
audiopt = 111
audiortpmap = "opus/48000/2"
videoport = 7004
videortcpport = 7005
videopt = 100
videortpmap = "VP8/90000"
secret = "verysecret"
}
Implementing a shared TV remote
• The Streaming plugin can switch from channel to channel dynamically
• ... but this only applies to an individual participant
• How should we synchronize this among all of them?
• A ton of different ways to implement this
• Maybe an HTTP/WS based web application (e.g., via node.js)
• Could leverage an existing framework (e.g., Firebase)
• Why not an instant messaging protocol? (e.g., XMPP)
• WebRTC datachannels are an option too, of course!
Implementing a shared TV remote
• The Streaming plugin can switch from channel to channel dynamically
• ... but this only applies to an individual participant
• How should we synchronize this among all of them?
• A ton of different ways to implement this
• Maybe an HTTP/WS based web application (e.g., via node.js)
• Could leverage an existing framework (e.g., Firebase)
• Why not an instant messaging protocol? (e.g., XMPP)
• WebRTC datachannels are an option too, of course!
Using datachannels for our TV remote
• When looking at datachannels, many options available
• Peer-to-peer connections, without going through Janus?
• Piggybacking existing VideoRoom streams (audio/video AND data)
• Using the TextRoom instant messaging functionality
• Writing a new ad-hoc plugin (in C, Lua or JavaScript)
For the sake of this workshop, let’s write a new plugin!
• Writing one in JavaScript (Duktape plugin) is trivial and informative
• Exchanging datachannel messages is a simple logic to implement
• We can keep some server-side state too (list of channels, current channels, etc.)
Using datachannels for our TV remote
• When looking at datachannels, many options available
• Peer-to-peer connections, without going through Janus?
• Piggybacking existing VideoRoom streams (audio/video AND data)
• Using the TextRoom instant messaging functionality
• Writing a new ad-hoc plugin (in C, Lua or JavaScript)
For the sake of this workshop, let’s write a new plugin!
• Writing one in JavaScript (Duktape plugin) is trivial and informative
• Exchanging datachannel messages is a simple logic to implement
• We can keep some server-side state too (list of channels, current channels, etc.)
Writing a Janus plugin in JavaScript
https://janus.conf.meetecho.com/docs/duktape
Sequence diagram for the interactions
Event on existing channels and active one
{
"channels": {
"1": {
"name": "Tech",
"title": "Meetecho Spot"
},
"12": {
"name": "Sports",
"title": "Napoli Milan 4-2"
},
"13": {
"name": "Comedy",
"title": "SNL - Cold Commercial"
},
"14": {
"name": "Music",
"title": "Iron Maiden - Be quick or be dead"
}
},
"currentChannel": 1
}
Changing TV channels
Request (sent by Bob):
{
"request": "change",
"channel": 12
}
Response:
{
"changed": {
"name": "Bob",
"channel": 12
}
}
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Putting it all together in a web application
• Three different Janus plugins used at the same time
• Custom Duktape plugin (one handle, datachannel PeerConnection)
• Streaming plugin (one handle, recvonly audio/video PeerConnection)
• VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers)
• Potential workflow for the UI
1 Prompt participant for a display name
2 Use the display name to join as a VideoRoom publisher
3 Create a datachannel with the custom Duktape plugin
4 Create subscribers for other VideoRoom participants in the same room
5 Update UI with list of channels received via datachannels
6 Subscribe to the mountpoint associated with the current channel
7 In case of channel changes, switch the mountpoint source
Handles/PeerConnections per participant
Time to see the demo running!
Thanks! Questions? Comments?
Get in touch!
• https://twitter.com/elminiero
• https://twitter.com/meetecho
• http://www.meetecho.com

Mais conteúdo relacionado

Mais procurados

WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021Lorenzo Miniero
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Lorenzo Miniero
 
WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018Lorenzo 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
 
FOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationFOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationLorenzo Miniero
 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSLorenzo Miniero
 
Janus/HOMER/HEPIC @ OpenSIPS18
Janus/HOMER/HEPIC @ OpenSIPS18Janus/HOMER/HEPIC @ OpenSIPS18
Janus/HOMER/HEPIC @ OpenSIPS18Lorenzo Miniero
 
SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017Lorenzo Miniero
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Lorenzo Miniero
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022Lorenzo Miniero
 
Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Lorenzo Miniero
 
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...Paolo Saviano
 
Janus @ WebRTC Meetup Stockholm
Janus @ WebRTC Meetup StockholmJanus @ WebRTC Meetup Stockholm
Janus @ WebRTC Meetup StockholmLorenzo 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/SIP @ OpenSIPS 2017
Janus/SIP @ OpenSIPS 2017Janus/SIP @ OpenSIPS 2017
Janus/SIP @ OpenSIPS 2017Lorenzo Miniero
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Lorenzo Miniero
 
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 StockholmLorenzo Miniero
 
Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Lorenzo Miniero
 

Mais procurados (20)

WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019
 
WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018
 
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
 
FOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationFOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentation
 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
 
Janus/HOMER/HEPIC @ OpenSIPS18
Janus/HOMER/HEPIC @ OpenSIPS18Janus/HOMER/HEPIC @ OpenSIPS18
Janus/HOMER/HEPIC @ OpenSIPS18
 
SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022
 
Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019
 
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 @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
 
Janus @ WebRTC Meetup Stockholm
Janus @ WebRTC Meetup StockholmJanus @ WebRTC Meetup Stockholm
Janus @ WebRTC Meetup Stockholm
 
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/SIP @ OpenSIPS 2017
Janus/SIP @ OpenSIPS 2017Janus/SIP @ OpenSIPS 2017
Janus/SIP @ OpenSIPS 2017
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
 
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
 
Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019
 
Janus @ RTC2017 Beijing
Janus @ RTC2017 BeijingJanus @ RTC2017 Beijing
Janus @ RTC2017 Beijing
 

Semelhante a Write a SocialTV app @ OpenSIPS 2021

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
 
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
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Lorenzo Miniero
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017Lorenzo Miniero
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroGreg Kawere
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Lorenzo 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
 
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 streamsLuis Lopez
 
Architecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin SimeArchitecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin SimeAlan Quayle
 
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 PreconferenceTsahi Levent-levi
 
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) serverDevDay
 
Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)Derek Buitenhuis
 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Lorenzo Miniero
 
Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014Steffen Larsen
 
The LUCeS Conferencing Tool
The LUCeS Conferencing ToolThe LUCeS Conferencing Tool
The LUCeS Conferencing ToolVideoguy
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUppersideConferences
 

Semelhante a Write a SocialTV app @ OpenSIPS 2021 (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
 
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
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo miniero
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
 
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...
 
ClueCon 2017
ClueCon 2017ClueCon 2017
ClueCon 2017
 
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
 
Architecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin SimeArchitecting your WebRTC application for scalability, Arin Sime
Architecting your WebRTC application for scalability, Arin Sime
 
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
 
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 @ DevDay Napoli
Janus @ DevDay NapoliJanus @ DevDay Napoli
Janus @ DevDay Napoli
 
Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)Vimeo and Open Source (SMPTE Forum 2015)
Vimeo and Open Source (SMPTE Forum 2015)
 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022
 
Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014
 
The LUCeS Conferencing Tool
The LUCeS Conferencing ToolThe LUCeS Conferencing Tool
The LUCeS Conferencing Tool
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards Update
 
Kurento FIWARE
Kurento FIWAREKurento FIWARE
Kurento FIWARE
 

Mais 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
 
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
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceLorenzo Miniero
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingLorenzo Miniero
 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusLorenzo Miniero
 

Mais de Lorenzo Miniero (9)

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!
 
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
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of Janus
 

Último

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 

Último (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

Write a SocialTV app @ OpenSIPS 2021

  • 1. Having fun with Janus and WebRTC! Lorenzo Miniero @elminiero OpenSIPS Summit Distributed September 13th 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. A quick reminder on what Janus is! 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
  • 6. 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.
  • 7. 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.
  • 8. 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.
  • 9. 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.
  • 10. 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!
  • 11. How do you talk to Janus? https://janus.conf.meetecho.com/docs/rest
  • 12. How do you talk to Janus? https://janus.conf.meetecho.com/docs/rest
  • 13. Session, Handles and PeerConnections https://janus.conf.meetecho.com/docs/rest
  • 14. Session, Handles and PeerConnections https://janus.conf.meetecho.com/docs/rest
  • 15. Session, Handles and PeerConnections https://janus.conf.meetecho.com/docs/rest
  • 16. Our practical use case for today: SocialTV!
  • 17. A few requirements for a SocialTV demo • An interesting scenario • A few friends connect to the same web page to watch TV • They can talk to each other while watching • Any of them can change channel at any time • Effective example of combining different plugins • We’ll need something for the TV broadcasting... • ... something to let them mingle ... • ... and something for the interactive features (e.g., channel surfing) • This workshop will guide you through the process • Choosing plugins, combining handles, etc.
  • 18. A few requirements for a SocialTV demo • An interesting scenario • A few friends connect to the same web page to watch TV • They can talk to each other while watching • Any of them can change channel at any time • Effective example of combining different plugins • We’ll need something for the TV broadcasting... • ... something to let them mingle ... • ... and something for the interactive features (e.g., channel surfing) • This workshop will guide you through the process • Choosing plugins, combining handles, etc.
  • 19. A few requirements for a SocialTV demo • An interesting scenario • A few friends connect to the same web page to watch TV • They can talk to each other while watching • Any of them can change channel at any time • Effective example of combining different plugins • We’ll need something for the TV broadcasting... • ... something to let them mingle ... • ... and something for the interactive features (e.g., channel surfing) • This workshop will guide you through the process • Choosing plugins, combining handles, etc.
  • 20. First obvious choice: VideoRoom plugin! https://janus.conf.meetecho.com/docs/videoroom
  • 21. Chatting with friends using the VideoRoom • The VideoRoom plugin is an SFU (Selective Forwarding Unit) • Publish/Subscribe approach • Participants can send their media and subscribe to others • Very widely used in conferencing scenarios • Obvious choice for the friends mingling feature • They’re basically in a “conference” with each other • We may want to constrain it a bit compared to a traditional conference, though • Maybe a limited number of participants? (e.g., 4) • Capping the bandwidth is a good idea too (they’ll be thumbnails)
  • 22. Chatting with friends using the VideoRoom • The VideoRoom plugin is an SFU (Selective Forwarding Unit) • Publish/Subscribe approach • Participants can send their media and subscribe to others • Very widely used in conferencing scenarios • Obvious choice for the friends mingling feature • They’re basically in a “conference” with each other • We may want to constrain it a bit compared to a traditional conference, though • Maybe a limited number of participants? (e.g., 4) • Capping the bandwidth is a good idea too (they’ll be thumbnails)
  • 23. Chatting with friends using the VideoRoom • The VideoRoom plugin is an SFU (Selective Forwarding Unit) • Publish/Subscribe approach • Participants can send their media and subscribe to others • Very widely used in conferencing scenarios • Obvious choice for the friends mingling feature • They’re basically in a “conference” with each other • We may want to constrain it a bit compared to a traditional conference, though • Maybe a limited number of participants? (e.g., 4) • Capping the bandwidth is a good idea too (they’ll be thumbnails)
  • 24. Sample configuration for the room room-1000: { description = "Social TV Room" secret = "verysecret" pin = "zapp" require_pvtid = true publishers = 4 bitrate = 200000 fir_freq = 10 audiocodec = "opus" videocodec = "vp8" transport_wide_cc_ext = true }
  • 25. Broadcasting with the Streaming plugin https://janus.conf.meetecho.com/docs/streaming
  • 26. Using the Streaming plugin for TV channels • The Streaming plugin is an effective RTP-to-WebRTC broadcaster • It works by creating so called “mountpoints” to identify a stream • A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others) • Multiple participants can subscribe to receive the same stream via WebRTC • Easy to generate WebRTC streams using non-WebRTC tools • Tools only need to understand RTP and support the right codecs • Janus “wraps” RTP in WebRTC coat, but won’t transcode • Browsers need to be able to decode the media • Only need a single copy of the stream • The Streaming plugin duplicates it to interested subscribers
  • 27. Using the Streaming plugin for TV channels • The Streaming plugin is an effective RTP-to-WebRTC broadcaster • It works by creating so called “mountpoints” to identify a stream • A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others) • Multiple participants can subscribe to receive the same stream via WebRTC • Easy to generate WebRTC streams using non-WebRTC tools • Tools only need to understand RTP and support the right codecs • Janus “wraps” RTP in WebRTC coat, but won’t transcode • Browsers need to be able to decode the media • Only need a single copy of the stream • The Streaming plugin duplicates it to interested subscribers
  • 28. Using the Streaming plugin for TV channels • The Streaming plugin is an effective RTP-to-WebRTC broadcaster • It works by creating so called “mountpoints” to identify a stream • A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others) • Multiple participants can subscribe to receive the same stream via WebRTC • Easy to generate WebRTC streams using non-WebRTC tools • Tools only need to understand RTP and support the right codecs • Janus “wraps” RTP in WebRTC coat, but won’t transcode • Browsers need to be able to decode the media • Only need a single copy of the stream • The Streaming plugin duplicates it to interested subscribers
  • 29. Using the Streaming plugin for TV channels • The Streaming plugin is an effective RTP-to-WebRTC broadcaster • It works by creating so called “mountpoints” to identify a stream • A “mountpoint” can receive RTP from any source (FFmpeg/GStreamer/VLC/others) • Multiple participants can subscribe to receive the same stream via WebRTC • Easy to generate WebRTC streams using non-WebRTC tools • Tools only need to understand RTP and support the right codecs • Janus “wraps” RTP in WebRTC coat, but won’t transcode • Browsers need to be able to decode the media • Only need a single copy of the stream • The Streaming plugin duplicates it to interested subscribers
  • 30. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 31. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 32. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 33. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 34. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 35. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 36. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 37. Different ways of implementing TV channels • One mountpoint per room? • RTP source of the mountpoint must change when surfing TV • Requires server side management of the media • No need for channel synchronization among participants, but... • ... can’t re-use mountpoints/channels for different rooms • One mountpoint per channel? • RTP source of the mountpoint never changes • Participants change mountpoint they receive when surfing TV • Does require channel synchronization among participants, but... • ... allows channels re-use for different rooms
  • 38. Mapping TV channels to mountpoints • Each channel can be mapped to a separate mountpoint • Independent channels and separate RTP media sources • A cool feature called mountpoint “switching” • If you’re watching mountpoint #1, you can “switch” to #2 • No need to create a new PeerConnection for the purpose, it’s the source that changes • Only works if the two mountpoints were configured with the same codecs, of course • For our SocialTV, different mountpoints can be different TV channels • Participants start with a channel and can change dynamically • Logic used to change channels can be delegated to a different plugin
  • 39. Mapping TV channels to mountpoints • Each channel can be mapped to a separate mountpoint • Independent channels and separate RTP media sources • A cool feature called mountpoint “switching” • If you’re watching mountpoint #1, you can “switch” to #2 • No need to create a new PeerConnection for the purpose, it’s the source that changes • Only works if the two mountpoints were configured with the same codecs, of course • For our SocialTV, different mountpoints can be different TV channels • Participants start with a channel and can change dynamically • Logic used to change channels can be delegated to a different plugin
  • 40. Mapping TV channels to mountpoints • Each channel can be mapped to a separate mountpoint • Independent channels and separate RTP media sources • A cool feature called mountpoint “switching” • If you’re watching mountpoint #1, you can “switch” to #2 • No need to create a new PeerConnection for the purpose, it’s the source that changes • Only works if the two mountpoints were configured with the same codecs, of course • For our SocialTV, different mountpoints can be different TV channels • Participants start with a channel and can change dynamically • Logic used to change channels can be delegated to a different plugin
  • 41. Sample configuration for a mountpoint rtp-sample-12: { type = "rtp" id = 12 description = "Sports" audio = true video = true audioport = 6002 audiopt = 111 audiortpmap = "opus/48000/2" videoport = 6004 videortcpport = 6005 videopt = 100 videortpmap = "VP8/90000" secret = "verysecret" }
  • 42. Sample configuration for another mountpoint rtp-sample-13: { type = "rtp" id = 13 description = "Comedy" audio = true video = true audioport = 7002 audiopt = 111 audiortpmap = "opus/48000/2" videoport = 7004 videortcpport = 7005 videopt = 100 videortpmap = "VP8/90000" secret = "verysecret" }
  • 43. Implementing a shared TV remote • The Streaming plugin can switch from channel to channel dynamically • ... but this only applies to an individual participant • How should we synchronize this among all of them? • A ton of different ways to implement this • Maybe an HTTP/WS based web application (e.g., via node.js) • Could leverage an existing framework (e.g., Firebase) • Why not an instant messaging protocol? (e.g., XMPP) • WebRTC datachannels are an option too, of course!
  • 44. Implementing a shared TV remote • The Streaming plugin can switch from channel to channel dynamically • ... but this only applies to an individual participant • How should we synchronize this among all of them? • A ton of different ways to implement this • Maybe an HTTP/WS based web application (e.g., via node.js) • Could leverage an existing framework (e.g., Firebase) • Why not an instant messaging protocol? (e.g., XMPP) • WebRTC datachannels are an option too, of course!
  • 45. Using datachannels for our TV remote • When looking at datachannels, many options available • Peer-to-peer connections, without going through Janus? • Piggybacking existing VideoRoom streams (audio/video AND data) • Using the TextRoom instant messaging functionality • Writing a new ad-hoc plugin (in C, Lua or JavaScript) For the sake of this workshop, let’s write a new plugin! • Writing one in JavaScript (Duktape plugin) is trivial and informative • Exchanging datachannel messages is a simple logic to implement • We can keep some server-side state too (list of channels, current channels, etc.)
  • 46. Using datachannels for our TV remote • When looking at datachannels, many options available • Peer-to-peer connections, without going through Janus? • Piggybacking existing VideoRoom streams (audio/video AND data) • Using the TextRoom instant messaging functionality • Writing a new ad-hoc plugin (in C, Lua or JavaScript) For the sake of this workshop, let’s write a new plugin! • Writing one in JavaScript (Duktape plugin) is trivial and informative • Exchanging datachannel messages is a simple logic to implement • We can keep some server-side state too (list of channels, current channels, etc.)
  • 47. Writing a Janus plugin in JavaScript https://janus.conf.meetecho.com/docs/duktape
  • 48. Sequence diagram for the interactions
  • 49. Event on existing channels and active one { "channels": { "1": { "name": "Tech", "title": "Meetecho Spot" }, "12": { "name": "Sports", "title": "Napoli Milan 4-2" }, "13": { "name": "Comedy", "title": "SNL - Cold Commercial" }, "14": { "name": "Music", "title": "Iron Maiden - Be quick or be dead" } }, "currentChannel": 1 }
  • 50. Changing TV channels Request (sent by Bob): { "request": "change", "channel": 12 } Response: { "changed": { "name": "Bob", "channel": 12 } }
  • 51. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 52. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 53. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 54. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 55. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 56. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 57. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 58. Putting it all together in a web application • Three different Janus plugins used at the same time • Custom Duktape plugin (one handle, datachannel PeerConnection) • Streaming plugin (one handle, recvonly audio/video PeerConnection) • VideoRoom plugin (multiple handles, sendonly publisher + N recvonly subscribers) • Potential workflow for the UI 1 Prompt participant for a display name 2 Use the display name to join as a VideoRoom publisher 3 Create a datachannel with the custom Duktape plugin 4 Create subscribers for other VideoRoom participants in the same room 5 Update UI with list of channels received via datachannels 6 Subscribe to the mountpoint associated with the current channel 7 In case of channel changes, switch the mountpoint source
  • 60. Time to see the demo running!
  • 61. Thanks! Questions? Comments? Get in touch! • https://twitter.com/elminiero • https://twitter.com/meetecho • http://www.meetecho.com