Slide 1

Slide 1 text

Programmable Video Fundamentals MARK ROBERTS - TECH LEAD, JAVASCRIPT SDK © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

WebRTC © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB AUDIO & VIDEO

Slide 9

Slide 9 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB AUDIO & VIDEO

Slide 10

Slide 10 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS SDP STUN TURN ICE
 DTLS RTP RTCP SCTP

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

MAIN CONTENT AND SUPPORTING TEXT PROGRAMMABLE VIDEO FUNDAMENTALS WebRTC • Specification for real-time communication © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE BOB RTCPEERCONNECTION

Slide 15

Slide 15 text

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.

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

What do we need to build a video app using WebRTC? © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Signaling Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 23

Slide 23 text

Signaling Servers STUN & TURN Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 24

Slide 24 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. ALICE BOB

Slide 25

Slide 25 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB

Slide 26

Slide 26 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB

Slide 27

Slide 27 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB

Slide 28

Slide 28 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING ALICE BOB

Slide 29

Slide 29 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB

Slide 30

Slide 30 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB

Slide 31

Slide 31 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB

Slide 32

Slide 32 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN

Slide 33

Slide 33 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN

Slide 34

Slide 34 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN

Slide 35

Slide 35 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN

Slide 36

Slide 36 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN TURN TURN

Slide 37

Slide 37 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. SIGNALING NAT NAT ALICE BOB STUN STUN TURN TURN

Slide 38

Slide 38 text

Signaling Servers STUN & TURN Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 39

Slide 39 text

Signaling Servers STUN & TURN Servers Media Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 40

Slide 40 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ONLY WITH MEDIA SERVER

Slide 41

Slide 41 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. RTCPEERCONNECTION RTCPEERCONNECTION RTCPEERCONNECTION PEER-TO-PEER ONLY WITH MEDIA SERVER

Slide 42

Slide 42 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ONLY WITH MEDIA SERVER

Slide 43

Slide 43 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ONLY WITH MEDIA SERVER

Slide 44

Slide 44 text

Signaling Servers STUN & TURN Servers Media Servers © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 45

Slide 45 text

Signaling Servers STUN & TURN Servers Media Servers Higher-level APIs © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS RTCPEERCONNECTION RTCPEERCONNECTION RTCPEERCONNECTION

Slide 48

Slide 48 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ???

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

Signaling Servers STUN & TURN Servers Media Servers Higher-level APIs © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 51

Slide 51 text

Signaling Servers STUN & TURN Servers Media Servers + Higher-level APIs Programmable Video © 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED.

Slide 52

Slide 52 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Cross-platform SDKs

Slide 53

Slide 53 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Cross-platform SDKs REST API for Server-side Control

Slide 54

Slide 54 text

Programmable Video © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 55

Slide 55 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 56

Slide 56 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 57

Slide 57 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 58

Slide 58 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 59

Slide 59 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 60

Slide 60 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 61

Slide 61 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Rooms

Slide 62

Slide 62 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Rooms Participants

Slide 63

Slide 63 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS Rooms Participants Tracks

Slide 64

Slide 64 text

© 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

Slide 65

Slide 65 text

© 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

Slide 66

Slide 66 text

© 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

Slide 67

Slide 67 text

© 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

Slide 68

Slide 68 text

© 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

Slide 69

Slide 69 text

© 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

Slide 70

Slide 70 text

© 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

Slide 71

Slide 71 text

© 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

Slide 72

Slide 72 text

© 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

Slide 73

Slide 73 text

© 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

Slide 74

Slide 74 text

© 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

Slide 75

Slide 75 text

© 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

Slide 76

Slide 76 text

© 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

Slide 77

Slide 77 text

© 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

Slide 78

Slide 78 text

© 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

Slide 79

Slide 79 text

© 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

Slide 80

Slide 80 text

© 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

Slide 81

Slide 81 text

© 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

Slide 82

Slide 82 text

© 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

Slide 83

Slide 83 text

© 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

Slide 84

Slide 84 text

© 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

Slide 85

Slide 85 text

© 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

Slide 86

Slide 86 text

© 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

Slide 87

Slide 87 text

© 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

Slide 88

Slide 88 text

Basic Multiparty
 Video Chat © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

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

Slide 108

Slide 108 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 109

Slide 109 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

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

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

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

Slide 117

Slide 117 text

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

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

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

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

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

Slide 122

Slide 122 text

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

Slide 123

Slide 123 text

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

Slide 124

Slide 124 text

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

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

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

Slide 127

Slide 127 text

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

Slide 128

Slide 128 text

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

Slide 129

Slide 129 text

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

Slide 130

Slide 130 text

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

Slide 131

Slide 131 text

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

Slide 132

Slide 132 text

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

Slide 133

Slide 133 text

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

Slide 134

Slide 134 text

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

Slide 135

Slide 135 text

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

Slide 136

Slide 136 text

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

Slide 137

Slide 137 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 138

Slide 138 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 139

Slide 139 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 140

Slide 140 text

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

Slide 141

Slide 141 text

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

Slide 142

Slide 142 text

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

Slide 143

Slide 143 text

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

Slide 144

Slide 144 text

© 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

Slide 145

Slide 145 text

Access Tokens & Room Security © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 146

Slide 146 text

Access Token
 © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 147

Slide 147 text

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

Slide 148

Slide 148 text

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

Slide 149

Slide 149 text

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

Slide 150

Slide 150 text

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

Slide 151

Slide 151 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Access Tokens grant your apps access to Twilio services

Slide 152

Slide 152 text

© 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.

Slide 153

Slide 153 text

© 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

Slide 154

Slide 154 text

© 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

Slide 155

Slide 155 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 156

Slide 156 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 157

Slide 157 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 158

Slide 158 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Programmable Video APIs

Slide 159

Slide 159 text

© 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

Slide 160

Slide 160 text

© 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

Slide 161

Slide 161 text

© 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

Slide 162

Slide 162 text

© 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

Slide 163

Slide 163 text

© 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

Slide 164

Slide 164 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. { "iss": "SK9eae711dc87feb56fdcfce9ef0b93354", "sub": "ACcd224d70006373d9b37eb3202c52df90", "exp": 1494914080, "grants": { "identity": “[email protected]”, "video": { "room": "My Cool Room” } } } 1. API Key SID 2. Account SID 3. Expiration Date 4. Client Identity ACCESS TOKENS

Slide 165

Slide 165 text

© 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

Slide 166

Slide 166 text

© 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

Slide 167

Slide 167 text

© 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

Slide 168

Slide 168 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. 1. Create Access Tokens in the Twilio Console during development.

Slide 169

Slide 169 text

© 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.

Slide 170

Slide 170 text

© 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.

Slide 171

Slide 171 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB

Slide 172

Slide 172 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB

Slide 173

Slide 173 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE

Slide 174

Slide 174 text

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

Slide 175

Slide 175 text

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

Slide 176

Slide 176 text

© 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

Slide 177

Slide 177 text

© 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” } }

Slide 178

Slide 178 text

© 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” } }

Slide 179

Slide 179 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE ????

Slide 180

Slide 180 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE ????

Slide 181

Slide 181 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB USER DATABASE ROOM

Slide 182

Slide 182 text

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

Slide 183

Slide 183 text

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

Slide 184

Slide 184 text

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

Slide 185

Slide 185 text

REST API © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 186

Slide 186 text

© 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.

Slide 187

Slide 187 text

© 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.

Slide 188

Slide 188 text

© 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.

Slide 189

Slide 189 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB POST /v1/Rooms UniqueName=Foo

Slide 190

Slide 190 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS ALICE APP SERVER TWILIO BOB POST /v1/Rooms UniqueName=Foo Foo ROOM

Slide 191

Slide 191 text

© 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

Slide 192

Slide 192 text

© 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

Slide 193

Slide 193 text

© 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”
 } }

Slide 194

Slide 194 text

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

Slide 195

Slide 195 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. • UniqueName
 The name of the Room to create • EnableTurn
 “true” or “false”

Slide 196

Slide 196 text

© 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”

Slide 197

Slide 197 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PEER-TO-PEER ROOM GROUP ROOM

Slide 198

Slide 198 text

© 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”

Slide 199

Slide 199 text

© 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

Slide 200

Slide 200 text

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

Slide 201

Slide 201 text

© 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

Slide 202

Slide 202 text

Status Callbacks © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 203

Slide 203 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB

Slide 204

Slide 204 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB

Slide 205

Slide 205 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO participant connected ALICE BOB

Slide 206

Slide 206 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB

Slide 207

Slide 207 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB

Slide 208

Slide 208 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO participant connected ALICE BOB

Slide 209

Slide 209 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO ALICE BOB

Slide 210

Slide 210 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS APP SERVER TWILIO participant disconnected ✕ 2 ALICE BOB

Slide 211

Slide 211 text

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

Slide 212

Slide 212 text

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

Slide 213

Slide 213 text

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

Slide 214

Slide 214 text

Account-level Defaults © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 215

Slide 215 text

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

Slide 216

Slide 216 text

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

Slide 217

Slide 217 text

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

Slide 218

Slide 218 text

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

Slide 219

Slide 219 text

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

Slide 220

Slide 220 text

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

Slide 221

Slide 221 text

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

Slide 222

Slide 222 text

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

Slide 223

Slide 223 text

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

Slide 224

Slide 224 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list

Slide 225

Slide 225 text

© 2017 TWILIO, INC. ALL RIGHTS RESERVED. © 2017 TWILIO, INC. ALL RIGHTS RESERVED. Production Check-list 1. Room Type: P2P or Group?

Slide 226

Slide 226 text

© 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

Slide 227

Slide 227 text

© 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

Slide 228

Slide 228 text

© 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

Slide 229

Slide 229 text

Thank you! © 2017 TWILIO, INC. ALL RIGHTS RESERVED. PROGRAMMABLE VIDEO FUNDAMENTALS

Slide 230

Slide 230 text

© 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