SlideShare a Scribd company logo
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

More Related Content

What's hot

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

What's hot (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 to Write a SocialTV app @ OpenSIPS 2021

Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
Lorenzo Miniero
 
WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
Lorenzo Miniero
 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023
Lorenzo Miniero
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
Lorenzo Miniero
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
Lorenzo Miniero
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Greg Kawere
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
Lorenzo Miniero
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
Lorenzo Miniero
 
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
 
ClueCon 2017
ClueCon 2017ClueCon 2017
ClueCon 2017
Luca Pradovera
 
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
Luis 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 Sime
Alan 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 Preconference
Tsahi Levent-levi
 
Janus @ DevDay Napoli
Janus @ DevDay NapoliJanus @ DevDay Napoli
Janus @ DevDay Napoli
Lorenzo Miniero
 
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
DevDay
 
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 2022
Lorenzo Miniero
 
Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014Second screen iot_day_stockholm_2014
Second screen iot_day_stockholm_2014
Steffen Larsen
 
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 Update
UppersideConferences
 

Similar to 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
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
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 @ DevDay Napoli
Janus @ DevDay NapoliJanus @ DevDay Napoli
Janus @ DevDay Napoli
 
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
 
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
 

More from Lorenzo Miniero

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Lorenzo Miniero
 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC Server
Lorenzo Miniero
 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
Lorenzo Miniero
 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023
Lorenzo Miniero
 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!
Lorenzo Miniero
 
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
Lorenzo Miniero
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
Lorenzo Miniero
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
Lorenzo Miniero
 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of Janus
Lorenzo Miniero
 

More from Lorenzo Miniero (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
 

Recently uploaded

LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 

Recently uploaded (20)

LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 

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