JSEP Update Justin Uberti IETF 83.5 Topics Activity since IETF - - PowerPoint PPT Presentation

jsep update
SMART_READER_LITE
LIVE PREVIEW

JSEP Update Justin Uberti IETF 83.5 Topics Activity since IETF - - PowerPoint PPT Presentation

JSEP Update Justin Uberti IETF 83.5 Topics Activity since IETF 83 Implementation Status Issues Raised Recap from IETF 83 Offer/answer state machine specified PRANSWER's only meaning is "allow additional future


slide-1
SLIDE 1

JSEP Update

Justin Uberti IETF 83.5

slide-2
SLIDE 2

Topics

  • Activity since IETF 83
  • Implementation Status
  • Issues Raised
slide-3
SLIDE 3
  • Offer/answer state machine specified
  • PRANSWER's only meaning is "allow

additional future answers"

  • Media transmission controlled by SDP

direction attribute

  • Consensus on Serial forking
  • Description of SDP attributes changeable by

the application

Recap from IETF 83

slide-4
SLIDE 4
  • JSEP support landed in Chrome 20

○ Based on draft-ietf-rtcweb-jsep-00 ○ Seems to be well understood

  • Long discussion about JSEP in API spec

○ Mostly syntactical/ease-of-use

  • Several issues raised on list

○ Parallel forking ○ "Special" offer creation

  • draft-ietf-rtcweb-jsep-01 published

○ API spec moved to Appendix ○ Document will focus on semantics and SDP layer

Activity since IETF 83

slide-5
SLIDE 5

Implementation Status

  • Chrome 20 has JSEP

○ Suffixed API: webkitPeerConnection00

  • Concepts mostly understood by developers

○ Many developers using JSEP API, features like trickle candidates ○ JSEP->ROAP, JSEP->SIP, JSEP->Jingle JS libs all created

  • Some confusion on timing of startIce vs

setLocalDescription

slide-6
SLIDE 6

W3C Status

  • Resolved issues

○ Async offer/answer generation ○ Semantics of startIce

  • TBD issues

○ SessionDescription.type field ○ SDP auto-stringify/unstringify ○ Flags for PRANSWER/restartIce ○ OnRenegotiateNeeded

slide-7
SLIDE 7

Issues Raised

  • Serial vs Parallel forking

○ PeerConnection Cloning

  • Special offer creation
  • Rehydration, revisited
slide-8
SLIDE 8

Serial Forking

A Voicemail Person

OFFER ANSWER #2 (200) ANSWER #1 (200) setRemoteDescription(PRANSWER) setRemoteDescription(ANSWER)

slide-9
SLIDE 9

Serial Forking + Trickle

  • Callee's trickle candidates are no longer

valid when a new PRANSWER arrives

  • Browser needs to discard any existing

candidates when PRANSWER/ANSWER is set with different ICE credentials

  • Unlikely to be a real-world problem

○ Only SIP forks ○ Only Jingle trickles

slide-10
SLIDE 10

Problematic Call Flow

A B C

OFFER

  • 1. ANSWER (200)
  • 2. OFFER (UPDATE)
  • 1. setRemoteDescription(PRANSWER)
  • 2. ???
slide-11
SLIDE 11

Solutions

  • Do nothing

○ App applies previous PRANSWER as final

ANSWER, then handles new OFFER as usual

○ Any future ANSWERs from other remote endpoints

must be discarded

  • Clone PeerConnection

○ Original PeerConnection follows steps above ○ Cloned PeerConnection stays open for ANSWERs

from other remote endpoints

○ Everyone is happy (except implementors, perhaps)

slide-12
SLIDE 12

Cloning

A B C

OFFER

  • 1. ANSWER (200)
  • 2. OFFER (UPDATE)
  • 1. clone = pc.clone()
  • 2. pc.setRemoteDescription(PRANSWER, incoming_desc1)
  • 3. pc.setRemoteDescription(ANSWER, pc.remoteDescription)
  • 4. pc.setRemoteDescription(OFFER, incoming_desc2)

A'

  • 1. clone.setRemoteDescription(ANSWER, incoming_desc3)
  • 1. ANSWER (200)
slide-13
SLIDE 13

Cloning, in-depth

(Thanks to Richard Ejzak)

1.

PeerConnection.clone creates a new PeerConnection from an existing PeerConnection

2.

The parent PC must have a valid localDescription, but cannot have a final remoteDescription (i.e. must be in OFFER or PRANSWER state)

3.

Cloned PC object will inherit the local streams, local ICE candidates, and local description of the PC, but not the remoteDescription.

4.

The state of the cloned PC will be OFFER.

5.

Cloning will fail if the resources needed by the second localDescription cannot be allocated.

slide-14
SLIDE 14

Questions

We already support serial forking, and multiple independent PeerConnections. How important is cloning/parallel forking?

  • In scope for v1?
  • In scope at all?
slide-15
SLIDE 15

Special Offer Creation

  • Get capabilities

○ SIP OPTIONS, essentially ○ Return SDP of everything supported, even if not typically used

  • "Full" offer

○ Want to generate a new complete offer in an existing session

  • ICE restart

○ Want to generate an offer with a new ufrag/pwd

  • Can we do this with offer constraints?
slide-16
SLIDE 16

Rehydration

  • Added section in draft to discuss this in more

detail

  • Basically this becomes

○ save localDescription ○ kill PeerConnection ○ create new PeerConnection ○ change ICE ufrag/pwd in saved description ○ setLocalDescription(OFFER, munged_desc) ○ ICE restarts, new remote desc received ○ setRemoteDescription(ANSWER, remote_desc) ○ call continues

slide-17
SLIDE 17

Next steps

  • Decide on whether we want to proceed with

cloning

  • Start referencing draft-ietf-rtcweb-rtp-usage-

03

○ Specify what SDP created by createOffer/Answer should look like

slide-18
SLIDE 18

Questions