SlideShare una empresa de Scribd logo
1 de 61
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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
 

Similar 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
 

Similar 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
 

Más 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
 

Más 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

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
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 WorkerThousandEyes
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 

Último (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 

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