[Telepathy] Thoughs on the next gen MediaSignalling interface

Olivier Crête olivier.crete at collabora.co.uk
Tue Apr 14 13:43:39 PDT 2009


Hi,

I spent a bunch of time thinking about how to improve the
MediaSignalling interface and how it should be fixed.


The current interface has many known problems.

- The API is reversed.. It's the old Farsight API turned upside-down
- It has this useless session layer
- It makes strange assumptions, like that you can candidates using
RTP/AVP and/or something else mixed or that you have to get all of the
candidates for different components at the same time.
- Its not possible to continue a call if the handler crashes.
- Its not possible to transfer the call from one handler to another


I propose having a simple interface where you just set the handler. If
you call it again, then the CM can assume that its a new handle and
start again. So its then easy to move the handler to a different
process, lets say you could move a call from Empathy to PiTiVi to record
it, or to show someone a preview. Or just restart stream-engine if it
crashed.

Also, the CM can poll the data as needed from the handler, so we don't
need methods for the local codecs, the CM can just read them when it
wants to.

The participant handle should be unrelated to the telepathy contact
handle, because you want want to have multiple "participants" for one
contact (for SIP/XMPP forking). But I guess they should be same same for
all Streams inside the same channel (because you want to synchronize
them).

So it would be something like:

org.fd.Tp.C.Interfaces.MediaSignalling2:

Method: SetHandler(u, o) (where u is the stream id)
Signal: NewStream u
Property: streams a(uuu) with the handle of the stream, its type (rtp,
other?) and its media types (audio, video, other)

o.fd.Tp.Client.StreamedMediaHandler:

Methods:
AddParticipants("a(ua(sv)") an array of particpants, the asv would
contain nat-traversal, relay-info, stunservers, proxies, etc
RemoveParticipants("au")
SetCodecs(id, Codecs) (can fail if there is no intersection)
AddCandidates(id, Candidates)
ForceCandidates(id, Candidates)
StartTelephonyEvent(event, volume) / StopTelephonyEvent(event)
SetSendCodec(Codec)
SetDirection(id, direction)

Properties: CurrentCodecs
Properties: Transmitters
Properties: RecvCodecs

Signals: CurrentCodecsChanged(Codecs)
Signals: NewRecvCodecs(Codecs)
Signals: Error(misc)

I hope this helps starting the discussion on a saner MediaSignalling
API.

-- 
Olivier Crête
olivier.crete at collabora.co.uk
Collabora Ltd
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/telepathy/attachments/20090414/4c1d272b/attachment.pgp 


More information about the telepathy mailing list