Halloween, 2011 Cullen Jennings fluffy@cisco.com 1 • 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” 2 • What if we want to add something else? • For instance, a message ID • Maybe some structure would be nice…. 3 • { “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 4 • 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? 5 • { “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” } 6 • We might have multiple sessions going on • Either simultaneously or in sequence • Message delays can make these look like each other 7 • { “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 8 • { “messageType”: “OFFER”, "callerSessionId":"13456789ABCDEF", … } • { “messageType”: “ANSWER”, "callerSessionId":"13456789ABCDEF", "calleeSessionId":"abc1234356", … } • Each side contributes a session ID • Session defined by combination of each side 9 • A session has a sequence of offer/answer pairs • Example: upgrade to video We have an audio call You decide to add video • This requires multiple offer/answer pairs • How do we distinguish them? 10 • { “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 11 • 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 12 • { “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 13 • 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 call For instance, he might accept audio but not video 14 • { “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 15 • 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”], … 16 • JS Objects • JSON strings • Other • Use ROAP? • Move def of application/html-peer-connection-deta to ROAP? 17 • Help ! • Draft has All 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? 18 • 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 19 • 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 • Proposal IANA registry of well known hints Have some sort of setHints method on a media streams 20 • It happens (lets add video … ) • Deal with this in IETF • ROAP takes care of it 21 • Proposal – Focus on the API • Send and receive a string/blob Unreliable delivery ? Reliable delivery ? Out of order delivery? Stream of data ? 22 • 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 23 • 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 24