[Jingle] early media

Robert McQueen robert.mcqueen at collabora.co.uk
Tue Jul 22 20:08:43 CDT 2008

We discussed how Jingle<->{SIP,PSTN,etc} gateways should represent early
media (a ringing tone played to the initiator while waiting for a
response) to the Jingle client which initiates a call.

The problem with the existing spec is twofold:
 1. Jingle RTP doesn't support renegotiating codecs, it only supports an
    initial offer, and accepting that offer with the intersection, after
    which no renegotiation is possible.
 2. It's unclear how ICE interacts with early media[1] - do you want a
    separate ICE negotiation between the initiator and the gateway, or
    can the gateway use the same ICE offer and then trigger a
    renegotiation when the real client picks up? There's no way (besides
    transport-replace) to cause a renegotiation.

However, unlike SIP, Jingle allows the dynamic addition/removal of other
streams within a session, without changing the state of the other
streams or the session itself. The proposal is therefore that early
media is that the gateway should add a new senders="responder" (ie,
unidirectional from the gateway to the initiator) audio stream to the
call just for the purposes of the early media. The Jingle client can
then decide whether to negotiate and play this, or ignore it, etc.

More generally, this also avoids the need to make decisions about any
complex re-negotiation stuff in Jingle, as we can just say SIP
renegotiations can be turned into new contents within the ongoing
session by the gateway.

To allow this, the following modifications should be made:
 * Amend XEP-0166 to say:
    * the session-accept action should only accept contents which
       were offered in the session-init
    * the content-accept action should only be used to accept contents
       which were added later with content-add
    * hence we can allow content-add when the session is in the pending
 * Add an element to XEP-0167 to hint that RTP content is being added
   for the purpose of early media, so that the Jingle client should
   accept it in advance of the session itself being accepted.


[1]: In many cases it's un-necessary to use ICE as the gateway itself
will know it's not behind NAT, and can send an RTP stream for early
media directly to the call initiator.

More information about the Jingle mailing list