24
1 1 WebRTC PeerConnection Halloween, 2011 Cullen Jennings [email protected]

WebRTC PeerConnection

Embed Size (px)

DESCRIPTION

WebRTC PeerConnection. Halloween, 2011 Cullen Jennings [email protected]. The Current Situation. PeerConnection emits messages like this: “SDP\n v=0\ n o=- 2890844526 2890842807 IN IP4 192.0.2.1\n s= \n c=IN IP4 192.0.2.1\n t=2873397496 2873404696\n - PowerPoint PPT Presentation

Citation preview

Page 1: WebRTC PeerConnection

11

WebRTC PeerConnectionHalloween, 2011

Cullen Jennings

[email protected]

Page 2: WebRTC PeerConnection

2

The Current Situation• PeerConnection emits messages like this:

“SDP\n

v=0\n

o=- 2890844526 2890842807 IN IP4 192.0.2.1\n

s= \n

c=IN IP4 192.0.2.1\n

t=2873397496 2873404696\n

m=audio 49170 RTP/AVP 0”

Page 3: WebRTC PeerConnection

3

Well, that’s kind of lame• What if we want to add something else?

• For instance, a message ID

• Maybe some structure would be nice….

Page 4: WebRTC PeerConnection

4

A JSON version• {

“sdp”:”v=0\n

o=- 2890844526 2890842807 IN IP4 192.0.2.1\n

s= \n

c=IN IP4 192.0.2.1\n

t=2873397496 2873404696\n

m=audio 49170 RTP/AVP 0”

}

• Now at least we can extend things

• }

Page 5: WebRTC PeerConnection

5

How do we tell offers from answers?• Easy to get confused if we have glare

• We both send SDP at the same time

• Is the SDP I just got a new call or an answer to my offer?

Page 6: WebRTC PeerConnection

6

Message types• {

“messageType”: “OFFER”,

“sdp”:”v=0\n

o=- 2890844526 2890842807 IN IP4 192.0.2.1\n

s= \n

c=IN IP4 192.0.2.1\n

t=2873397496 2873404696\n

m=audio 49170 RTP/AVP 0”

}

• }

Page 7: WebRTC PeerConnection

7

How do we identify sessions?• We might have multiple sessions going on

• Either simultaneously or in sequence

• Message delays can make these look like each other

Page 8: WebRTC PeerConnection

8

Session ID• {

“messageType”: “ANSWER”,

"callerSessionId":"13456789ABCDEF",

"calleeSessionId":"abc1234356",

“sdp”:”v=0\n

o=- 2890844526 2890842807 IN IP4 192.0.2.1\n

s= \n

c=IN IP4 192.0.2.1\n

t=2873397496 2873404696\n

m=audio 49170 RTP/AVP 0”

}

• Session ID must be globally unique

Page 9: WebRTC PeerConnection

9

How session IDs get established• {

“messageType”: “OFFER”,

"callerSessionId":"13456789ABCDEF",

}

• {“messageType”: “ANSWER”,

"callerSessionId":"13456789ABCDEF",

"calleeSessionId":"abc1234356",

}

• Each side contributes a session ID

• Session defined by combination of each side

Page 10: WebRTC PeerConnection

10

Multiple offer/answer pairs• A session has a sequence of offer/answer pairs

• Example: upgrade to videoWe have an audio call

You decide to add video

• This requires multiple offer/answer pairs

• How do we distinguish them?

Page 11: WebRTC PeerConnection

11

Sequence field• {

“messageType”: “OFFER”,

"callerSessionId":"13456789ABCDEF",

“seq”:1,

“sdp”:”v=0\n

o=- 2890844526 2890842807 IN IP4 192.0.2.1\n

s= \n

c=IN IP4 192.0.2.1\n

t=2873397496 2873404696\n

m=audio 49170 RTP/AVP 0”

}

• Sequence indicates the current offer/answer exchange

• OFFER and ANSWER have same sequence number

Page 12: WebRTC PeerConnection

12

ANSWER confirmation• It’s not safe to have multiple OFFERs outstanding

• What happens if I do two changes in succession?

• Example:Other side adds video

I accept but then user changes camera to one with different capabilities

I need to re-OFFER but when?

After he’s gotten my ANSWER

Page 13: WebRTC PeerConnection

13

OK message• {

“messageType”: “OK”,

“seq”:”2”,

"callerSessionId":"13456789ABCDEF",

"calleeSessionId":"abc1234356”,

}

• OK message indicates ANSWER received and accepted

• New session parameters are active

• Safe to do a new OFFER/ANSWER pair

Page 14: WebRTC PeerConnection

14

ICE Pipelining• ICE is slow (can take 3-5 seconds to converge)

• We want to start ICE as soon as possible

• Best experience is to start ICE when Bob receives the OFFER even before he accepts the call

• But we don’t know the media parameters till he answers the callFor instance, he might accept audio but not video

Page 15: WebRTC PeerConnection

15

moreComing flag• {

“messageType”: “ANSWER”,

"callerSessionId":"13456789ABCDEF",

"calleeSessionId":"abc1234356",

“moreComing”:true,

“sdp”:… // ICE candidates but recvonly media

}

• moreComing flag means that another ANSWER will follow to this OFFER

• OFFER/ANSWER transaction isn’t complete till moreComing=false

• No OK for moreComing=true

Page 16: WebRTC PeerConnection

16

Configuration • Need to pass in TURN and STUN servers and credentials

• Often optimal to use more than one

• Proposal, array of URL

• Note Current text broken for IPv6 IP addresses

• Draft has:new PeerConnection( “TURNS 203.0.113.2:3478”, …

• Proposal:New PeerConnection( [“turns://203.0.112.2:3478”,”stun://example.com”], …

Page 17: WebRTC PeerConnection

17

Syntax for Offer / Answer Messages• JS Objects

• JSON strings

• Other

• Use ROAP?

• Move def of application/html-peer-connection-deta to ROAP?

Page 18: WebRTC PeerConnection

18

Label• Help !

• Draft hasAll SDP media descriptions for streams represented by MediaStream objects must include a label attribute ("a=label:") whose value is the value of the MediaStream object's label attribute. [SDP] [SDPLABEL]

• Is this label really the same as the SDP “a=label” ?

• Can’t require that we have this with legacy things?

• Why do we have this?

Page 19: WebRTC PeerConnection

19

Stats

• Proposal

• Have a stats method on PeerConnection

• Have it return a dictionary of stats

• Define an IANA registry of well known stat names

• The dictionary value for a stat can be primitive type or an array or object

Page 20: WebRTC PeerConnection

20

Hints• Tell CODECs something about the application that they may need

to understand to make good encoding choices

• Audio: is music or is spoken voice

• Video: prefer spatial or temporal fidelity

• ProposalIANA registry of well known hints

Have some sort of setHints method on a media streams

Page 21: WebRTC PeerConnection

21

Glare• It happens (lets add video … )

• Deal with this in IETF

• ROAP takes care of it

Page 22: WebRTC PeerConnection

22

Data Channel• Proposal – Focus on the API

• Send and receive a string/blobUnreliable delivery ?

Reliable delivery ?

Out of order delivery?

Stream of data ?

Page 23: WebRTC PeerConnection

23

DTMF on Audio Stream• Need to callback when received DTMF and way to tell audio

stream to send DTMF

• Proposal:Add callback and method to send to audio streams

Add a way to disable it when creating stream

Page 24: WebRTC PeerConnection

24

Track Order• Draft has

The relative order of all tracks in a user agent must be stable. All audio tracks must precede all video tracks.

• Why do we need audio before video?

• Complicates mapping to SDP which is not this way