SlideShare a Scribd company logo
Programmable Video
Fundamentals
MARK ROBERTS - TECH LEAD, JAVASCRIPT SDK
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
Fundamentals
1. Video Apps & WebRTC
2. Programmable Video
3. Basic Multiparty Video Chat
4. Access Tokens & Room Security
5. REST API & Status Callbacks
6. Production Check-list
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE BOB
AUDIO & VIDEO
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE BOB
AUDIO & VIDEO
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
SDP STUN TURN ICE

DTLS RTP RTCP SCTP
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
• Specification for real-time
communication
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
• Specification for real-time
communication
• WebRTC’s core API is the
RTCPeerConnection
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE BOB
RTCPEERCONNECTION
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
• Specification for real-time
communication
• WebRTC’s core API is the
RTCPeerConnection
• But not just browsers—mobile,
desktop, embedded, etc.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
• Twilio built its Programmable
Voice SDKs in part using WebRTC.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
• Twilio built its Programmable
Voice SDKs in part using WebRTC.
• Twilio’s Programmable Video SDKs
also make use of WebRTC.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
WebRTC
• Twilio built its Programmable
Voice SDKs in part using WebRTC.
• Twilio’s Programmable Video SDKs
also make use of WebRTC.
• 6.2 billion WebRTC-enabled devices
forecasted by end of 2018
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
What do we need to build a
video app using WebRTC?
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE BOB
Signaling Servers
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Signaling Servers
STUN & TURN Servers
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
STUN STUN
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
STUN STUN
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
STUN STUN
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
STUN STUN
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
STUN STUN
TURN TURN
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SIGNALING
NAT NAT
ALICE BOB
STUN STUN
TURN TURN
Signaling Servers
STUN & TURN Servers
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Signaling Servers
STUN & TURN Servers
Media Servers
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PEER-TO-PEER ONLY WITH MEDIA SERVER
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
RTCPEERCONNECTION RTCPEERCONNECTION
RTCPEERCONNECTION
PEER-TO-PEER ONLY WITH MEDIA SERVER
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PEER-TO-PEER ONLY WITH MEDIA SERVER
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PEER-TO-PEER ONLY WITH MEDIA SERVER
Signaling Servers
STUN & TURN Servers
Media Servers
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Signaling Servers
STUN & TURN Servers
Media Servers
Higher-level APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
RTCPEERCONNECTION
RTCPEERCONNECTIONRTCPEERCONNECTION
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
???
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Signaling Servers
STUN & TURN Servers
Media Servers
Higher-level APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Signaling Servers
STUN & TURN Servers
Media Servers
+ Higher-level APIs
Programmable Video
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Cross-platform SDKs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Cross-platform SDKs
REST API for Server-side Control
Programmable Video
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Rooms
Participants
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Rooms
Participants
Tracks
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• sid
• name
• connect()
• disconnect()
• participants
• “participantConnected”
• “participantDisconnected”
• sid
• identity
• tracks
• addTrack()
• removeTrack()
• “trackAdded”
• “trackRemoved”
• sid
• kind
• isEnabled
• enable()
• disable()
• “trackEnabled”
• “trackDisabled”
Room Participant Track
Basic Multiparty

Video Chat
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: {
deviceId: ‘xxx’
},
video: true
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: {
deviceId: ‘xxx’
},
video: {
width: 640,
height: 480,
frameRate: 60
}
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, { tracks })
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, {
name: ‘My Cool Room’,
tracks
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, {
name: ‘My Cool Room’,
logLevel: ‘debug’,
tracks
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, {
name: ‘My Cool Room’,
logLevel: ‘debug’,
iceServers: [ /* … */ ],
tracks
})
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, { tracks })
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, { tracks })
const { name, sid } = room
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, { tracks })
const { name, sid } = room
console.log(‘Connected to “%s” (%s)’, name, sid)
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
const { connect, createLocalTracks }
= require(‘twilio-video’)
// 1. Acquire LocalTracks
const tracks = await createLocalTracks({
audio: true,
video: true
})
// 2. Connect to a Room
const room = await connect(token, { tracks })
const { name, sid } = room
console.log(‘Connected to “%s” (%s)’, name, sid)
addRoomView(room)
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity } = participant
console.log(‘%s connected’, identity)
participant.on(‘disconnected’, () => {
// Cleanup whatever UI component we created
// for the Participant.
console.log(‘%s disconnected’, identity)
})
// …
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity } = participant
console.log(‘%s connected’, identity)
participant.on(‘disconnected’, () => {
// Cleanup whatever UI component we created
// for the Participant.
console.log(‘%s disconnected’, identity)
})
// …
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity } = participant
console.log(‘%s connected’, identity)
participant.on(‘disconnected’, () => {
// Cleanup whatever UI component we created
// for the Participant.
console.log(‘%s disconnected’, identity)
})
// …
}
JAVASCRIPT
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity } = participant
console.log(‘%s connected’, identity)
participant.on(‘disconnected’, () => {
// Cleanup whatever UI component we created
// for the Participant.
console.log(‘%s disconnected’, identity)
})
// …
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
participant.once(‘disconnected’, () => {
console.log(‘%s disconnected’, identity)
})
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
participant.once(‘disconnected’, () => {
console.log(‘%s disconnected’, identity)
})
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
participant.once(‘disconnected’, () => {
console.log(‘%s disconnected’, identity)
removeParticipantView(participant)
})
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
participant.once(‘disconnected’, () => {
console.log(‘%s disconnected’, identity)
removeParticipantView(participant)
})
// 4. Handle Participants’ Tracks
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
participant.once(‘disconnected’, () => {
console.log(‘%s disconnected’, identity)
removeParticipantView(participant)
})
// 4. Handle Participants’ Tracks
participant.tracks.forEach(handleTrackAdded)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
const { identity, sid } = participant
console.log(‘%s (%s) connected’, identity, sid)
addParticipantView(participant)
participant.once(‘disconnected’, () => {
console.log(‘%s disconnected’, identity)
removeParticipantView(participant)
})
// 4. Handle Participants’ Tracks
participant.tracks.forEach(handleTrackAdded)
participant.on(‘trackAdded’, handleTrackAdded)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
// …
// 4. Handle Participants’ Tracks
participant.tracks.forEach(handleTrackAdded)
participant.on(‘trackAdded’, handleTrackAdded)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
// …
// 4. Handle Participants’ Tracks
participant.tracks.forEach(handleTrackAdded)
participant.on(‘trackAdded’, handleTrackAdded)
participant.on(‘trackRemoved’,
handleTrackRemoved)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
// …
// 4. Handle Participants’ Tracks
participant.tracks.forEach(handleTrackAdded)
participant.on(‘trackAdded’, handleTrackAdded)
participant.on(‘trackRemoved’,
handleTrackRemoved)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
// 3. Handle Participants
room.participants.forEach(handleParticipant)
room.on(‘participantConnected’, handleParticipant)
function handleParticipant(participant) {
// …
// 4. Handle Participants’ Tracks
participant.tracks.forEach(handleTrackAdded)
participant.on(‘trackAdded’, handleTrackAdded)
participant.on(‘trackRemoved’,
handleTrackRemoved)
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach();
videoElement.id = ‘track-‘ track.id;
document.body.appendChild(videoElement);
}
function handleTrackRemoved(track) {
const videoElements = track.detach();
videoElements.forEach(videoElement => {
videoElement.remove();
});

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
}
function handleTrackRemoved(track) {
const videoElements = track.detach();
videoElements.forEach(videoElement => {
videoElement.remove();
});

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
}
function handleTrackRemoved(track) {
const videoElements = track.detach();
videoElements.forEach(videoElement => {
videoElement.remove();
});

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach();
videoElements.forEach(videoElement => {
videoElement.remove();
});

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach();
videoElements.forEach(videoElement => {
videoElement.remove();
});

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
videoElements.forEach(videoElement => {
})

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
videoElements.forEach(videoElement => {
videoElement.remove()
})

}
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
videoElements.forEach(videoElement => {
videoElement.remove()
})

}
// 5. Disconnect
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
videoElements.forEach(videoElement => {
videoElement.remove()
})

}
// 5. Disconnect
room.disconnect()
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
videoElements.forEach(videoElement => {
videoElement.remove()
})

}
// 5. Disconnect
room.disconnect()
room.participants.forEach(removeParticipantView)
JAVASCRIPT
1. Acquire LocalTracks
2. Connect to a Room
3. Handle Participants
4. Handle Participants’ Tracks
5. Disconnect
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
MAIN CONTENT AND SUPPORTING
TEXT
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
function handleTrackAdded(track) {
const videoElement = track.attach()
videoElement.id = ‘track-‘ track.id
document.body.appendChild(videoElement)
}
function handleTrackRemoved(track) {
const videoElements = track.detach()
videoElements.forEach(videoElement => {
videoElement.remove()
})

}
// 5. Disconnect
room.disconnect()
room.participants.forEach(removeParticipantView)
removeRoomView(room)
JAVASCRIPT
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
• https://github.com/twilio/video-quickstart-android
• https://github.com/twilio/video-quickstart-js
• https://github.com/twilio/video-quickstart-objc
• https://github.com/twilio/video-quickstart-swift
Access Tokens &
Room Security
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Access Token

© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
TWILIO
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
ACCESS TOKEN
TWILIO
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ACCESS

GRANTED
TWILIO
ALICE
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
TWILIO
ACCESS

DENIED
ALICE
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Access Tokens grant your apps access
to Twilio services
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Access Tokens grant your apps access
to Twilio services
2. Used by Programmable Voice, Video,
Chat, Sync, etc.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Access Tokens grant your apps access
to Twilio services
2. Used by Programmable Voice, Video,
Chat, Sync, etc.
3. Encode client identity & product-
specific capabilities
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Access Tokens grant your apps access
to Twilio services
2. Used by Programmable Voice, Video,
Chat, Sync, etc.
3. Encode client identity & product-
specific capabilities
4. Mix-and-match capabilities from
different products in the same
Access Token
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Programmable Video
APIs
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": { "room": "My Cool Room” }
}
}
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
2. Account SID
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
2. Account SID
3. Expiration Date
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
2. Account SID
3. Expiration Date
4. Client Identity
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": “alice@twilio.com”,
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
2. Account SID
3. Expiration Date
4. Client Identity
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": “1234567890”,
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
2. Account SID
3. Expiration Date
4. Client Identity
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": { "room": "My Cool Room” }
}
}
1. API Key SID
2. Account SID
3. Expiration Date
4. Client Identity
5. Room Name (optional)
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
{
"iss": "SK9eae711dc87feb56fdcfce9ef0b93354",
"sub": "ACcd224d70006373d9b37eb3202c52df90",
"exp": 1494914080,
"grants": {
"identity": "Alice",
"video": {}
}
}
1. API Key SID
2. Account SID
3. Expiration Date
4. Client Identity
5. Room Name (optional)
ACCESS TOKENS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Create Access Tokens in the Twilio
Console during development.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Create Access Tokens in the Twilio
Console during development.
2. Vend Access Tokens from an
application server in production.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. Create Access Tokens in the Twilio
Console during development.
2. Vend Access Tokens from an
application server in production.
3. Helper libraries for Node, PHP,
Python, Java, C#, etc.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
USER DATABASE
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
{
identity: “Alice”,
video: {}
}
{
identity: “Bob”,
video: {}
}
USER DATABASE
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
{
identity: “Alice”,
video: {}
}
{
identity: “Bob”,
video: {}
}
USER DATABASE
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
{
identity: “Alice”,
video: {
room: “Foo”
}
}
{
identity: “Bob”,
video: {
room: “Foo”
}
}
USER DATABASE
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
USER DATABASE Foo ROOM
{
identity: “Alice”,
video: {
room: “Foo”
}
}
{
identity: “Bob”,
video: {
room: “Foo”
}
}
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
USER DATABASE Foo ROOM
{
identity: “Alice”,
video: {
room: “Foo”
}
}
{
identity: “Bob”,
video: {
room: “Foo”
}
}
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
USER DATABASE ????
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
USER DATABASE ????
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
USER DATABASE ROOM
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
REST API
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. GET /v1/Rooms

Get the list of Rooms created in your account.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. GET /v1/Rooms

Get the list of Rooms created in your account.
2. GET /v1/Rooms/{RoomNameOrSid}

Get a particular Room by name or SID.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
1. GET /v1/Rooms

Get the list of Rooms created in your account.
2. GET /v1/Rooms/{RoomNameOrSid}

Get a particular Room by name or SID.
3. POST /v1/Rooms

Create a new Room.
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
POST /v1/Rooms
UniqueName=Foo
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
POST /v1/Rooms
UniqueName=Foo
Foo ROOM
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
{
identity: “Alice”,
video: {
room: “Foo”

}
}
{
identity: “Bob”,
video: {
room: “Foo”

}
}
Foo ROOM
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
{
identity: “Alice”,
video: {
room: “Foo”

}
}
{
identity: “Bob”,
video: {
room: “Foo”

}
}
Foo ROOM
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
ALICE
APP SERVER TWILIO
BOB
Foo ROOM
{
identity: “Alice”,
video: {
room: “Foo”

}
}
{
identity: “Bob”,
video: {
room: “Foo”

}
}
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• UniqueName

The name of the Room to create
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• UniqueName

The name of the Room to create
• EnableTurn

“true” or “false”
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• UniqueName

The name of the Room to create
• EnableTurn

“true” or “false”
• Type

“peer-to-peer” or “group”
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PEER-TO-PEER ROOM GROUP ROOM
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• UniqueName

The name of the Room to create
• EnableTurn

“true” or “false”
• Type

“peer-to-peer” or “group”
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• UniqueName

The name of the Room to create
• EnableTurn

“true” or “false”
• Type

“peer-to-peer” or “group”
• MaxParticipants

Number of Participants that can connect to the Room at a time
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• RecordParticipantsOnConnect

Whether or not to start recording Participants
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
• RecordParticipantsOnConnect

Whether or not to start recording Participants
• StatusCallback

A URL that Twilio sends webhook requests to on Room events
Status Callbacks
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
participant
connected
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
participant
connected
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
APP SERVER TWILIO
participant
disconnected
✕ 2
ALICE BOB
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
Account-level
Defaults
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
1. Set the default Room type, either
P2P or Group
2. Enable or disable TURN
3. Limit the maximum number of
Participants in a Room
4. Allow or disallow application users
to create ad-hoc Rooms
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Account-level

Configuration
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Production Check-list
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Production Check-list
1. Room Type: P2P or Group?
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Production Check-list
1. Room Type: P2P or Group?
2. Access Tokens & Room Security
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Production Check-list
1. Room Type: P2P or Group?
2. Access Tokens & Room Security
3. Network Conditions
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
Production Check-list
1. Room Type: P2P or Group?
2. Access Tokens & Room Security
3. Network Conditions
4. Capture Dimensions
Thank you!
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
PROGRAMMABLE VIDEO FUNDAMENTALS
© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
SPEAKER LINEUP
HELLO, TWILIO
Kat King
9:20 AM
9:50 AM
10:30 AM
11:00 AM
11:30 AM
BREAK
1:00 PM
1:40 PM
2:20 PM
3:00 PM
3:40 PM
5:00 PM
5:15 PM
CHAT FUNDAMENTALS
Randy Beiter
SYNC FUNDAMENTALS
Andres Jaan Tack
NOTIFY FUNDAMENTALS
Ankita Bhosle
VIDEO FUNDAMENTALS
Mark Roberts
SMS: BEYOND THE BASICS
Kenny Hoxworth
POWER UP WITH ADD-ONS
Edward Kim & Hiral Patel
CONTACT CENTER ARCHITECTURE
Matthias Damm & Charles Oppenheimer
TASKROUTER FUNDAMENTALS
Jen Li & Justin Witz
AUTHY FUNDAMENTALS
Marcelo Jabali
GROUP PHOTO (OUTSIDE)
AWARD CEREMONY

More Related Content

PDF
Create an IVR that Keeps Up with Your Customers
PDF
Twilio Signal 2016 Keynote
PDF
Building Blocks for Next Generation Contact Centers
PDF
Twilio Signal 2016 Real-time Communications Overview
PDF
Twilio Contact Center Overview
ODP
TWILIO SMS Introduction
PDF
What Can You Do With Twilio
PPT
Twilio API: Build SMS Text Message Into Web Apps
Create an IVR that Keeps Up with Your Customers
Twilio Signal 2016 Keynote
Building Blocks for Next Generation Contact Centers
Twilio Signal 2016 Real-time Communications Overview
Twilio Contact Center Overview
TWILIO SMS Introduction
What Can You Do With Twilio
Twilio API: Build SMS Text Message Into Web Apps

What's hot (20)

PDF
Twilio SMS - API for Sending & Receiving SMS Messages
PDF
Open Source Software Business Model
PDF
Twilio Presentation
PDF
Final Twilio Under the Radar 2009 Cloud
PDF
Twiliobot at Google Wave Meetup 2009-09-14
PPTX
Twilio using Groovy Grails
PDF
Twilio Signal 2016 Build Your Own Cloud Enterprise VoIP
PDF
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
PDF
Integrating Communications into CRM
PDF
Twilio Product Overview
PDF
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
PDF
Smarter SIP Trunks: 6 Ways You Can Save Time and Get More Features
PDF
Twilio Signal 2016 Using Add-ons
PDF
Salesforce’s Andy Kung on the Power of CRM Integrations
PDF
Twilio Signal 2016 Taking Your SMS App Global
PDF
7 Principles of API Design - Waza
PDF
Lead Gen in the Post-PC World - LeadsCon 2012
PDF
Tc 2008 11 19
PDF
Twilio Presents at PariSoMa
Twilio SMS - API for Sending & Receiving SMS Messages
Open Source Software Business Model
Twilio Presentation
Final Twilio Under the Radar 2009 Cloud
Twiliobot at Google Wave Meetup 2009-09-14
Twilio using Groovy Grails
Twilio Signal 2016 Build Your Own Cloud Enterprise VoIP
Twilio Signal 2016 Robots-IoT-Watson-Cognitive + Twilio
Integrating Communications into CRM
Twilio Product Overview
CTIA Keynote - Jeff Lawson - Twilio - Ways of the Software People or the Way ...
Smarter SIP Trunks: 6 Ways You Can Save Time and Get More Features
Twilio Signal 2016 Using Add-ons
Salesforce’s Andy Kung on the Power of CRM Integrations
Twilio Signal 2016 Taking Your SMS App Global
7 Principles of API Design - Waza
Lead Gen in the Post-PC World - LeadsCon 2012
Tc 2008 11 19
Twilio Presents at PariSoMa
Ad

Similar to Programmable Video Fundamentals (20)

PDF
Kranky Geek 2015 - Decisions & Considerations in building your WebRTC App
PDF
Webrtc overview
PDF
Enabling Voice Applications with WebRTC and ORTC in Microsoft Edge
PDF
WebRTC Videobroadcasting
PDF
Demuxed 2020
KEY
WebRTC - @eCommConf 2011
KEY
Jose De Castro - Presentation at Emerging Communications Conference & Awards ...
PDF
TV_RING, Audiovisual MAC 2014
PDF
Spring Boot for WebRTC Signaling Servers: A Comprehensive Guide
PDF
WebRTC - On Standards, Identity and Telco Strategy
PDF
WebRTC Media Challenges
PDF
Twilio - Social App Workshop - 2010-07-24
PDF
Delivering Real-Time Communications for Mobile
PPTX
WebRTC Seminar Report
PDF
A jQuery for WebRTC
PDF
WebRTC 101 - How to get started building your first WebRTC application
PPTX
Introduction to WebRTC
PDF
WebRTC And FreeSWITCH – What This Combination Means?
PPTX
WebRTC
PDF
Voice video different_platforms_v1
Kranky Geek 2015 - Decisions & Considerations in building your WebRTC App
Webrtc overview
Enabling Voice Applications with WebRTC and ORTC in Microsoft Edge
WebRTC Videobroadcasting
Demuxed 2020
WebRTC - @eCommConf 2011
Jose De Castro - Presentation at Emerging Communications Conference & Awards ...
TV_RING, Audiovisual MAC 2014
Spring Boot for WebRTC Signaling Servers: A Comprehensive Guide
WebRTC - On Standards, Identity and Telco Strategy
WebRTC Media Challenges
Twilio - Social App Workshop - 2010-07-24
Delivering Real-Time Communications for Mobile
WebRTC Seminar Report
A jQuery for WebRTC
WebRTC 101 - How to get started building your first WebRTC application
Introduction to WebRTC
WebRTC And FreeSWITCH – What This Combination Means?
WebRTC
Voice video different_platforms_v1
Ad

Recently uploaded (20)

PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
A Presentation on Artificial Intelligence
PDF
Electronic commerce courselecture one. Pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
KodekX | Application Modernization Development
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
A Presentation on Artificial Intelligence
Electronic commerce courselecture one. Pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Understanding_Digital_Forensics_Presentation.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
20250228 LYD VKU AI Blended-Learning.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
KodekX | Application Modernization Development
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Chapter 3 Spatial Domain Image Processing.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Network Security Unit 5.pdf for BCA BBA.
Per capita expenditure prediction using model stacking based on satellite ima...
Advanced methodologies resolving dimensionality complications for autism neur...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...

Programmable Video Fundamentals

  • 1. Programmable Video Fundamentals MARK ROBERTS - TECH LEAD, JAVASCRIPT SDK © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 2. Programmable Video Fundamentals 1. Video Apps & WebRTC 2. Programmable Video 3. Basic Multiparty Video Chat 4. Access Tokens & Room Security 5. REST API & Status Callbacks 6. Production Check-list © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 3. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 4. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 5. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 6. WebRTC © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 7. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB
  • 8. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB AUDIO & VIDEO
  • 9. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB AUDIO & VIDEO
  • 10. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS SDP STUN TURN ICE
 DTLS RTP RTCP SCTP
  • 11. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 12. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Specification for real-time communication © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 13. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Specification for real-time communication • WebRTC’s core API is the RTCPeerConnection © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 14. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB RTCPEERCONNECTION
  • 15. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Specification for real-time communication • WebRTC’s core API is the RTCPeerConnection • But not just browsers—mobile, desktop, embedded, etc. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 16. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Twilio built its Programmable Voice SDKs in part using WebRTC. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 17. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Twilio built its Programmable Voice SDKs in part using WebRTC. • Twilio’s Programmable Video SDKs also make use of WebRTC. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 18. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Twilio built its Programmable Voice SDKs in part using WebRTC. • Twilio’s Programmable Video SDKs also make use of WebRTC. • 6.2 billion WebRTC-enabled devices forecasted by end of 2018 © 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 19. What do we need to build a video app using WebRTC? © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 20. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB
  • 21. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB
  • 22. Signaling Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 23. Signaling Servers STUN & TURN Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 24. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. ALICE BOB
  • 25. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB
  • 26. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB
  • 27. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB
  • 28. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB
  • 29. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB
  • 30. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB
  • 31. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB
  • 32. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN
  • 33. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN
  • 34. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN
  • 35. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN
  • 36. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN TURN TURN
  • 37. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN TURN TURN
  • 38. Signaling Servers STUN & TURN Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 39. Signaling Servers STUN & TURN Servers Media Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 40. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ONLY WITH MEDIA SERVER
  • 41. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. RTCPEERCONNECTION RTCPEERCONNECTION RTCPEERCONNECTION PEER-TO-PEER ONLY WITH MEDIA SERVER
  • 42. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ONLY WITH MEDIA SERVER
  • 43. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ONLY WITH MEDIA SERVER
  • 44. Signaling Servers STUN & TURN Servers Media Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 45. Signaling Servers STUN & TURN Servers Media Servers Higher-level APIs © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 46. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 47. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS RTCPEERCONNECTION RTCPEERCONNECTIONRTCPEERCONNECTION
  • 48. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ???
  • 49. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 50. Signaling Servers STUN & TURN Servers Media Servers Higher-level APIs © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 51. Signaling Servers STUN & TURN Servers Media Servers + Higher-level APIs Programmable Video © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED.
  • 52. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Cross-platform SDKs
  • 53. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Cross-platform SDKs REST API for Server-side Control
  • 54. Programmable Video © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 55. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 56. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 57. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 58. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 59. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 60. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 61. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Rooms
  • 62. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Rooms Participants
  • 63. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Rooms Participants Tracks
  • 64. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 65. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 66. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 67. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 68. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 69. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 70. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 71. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 72. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 73. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 74. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 75. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 76. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 77. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 78. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 79. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 80. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 81. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 82. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 83. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 84. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 85. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 86. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 87. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • sid • name • connect() • disconnect() • participants • “participantConnected” • “participantDisconnected” • sid • identity • tracks • addTrack() • removeTrack() • “trackAdded” • “trackRemoved” • sid • kind • isEnabled • enable() • disable() • “trackEnabled” • “trackDisabled” Room Participant Track
  • 88. Basic Multiparty
 Video Chat © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 89. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. JAVASCRIPT
  • 90. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) JAVASCRIPT
  • 91. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) JAVASCRIPT
  • 92. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) JAVASCRIPT
  • 93. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: { deviceId: ‘xxx’ }, video: true }) JAVASCRIPT
  • 94. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: { deviceId: ‘xxx’ }, video: { width: 640, height: 480, frameRate: 60 } }) JAVASCRIPT
  • 95. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) JAVASCRIPT
  • 96. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room JAVASCRIPT
  • 97. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { tracks }) JAVASCRIPT
  • 98. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { name: ‘My Cool Room’, tracks }) JAVASCRIPT
  • 99. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { name: ‘My Cool Room’, logLevel: ‘debug’, tracks }) JAVASCRIPT
  • 100. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { name: ‘My Cool Room’, logLevel: ‘debug’, iceServers: [ /* … */ ], tracks }) JAVASCRIPT
  • 101. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { tracks }) JAVASCRIPT
  • 102. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { tracks }) const { name, sid } = room JAVASCRIPT
  • 103. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { tracks }) const { name, sid } = room console.log(‘Connected to “%s” (%s)’, name, sid) JAVASCRIPT
  • 104. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. const { connect, createLocalTracks } = require(‘twilio-video’) // 1. Acquire LocalTracks const tracks = await createLocalTracks({ audio: true, video: true }) // 2. Connect to a Room const room = await connect(token, { tracks }) const { name, sid } = room console.log(‘Connected to “%s” (%s)’, name, sid) addRoomView(room) JAVASCRIPT
  • 105. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity } = participant console.log(‘%s connected’, identity) participant.on(‘disconnected’, () => { // Cleanup whatever UI component we created // for the Participant. console.log(‘%s disconnected’, identity) }) // … } JAVASCRIPT
  • 106. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity } = participant console.log(‘%s connected’, identity) participant.on(‘disconnected’, () => { // Cleanup whatever UI component we created // for the Participant. console.log(‘%s disconnected’, identity) }) // … } JAVASCRIPT
  • 107. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity } = participant console.log(‘%s connected’, identity) participant.on(‘disconnected’, () => { // Cleanup whatever UI component we created // for the Participant. console.log(‘%s disconnected’, identity) }) // … } JAVASCRIPT
  • 108. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 109. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 110. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity } = participant console.log(‘%s connected’, identity) participant.on(‘disconnected’, () => { // Cleanup whatever UI component we created // for the Participant. console.log(‘%s disconnected’, identity) }) // … } JAVASCRIPT
  • 111. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { } JAVASCRIPT
  • 112. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant } JAVASCRIPT
  • 113. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) } JAVASCRIPT
  • 114. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) } JAVASCRIPT
  • 115. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) participant.once(‘disconnected’, () => { console.log(‘%s disconnected’, identity) }) } JAVASCRIPT
  • 116. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) participant.once(‘disconnected’, () => { console.log(‘%s disconnected’, identity) }) } JAVASCRIPT
  • 117. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) participant.once(‘disconnected’, () => { console.log(‘%s disconnected’, identity) removeParticipantView(participant) }) } JAVASCRIPT
  • 118. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) participant.once(‘disconnected’, () => { console.log(‘%s disconnected’, identity) removeParticipantView(participant) }) // 4. Handle Participants’ Tracks } JAVASCRIPT
  • 119. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) participant.once(‘disconnected’, () => { console.log(‘%s disconnected’, identity) removeParticipantView(participant) }) // 4. Handle Participants’ Tracks participant.tracks.forEach(handleTrackAdded) } JAVASCRIPT
  • 120. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { const { identity, sid } = participant console.log(‘%s (%s) connected’, identity, sid) addParticipantView(participant) participant.once(‘disconnected’, () => { console.log(‘%s disconnected’, identity) removeParticipantView(participant) }) // 4. Handle Participants’ Tracks participant.tracks.forEach(handleTrackAdded) participant.on(‘trackAdded’, handleTrackAdded) } JAVASCRIPT
  • 121. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { // … // 4. Handle Participants’ Tracks participant.tracks.forEach(handleTrackAdded) participant.on(‘trackAdded’, handleTrackAdded) } JAVASCRIPT
  • 122. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { // … // 4. Handle Participants’ Tracks participant.tracks.forEach(handleTrackAdded) participant.on(‘trackAdded’, handleTrackAdded) participant.on(‘trackRemoved’, handleTrackRemoved) } JAVASCRIPT
  • 123. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { // … // 4. Handle Participants’ Tracks participant.tracks.forEach(handleTrackAdded) participant.on(‘trackAdded’, handleTrackAdded) participant.on(‘trackRemoved’, handleTrackRemoved) } JAVASCRIPT
  • 124. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. // 3. Handle Participants room.participants.forEach(handleParticipant) room.on(‘participantConnected’, handleParticipant) function handleParticipant(participant) { // … // 4. Handle Participants’ Tracks participant.tracks.forEach(handleTrackAdded) participant.on(‘trackAdded’, handleTrackAdded) participant.on(‘trackRemoved’, handleTrackRemoved) } JAVASCRIPT
  • 125. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach(); videoElement.id = ‘track-‘ track.id; document.body.appendChild(videoElement); } function handleTrackRemoved(track) { const videoElements = track.detach(); videoElements.forEach(videoElement => { videoElement.remove(); });
 } JAVASCRIPT
  • 126. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() } function handleTrackRemoved(track) { const videoElements = track.detach(); videoElements.forEach(videoElement => { videoElement.remove(); });
 } JAVASCRIPT
  • 127. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id } function handleTrackRemoved(track) { const videoElements = track.detach(); videoElements.forEach(videoElement => { videoElement.remove(); });
 } JAVASCRIPT
  • 128. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach(); videoElements.forEach(videoElement => { videoElement.remove(); });
 } JAVASCRIPT
  • 129. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach(); videoElements.forEach(videoElement => { videoElement.remove(); });
 } JAVASCRIPT
  • 130. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() } JAVASCRIPT
  • 131. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() videoElements.forEach(videoElement => { })
 } JAVASCRIPT
  • 132. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() videoElements.forEach(videoElement => { videoElement.remove() })
 } JAVASCRIPT
  • 133. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() videoElements.forEach(videoElement => { videoElement.remove() })
 } // 5. Disconnect JAVASCRIPT
  • 134. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() videoElements.forEach(videoElement => { videoElement.remove() })
 } // 5. Disconnect room.disconnect() JAVASCRIPT
  • 135. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() videoElements.forEach(videoElement => { videoElement.remove() })
 } // 5. Disconnect room.disconnect() room.participants.forEach(removeParticipantView) JAVASCRIPT
  • 136. 1. Acquire LocalTracks 2. Connect to a Room 3. Handle Participants 4. Handle Participants’ Tracks 5. Disconnect © 2017 TWILIO, INC. ALL RIGHTS RESERVED. MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS © 2017 TWILIO, INC. ALL RIGHTS RESERVED. function handleTrackAdded(track) { const videoElement = track.attach() videoElement.id = ‘track-‘ track.id document.body.appendChild(videoElement) } function handleTrackRemoved(track) { const videoElements = track.detach() videoElements.forEach(videoElement => { videoElement.remove() })
 } // 5. Disconnect room.disconnect() room.participants.forEach(removeParticipantView) removeRoomView(room) JAVASCRIPT
  • 137. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 138. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 139. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 140. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 141. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 142. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 143. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 144. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS • https://github.com/twilio/video-quickstart-android • https://github.com/twilio/video-quickstart-js • https://github.com/twilio/video-quickstart-objc • https://github.com/twilio/video-quickstart-swift
  • 145. Access Tokens & Room Security © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 146. Access Token
 © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 147. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE TWILIO
  • 148. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE ACCESS TOKEN TWILIO
  • 149. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ACCESS
 GRANTED TWILIO ALICE
  • 150. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS TWILIO ACCESS
 DENIED ALICE
  • 151. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Access Tokens grant your apps access to Twilio services
  • 152. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Access Tokens grant your apps access to Twilio services 2. Used by Programmable Voice, Video, Chat, Sync, etc.
  • 153. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Access Tokens grant your apps access to Twilio services 2. Used by Programmable Voice, Video, Chat, Sync, etc. 3. Encode client identity & product- specific capabilities
  • 154. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Access Tokens grant your apps access to Twilio services 2. Used by Programmable Voice, Video, Chat, Sync, etc. 3. Encode client identity & product- specific capabilities 4. Mix-and-match capabilities from different products in the same Access Token
  • 155. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 156. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 157. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 158. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs
  • 159. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": { "room": "My Cool Room” } } } ACCESS TOKENS
  • 160. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": { "room": "My Cool Room” } } } 1. API Key SID ACCESS TOKENS
  • 161. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID ACCESS TOKENS
  • 162. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID 3. Expiration Date ACCESS TOKENS
  • 163. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID 3. Expiration Date 4. Client Identity ACCESS TOKENS
  • 164. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": “alice@twilio.com”, "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID 3. Expiration Date 4. Client Identity ACCESS TOKENS
  • 165. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": “1234567890”, "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID 3. Expiration Date 4. Client Identity ACCESS TOKENS
  • 166. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID 3. Expiration Date 4. Client Identity 5. Room Name (optional) ACCESS TOKENS
  • 167. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": "Alice", "video": {} } } 1. API Key SID 2. Account SID 3. Expiration Date 4. Client Identity 5. Room Name (optional) ACCESS TOKENS
  • 168. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Create Access Tokens in the Twilio Console during development.
  • 169. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Create Access Tokens in the Twilio Console during development. 2. Vend Access Tokens from an application server in production.
  • 170. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Create Access Tokens in the Twilio Console during development. 2. Vend Access Tokens from an application server in production. 3. Helper libraries for Node, PHP, Python, Java, C#, etc.
  • 171. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB
  • 172. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB
  • 173. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE
  • 174. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB { identity: “Alice”, video: {} } { identity: “Bob”, video: {} } USER DATABASE
  • 175. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB { identity: “Alice”, video: {} } { identity: “Bob”, video: {} } USER DATABASE
  • 176. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB { identity: “Alice”, video: { room: “Foo” } } { identity: “Bob”, video: { room: “Foo” } } USER DATABASE
  • 177. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE Foo ROOM { identity: “Alice”, video: { room: “Foo” } } { identity: “Bob”, video: { room: “Foo” } }
  • 178. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE Foo ROOM { identity: “Alice”, video: { room: “Foo” } } { identity: “Bob”, video: { room: “Foo” } }
  • 179. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE ????
  • 180. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE ????
  • 181. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE ROOM
  • 182. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 183. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 184. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 185. REST API © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 186. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. GET /v1/Rooms
 Get the list of Rooms created in your account.
  • 187. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. GET /v1/Rooms
 Get the list of Rooms created in your account. 2. GET /v1/Rooms/{RoomNameOrSid}
 Get a particular Room by name or SID.
  • 188. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. GET /v1/Rooms
 Get the list of Rooms created in your account. 2. GET /v1/Rooms/{RoomNameOrSid}
 Get a particular Room by name or SID. 3. POST /v1/Rooms
 Create a new Room.
  • 189. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB POST /v1/Rooms UniqueName=Foo
  • 190. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB POST /v1/Rooms UniqueName=Foo Foo ROOM
  • 191. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB { identity: “Alice”, video: { room: “Foo”
 } } { identity: “Bob”, video: { room: “Foo”
 } } Foo ROOM
  • 192. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB { identity: “Alice”, video: { room: “Foo”
 } } { identity: “Bob”, video: { room: “Foo”
 } } Foo ROOM
  • 193. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB Foo ROOM { identity: “Alice”, video: { room: “Foo”
 } } { identity: “Bob”, video: { room: “Foo”
 } }
  • 194. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • UniqueName
 The name of the Room to create
  • 195. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • UniqueName
 The name of the Room to create • EnableTurn
 “true” or “false”
  • 196. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • UniqueName
 The name of the Room to create • EnableTurn
 “true” or “false” • Type
 “peer-to-peer” or “group”
  • 197. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ROOM GROUP ROOM
  • 198. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • UniqueName
 The name of the Room to create • EnableTurn
 “true” or “false” • Type
 “peer-to-peer” or “group”
  • 199. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • UniqueName
 The name of the Room to create • EnableTurn
 “true” or “false” • Type
 “peer-to-peer” or “group” • MaxParticipants
 Number of Participants that can connect to the Room at a time
  • 200. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • RecordParticipantsOnConnect
 Whether or not to start recording Participants
  • 201. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. • RecordParticipantsOnConnect
 Whether or not to start recording Participants • StatusCallback
 A URL that Twilio sends webhook requests to on Room events
  • 202. Status Callbacks © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 203. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB
  • 204. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB
  • 205. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO participant connected ALICE BOB
  • 206. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB
  • 207. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB
  • 208. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO participant connected ALICE BOB
  • 209. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB
  • 210. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO participant disconnected ✕ 2 ALICE BOB
  • 211. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 212. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 213. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 214. Account-level Defaults © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 215. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 216. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 217. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 218. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 219. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 220. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 221. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 222. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 223. 1. Set the default Room type, either P2P or Group 2. Enable or disable TURN 3. Limit the maximum number of Participants in a Room 4. Allow or disallow application users to create ad-hoc Rooms © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Account-level
 Configuration
  • 224. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list
  • 225. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list 1. Room Type: P2P or Group?
  • 226. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list 1. Room Type: P2P or Group? 2. Access Tokens & Room Security
  • 227. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list 1. Room Type: P2P or Group? 2. Access Tokens & Room Security 3. Network Conditions
  • 228. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.© 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list 1. Room Type: P2P or Group? 2. Access Tokens & Room Security 3. Network Conditions 4. Capture Dimensions
  • 229. Thank you! © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS
  • 230. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SPEAKER LINEUP HELLO, TWILIO Kat King 9:20 AM 9:50 AM 10:30 AM 11:00 AM 11:30 AM BREAK 1:00 PM 1:40 PM 2:20 PM 3:00 PM 3:40 PM 5:00 PM 5:15 PM CHAT FUNDAMENTALS Randy Beiter SYNC FUNDAMENTALS Andres Jaan Tack NOTIFY FUNDAMENTALS Ankita Bhosle VIDEO FUNDAMENTALS Mark Roberts SMS: BEYOND THE BASICS Kenny Hoxworth POWER UP WITH ADD-ONS Edward Kim & Hiral Patel CONTACT CENTER ARCHITECTURE Matthias Damm & Charles Oppenheimer TASKROUTER FUNDAMENTALS Jen Li & Justin Witz AUTHY FUNDAMENTALS Marcelo Jabali GROUP PHOTO (OUTSIDE) AWARD CEREMONY