Re: [rtcweb] Forking & Early Media - Proposal
Randell Jesup <randell-ietf@jesup.org> Wed, 21 September 2011 07:08 UTC
Return-Path: <randell-ietf@jesup.org>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B8DD121F8A71 for <rtcweb@ietfa.amsl.com>; Wed, 21 Sep 2011 00:08:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.613
X-Spam-Level:
X-Spam-Status: No, score=-2.613 tagged_above=-999 required=5 tests=[AWL=-0.014, BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VdFMJe85pelQ for <rtcweb@ietfa.amsl.com>; Wed, 21 Sep 2011 00:08:49 -0700 (PDT)
Received: from r2-chicago.webserversystems.com (r2-chicago.webserversystems.com [173.236.101.58]) by ietfa.amsl.com (Postfix) with ESMTP id 6222921F8B3E for <rtcweb@ietf.org>; Wed, 21 Sep 2011 00:08:49 -0700 (PDT)
Received: from pool-173-49-141-165.phlapa.fios.verizon.net ([173.49.141.165] helo=[192.168.1.12]) by r2-chicago.webserversystems.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from <randell-ietf@jesup.org>) id 1R6Gxg-0002wb-LO for rtcweb@ietf.org; Wed, 21 Sep 2011 02:11:16 -0500
Message-ID: <4E798D47.5030905@jesup.org>
Date: Wed, 21 Sep 2011 03:07:51 -0400
From: Randell Jesup <randell-ietf@jesup.org>
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.1) Gecko/20110830 Thunderbird/6.0.1
MIME-Version: 1.0
To: rtcweb@ietf.org
References: <4E777500.5030201@alvestrand.no> <69262135-CF5D-4E79-85CD-82DFDC4250C0@acmepacket.com> <7F2072F1E0DE894DA4B517B93C6A05852233F6F222@ESESSCMS0356.eemea.ericsson.se> <4E788458.1090108@alvestrand.no> <7F2072F1E0DE894DA4B517B93C6A05852233F6F2A0@ESESSCMS0356.eemea.ericsson.se> <4E788E5C.9090306@alvestrand.no> <11209B22-4D96-4367-BC31-A4D586B55A83@edvina.net> <7F2072F1E0DE894DA4B517B93C6A05852233F6F2EB@ESESSCMS0356.eemea.ericsson.se> <1A61D589-1C23-4364-AA4A-60338D8C5859@edvina.net>
In-Reply-To: <1A61D589-1C23-4364-AA4A-60338D8C5859@edvina.net>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - r2-chicago.webserversystems.com
X-AntiAbuse: Original Domain - ietf.org
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - jesup.org
X-Source:
X-Source-Args:
X-Source-Dir:
Subject: Re: [rtcweb] Forking & Early Media - Proposal
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtcweb>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 21 Sep 2011 07:08:50 -0000
NOTE: Attached below is a proposed set of forking/early-media
and clipping-avoidance rules, so don't glance and delete! :-)
Also note: I started writing this earlier today, so it was largely
done before much of today's discussion on forking. I'll note that
I include in this a method to minimize chances of answer-time
clipping. (For any who don't know (if there are any), this is
where the first fraction of a second after pickup is lost while
answering, starting codecs, doing ICE, etc.)
On 9/20/2011 9:40 AM, Olle E. Johansson wrote:
> 20 sep 2011 kl. 15:15 skrev Christer Holmberg:
>
>>>> Once we start requiring that the PeerConnection know the
>>>> difference between "early" media and "late" media, it seems
>>>> to me we're slipping down a slippery slope.
>>> The difference between early and late media is purely a
>>> billing decision in PSTN. I don't think we should separate
>>> these on the rtcweb side. It's a PSTN gateway issue, not
>>> something to be bothered with in rtcweb.
>> It's not about knowing the difference between "early" and "late" media - it's about whether the API and browser need to support multiple SIMULTANOUS SDP answers - or whether we assume that the JS SIP app will always, at any given time, only provide ONE SDP answer to the API and browser.
> I just wanted to get rid of the early/late media discussion. As you state, the forking issue with getting multiple responses is a separate issue.
>
> Do we have any use cases using forking? Is forking a desired feature or something that SIP brought in?
No, this is something inherent in a person you want to converse with
possibly being in different places. Different phones in a home,
different computers in a home or out of it (your desktop, your laptop,
your tablet, your work computer, your Android phone) - when someone
wants to talk to you on Skype or what have you, often the service will
want to offer the connection to any and all devices you're logged into
the service from. So, it forks the request. We'd have this issue
even if we totally disallow SIP and disallow PSTN connectivity. If
you require that the website/server handle this and only provide one
answer, you're much more likely to clip the answer (lose audio right
after accept while the channels are being opened).
Two things in particular appear here. One is early media (I want to
send media to you but no one has accepted). I do not propose that
rtcweb generate early media; some sort of "alerting" notification is
enough (equivalent to 180). (Realize that means no custom callback
tones or video, or weird cases like sitting on hold or in an IVR while
not actually "in" a call). If so, we only have to worry about interop
cases - calling out to legacy, or *maybe* a call forked in rtcweb
where one of the forks goes to a legacy device or gateway that sends
early media.
The other is choosing which answer to accept if multiple arrive; that
can be up to the application I think (though 99% likely the app will
want to use the first answer). I don't think we have to *mandate*
that the first answer is the one we use though I can't think of any
cases where we wouldn't, but I'm pretty sure they exist and I wouldn't
want to outlaw them for no reason). If it makes any use-cases easier
to mandate the first answer, that may change my opinion. If you're
using SIP (JS or not) that might affect the answer, of course.
While waiting for an acceptance, it makes *lots* of sense to "warm up"
the connection(s) so that when the call is accepted there's minimal
delay or pickup loss. "warm up" means to do an ICE exchange and
possibly even instantiate codecs, etc. This is complicated by not
knowing the final answer until the user decides how to answer, but you
could warm up the likely streams/codecs in most cases, and drop some
if needed on ACCEPT. In the forking case, you could warm up
connections to some or all possible answers. (Pacing may be an issue
here, but often there are 5-20 seconds to do it in.)
Implicit in this is separating ANSWERs from "acceptance", and
verifying on "acceptance" that the correct ANSWER is used (for
example, we warm up audio and video, and the person answers
audio-only, or for some reason chooses a different codec).
So, to summarize in psuedo-spec language:
0) I'm assuming an Offer-Answer model here, though not assuming SDP.
If you want, read "SDP ANSWER" for "ANSWER", etc to map to Harald's
proposals. Note that I add "ACCEPT".
0.1) Rough mapping to SIP:
a) INVITE -> OFFER
b) 183 -> ANSWER
c) 180 -> ANSWER-with-no-media-streams
c) 200 -> ANSWER (may be suppressed) + ACCEPT
0.2) I'm assuming OFFERs and ANSWERs and ACCEPTs are delivered on
a reliable, in-order channel.
1) webrtc clients WILL NOT send early media
[See below; I see no real need for webrtc<->webrtc client connections
to send early media, but SIP/PSTN interop cases may require it, so
I have an alternative below]
2) when a webrtc client receives a OFFER, it MAY generate a speculative
ANSWER in order to allow pre-starting the PeerConnection in a disabled
state. If pre-started, NO media shall be sent until the call has been
ACCEPTED. Note that the OFFERer may receive data before seeing
the ACCEPT.
3) if the ANSWERer generated a speculative ANSWER, it may replace that
with an alternative ANSWER before sending ACCEPT. This alternative
SHOULD use the same connection address as the original, and if so
the existing PeerConnection established or being established SHOULD
be retained, but the mediastream configuration changed to match
the new ANSWER.
4) the OFFERer SHOULD pre-start PeerConnections on a speculative ANSWER, or
they MAY wait until an ACCEPT and then start the last ANSWER from that
source. If multiple sources supply speculative ANSWERs, the OFFERer
MAY pre-start some, none or all of them as it wishes.
[Open question: do we pre-start MediaStreams in each pre-starting
PeerConnection, or do (can) we defer this until ACCEPT?]
5) when the OFFERer receives an ACCEPT, it MAY close other PeerConnections
opened speculatively.
6) when an ANSWERer sends an accept, it MAY begin sending media immediately
if the PeerConnection was pre-started. It SHOULD be ready to receive
media before sending the ACCEPT.
7) servers handling signalling for webrtc clients MAY fork a call offer
to multiple webrtc clients
8) if a call is forked, the webrtc client MAY receive either a single
ANSWER and ACCEPT, or MAY receive multiple ANSWERs with one or more
ACCEPTs, depending on how the server works.
The provides a way to minimize the chances of start-of-call clipping,
and handles forking with minimal clipping (with cooperation of the
app). Note that there may be a implementation limit on the number of
PeerConnections that can be "warmed up" before an ACCEPT.
Yes, if we remove 1) and replace it with (probably lower down)
N) webrtc clients MAY send "early media" on a pre-started PeerConnection
but MUST NOT send any media without explicit action or consent of the
user. webrtc clients MAY play the early media.
or
N) webrtc media gateways MAY send "early media" on a pre-started PeerConnection,
and webrtc clients receiving "early media" MAY play it, and MAY send
media (such as DTMF) but MUST NOT send any media without explicit
action or consent of the user.
(and you have to change 2) above)
you get something that is pretty interoperable with legacy SIP devices
and especially PSTN gateways or border controllers, including the infamous
American Airlines DTMF trick. This assumes a WebRTC<->legacy media gateway
is in use (note that all the above is about PeerConnections). I have not
tried to figure out how non-gatewayed legacy would work into this, but it
should be doable.
--
Randell Jesup
randell-ietf@jesup.org
- Re: [rtcweb] Minimal SDP negotiation mechanism Olle E. Johansson
- [rtcweb] Minimal SDP negotiation mechanism Harald Alvestrand
- Re: [rtcweb] Minimal SDP negotiation mechanism Paul Kyzivat
- Re: [rtcweb] Minimal SDP negotiation mechanism Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Olle E. Johansson
- Re: [rtcweb] Minimal SDP negotiation mechanism Christer Holmberg
- Re: [rtcweb] Minimal SDP negotiation mechanism Iñaki Baz Castillo
- Re: [rtcweb] Minimal SDP negotiation mechanism Harald Alvestrand
- Re: [rtcweb] Minimal SDP negotiation mechanism Christer Holmberg
- Re: [rtcweb] Minimal SDP negotiation mechanism Christer Holmberg
- Re: [rtcweb] Minimal SDP negotiation mechanism Harald Alvestrand
- Re: [rtcweb] Minimal SDP negotiation mechanism Olle E. Johansson
- Re: [rtcweb] Minimal SDP negotiation mechanism Christer Holmberg
- Re: [rtcweb] Minimal SDP negotiation mechanism Iñaki Baz Castillo
- Re: [rtcweb] Minimal SDP negotiation mechanism Magnus Westerlund
- Re: [rtcweb] Minimal SDP negotiation mechanism Roman Shpount
- Re: [rtcweb] Minimal SDP negotiation mechanism Olle E. Johansson
- Re: [rtcweb] Minimal SDP negotiation mechanism Cullen Jennings
- [rtcweb] Forking & Early Media - Was Re: Minimal … Cullen Jennings
- Re: [rtcweb] Minimal SDP negotiation mechanism Cullen Jennings
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Cullen Jennings
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Olle E. Johansson
- Re: [rtcweb] Minimal SDP negotiation mechanism Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Dzonatas Sol
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Ravindran Parthasarathi
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Roman Shpount
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Olle E. Johansson
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Ravindran Parthasarathi
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Saúl Ibarra Corretgé
- Re: [rtcweb] Minimal SDP negotiation mechanism Harald Alvestrand
- Re: [rtcweb] Forking & Early Media - Proposal Randell Jesup
- Re: [rtcweb] Forking & Early Media - Proposal Olle E. Johansson
- Re: [rtcweb] Minimal SDP negotiation mechanism Magnus Westerlund
- Re: [rtcweb] Minimal SDP negotiation mechanism Harald Alvestrand
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Muthu Arul Mozhi Perumal (mperumal)
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Roman Shpount
- Re: [rtcweb] Forking & Early Media - Proposal Roman Shpount
- Re: [rtcweb] Forking & Early Media - Proposal Randell Jesup
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Cullen Jennings
- [rtcweb] SIP Glare - Re: Minimal SDP negotiation … Cullen Jennings
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Tim Panton
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Roman Shpount
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Roman Shpount
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Magnus Westerlund
- Re: [rtcweb] Forking & Early Media - Proposal Elwell, John
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Harald Alvestrand
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Iñaki Baz Castillo
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Cullen Jennings
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Dzonatas Sol
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Matthew Kaufman
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Christer Holmberg
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Iñaki Baz Castillo
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Christer Holmberg
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Cullen Jennings
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Iñaki Baz Castillo
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Cullen Jennings
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Matthew Kaufman
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Christer Holmberg
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Cullen Jennings
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Hadriel Kaplan
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Roman Shpount
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Randell Jesup
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Christer Holmberg
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Christer Holmberg
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Hadriel Kaplan
- Re: [rtcweb] SIP Glare - Re: Minimal SDP negotiat… Magnus Westerlund
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Harald Alvestrand
- Re: [rtcweb] Forking & Early Media - Was Re: Mini… Christer Holmberg