diff options
Diffstat (limited to 'qt4/spec/Channel_Type_Streamed_Media.xml')
-rw-r--r-- | qt4/spec/Channel_Type_Streamed_Media.xml | 853 |
1 files changed, 0 insertions, 853 deletions
diff --git a/qt4/spec/Channel_Type_Streamed_Media.xml b/qt4/spec/Channel_Type_Streamed_Media.xml deleted file mode 100644 index aa2b90345..000000000 --- a/qt4/spec/Channel_Type_Streamed_Media.xml +++ /dev/null @@ -1,853 +0,0 @@ -<?xml version="1.0" ?> -<node name="/Channel_Type_Streamed_Media" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <tp:copyright> Copyright © 2005-2009 Collabora Limited </tp:copyright> - <tp:copyright> Copyright © 2005-2009 Nokia Corporation </tp:copyright> - <tp:copyright> Copyright © 2006 INdT </tp:copyright> - <tp:license xmlns="http://www.w3.org/1999/xhtml"> - <p>This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version.</p> - -<p>This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details.</p> - -<p>You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p> - </tp:license> - <interface name="org.freedesktop.Telepathy.Channel.Type.StreamedMedia"> - <tp:requires interface="org.freedesktop.Telepathy.Channel"/> - <tp:requires interface="org.freedesktop.Telepathy.Channel.Interface.Group"/> - - <tp:enum name="Media_Stream_Type" type="u" - array-name="Media_Stream_Type_List"> - <tp:enumvalue suffix="Audio" value="0"> - <tp:docstring>An audio stream</tp:docstring> - </tp:enumvalue> - <tp:enumvalue suffix="Video" value="1"> - <tp:docstring>A video stream</tp:docstring> - </tp:enumvalue> - </tp:enum> - - <tp:enum name="Media_Stream_State" type="u"> - <tp:enumvalue suffix="Disconnected" value="0"> - <tp:docstring>The stream is disconnected.</tp:docstring> - </tp:enumvalue> - <tp:enumvalue suffix="Connecting" value="1"> - <tp:docstring>The stream is trying to connect.</tp:docstring> - </tp:enumvalue> - <tp:enumvalue suffix="Connected" value="2"> - <tp:docstring>The stream is connected.</tp:docstring> - </tp:enumvalue> - </tp:enum> - - <tp:enum name="Media_Stream_Direction" type="u"> - <tp:enumvalue suffix="None" value="0"> - <tp:docstring>Media are not being sent or received</tp:docstring> - </tp:enumvalue> - <tp:enumvalue suffix="Send" value="1"> - <tp:docstring>Media are being sent, but not received</tp:docstring> - </tp:enumvalue> - <tp:enumvalue suffix="Receive" value="2"> - <tp:docstring>Media are being received, but not sent</tp:docstring> - </tp:enumvalue> - <tp:enumvalue suffix="Bidirectional" value="3"> - <tp:docstring>Media are being sent and received</tp:docstring> - </tp:enumvalue> - </tp:enum> - - <tp:flags name="Media_Stream_Pending_Send" value-prefix="Media_Stream_Pending" type="u"> - <tp:flag suffix="Local_Send" value="1"> - <tp:docstring> - The local user has been asked to send media by the remote user. - Call <tp:member-ref>RequestStreamDirection</tp:member-ref> to - indicate whether or not this is acceptable. - </tp:docstring> - </tp:flag> - <tp:flag suffix="Remote_Send" value="2"> - <tp:docstring> - The remote user has been asked to send media by the local user. - The <tp:member-ref>StreamDirectionChanged</tp:member-ref> signal - will be emitted when the remote user accepts or rejects this - change. - </tp:docstring> - </tp:flag> - </tp:flags> - - <tp:struct name="Media_Stream_Info" array-name="Media_Stream_Info_List"> - <tp:member type="u" tp:type="Stream_ID" name="Identifier"/> - <tp:member type="u" tp:type="Contact_Handle" name="Contact"/> - <tp:member type="u" tp:type="Media_Stream_Type" name="Type"/> - <tp:member type="u" tp:type="Media_Stream_State" name="State"/> - <tp:member type="u" tp:type="Media_Stream_Direction" name="Direction"/> - <tp:member type="u" tp:type="Media_Stream_Pending_Send" - name="Pending_Send_Flags"/> - </tp:struct> - - <tp:simple-type name="Stream_ID" type="u" - array-name="Stream_ID_List"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>An unsigned integer identifying a stream within a channel.</p> - </tp:docstring> - </tp:simple-type> - - <method name="ListStreams" tp:name-for-bindings="List_Streams"> - <arg direction="out" type="a(uuuuuu)" tp:type="Media_Stream_Info[]" - name="Streams"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - An array of structs containing: - <ul> - <li>the stream identifier</li> - <li>the contact handle who the stream is with (or 0 if the stream - represents more than a single member)</li> - <li>the type of the stream</li> - <li>the current stream state</li> - <li>the current direction of the stream</li> - <li>the current pending send flags</li> - </ul> - </tp:docstring> - </arg> - <tp:docstring> - Returns an array of structs representing the streams currently active - within this channel. Each stream is identified by an unsigned integer - which is unique for each stream within the channel. - </tp:docstring> - </method> - - <method name="RemoveStreams" tp:name-for-bindings="Remove_Streams"> - <arg direction="in" name="Streams" type="au" tp:type="Stream_ID[]"> - <tp:docstring> - An array of stream identifiers (as defined in - <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>Request that the given streams are removed. If all streams are - removed, the channel MAY close.</p> - - <p>Clients SHOULD NOT attempt to terminate calls by removing all the - streams; instead, clients SHOULD terminate calls by removing the - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface">Group.SelfHandle</tp:dbus-ref> - from the channel, using either - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembers</tp:dbus-ref> - or - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref>. - </p> - </tp:docstring> - - <tp:possible-errors> - <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"> - <tp:docstring> - A stream identifier is unknown - </tp:docstring> - </tp:error> - </tp:possible-errors> - </method> - - <method name="RequestStreamDirection" - tp:name-for-bindings="Request_Stream_Direction"> - <arg direction="in" name="Stream_ID" type="u"> - <tp:docstring> - The stream identifier (as defined in - <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - <arg direction="in" name="Stream_Direction" type="u" tp:type="Media_Stream_Direction"> - <tp:docstring> - The desired stream direction (a value of MediaStreamDirection) - </tp:docstring> - </arg> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>Request a change in the direction of an existing stream. In particular, - this might be useful to stop sending media of a particular type, - or inform the peer that you are no longer using media that is being - sent to you.</p> - - <p>Depending on the protocol, streams which are no longer sending in - either direction should be removed and a - <tp:member-ref>StreamRemoved</tp:member-ref> signal emitted. - Some direction changes can be enforced locally (for example, - BIDIRECTIONAL -> RECEIVE can be achieved by merely stopping sending), - others may not be possible on some protocols, and some need agreement - from the remote end. In this case, the MEDIA_STREAM_PENDING_REMOTE_SEND - flag will be set in the - <tp:member-ref>StreamDirectionChanged</tp:member-ref> signal, and the - signal - emitted again without the flag to indicate the resulting direction when - the remote end has accepted or rejected the change.</p> - </tp:docstring> - <tp:possible-errors> - <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"> - <tp:docstring> - A stream identifier is unknown - </tp:docstring> - </tp:error> - <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"> - <tp:docstring> - The requested direction is not available on this stream - </tp:docstring> - </tp:error> - </tp:possible-errors> - </method> - - <method name="RequestStreams" tp:name-for-bindings="Request_Streams"> - <arg direction="in" name="Contact_Handle" type="u" tp:type="Contact_Handle"> - <tp:docstring> - A contact handle with whom to establish the streams - </tp:docstring> - </arg> - <arg direction="in" name="Types" type="au" tp:type="Media_Stream_Type[]"> - <tp:docstring> - An array of stream types (values of MediaStreamType) - </tp:docstring> - </arg> - <arg direction="out" type="a(uuuuuu)" tp:type="Media_Stream_Info[]" - name="Streams"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - An array of structs (in the same order as the given stream types) - containing: - <ul> - <li>the stream identifier</li> - <li>the contact handle who the stream is with (or 0 if the stream - represents more than a single member)</li> - <li>the type of the stream</li> - <li>the current stream state</li> - <li>the current direction of the stream</li> - <li>the current pending send flags</li> - </ul> - </tp:docstring> - </arg> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>Request that streams be established to exchange the given types of - media with the given member. In general this will try and establish a - bidirectional stream, but on some protocols it may not be possible to - indicate to the peer that you would like to receive media, so a - send-only stream will be created initially. In the cases where the - stream requires remote agreement (eg you wish to receive media from - them), the <tp:member-ref>StreamDirectionChanged</tp:member-ref> signal - will be emitted with the - MEDIA_STREAM_PENDING_REMOTE_SEND flag set, and the signal emitted again - with the flag cleared when the remote end has replied.</p> - - <p>If streams of the requested types already exist, calling this - method results in the creation of additional streams. Accordingly, - clients wishing to have exactly one audio stream or exactly one - video stream SHOULD check for the current streams using - <tp:member-ref>ListStreams</tp:member-ref> before calling this - method.</p> - </tp:docstring> - <tp:changed version="0.17.2"> - <p>It is valid to use a handle which is neither - a current nor pending member in this channel's <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface">Group</tp:dbus-ref> - interface. If - so, that handle will be added to the remote-pending set only when - an attempt has actually been made to contact them. For further - call-state notification, use the <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface">CallState</tp:dbus-ref> - interface, if - supported. This usage was not allowed in spec versions below - 0.17.2.</p> - </tp:changed> - <tp:possible-errors> - <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/> - <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"> - <tp:docstring> - A stream type given is invalid. - </tp:docstring> - </tp:error> - <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented"> - <tp:docstring> - A stream type given is not implemented by the connection manager. - Since 0.17.23, connection managers SHOULD raise this error - in preference to InvalidArgument. - <tp:rationale> - Connection managers can't know whether an unknown number - is a valid stream type that was introduced in a later spec - version. - </tp:rationale> - </tp:docstring> - </tp:error> - <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"> - <tp:docstring> - That contact's client does not implement one of the given stream - types. For this method, clients SHOULD consider this error and - NotCapable to be equivalent. - </tp:docstring> - </tp:error> - <tp:error name="org.freedesktop.Telepathy.Error.NotCapable"> - <tp:docstring> - That contact's client does not implement one of the given stream - types. Since 0.17.23, connection managers SHOULD raise - this in preference to NotAvailable. - </tp:docstring> - </tp:error> - </tp:possible-errors> - </method> - - <signal name="StreamAdded" tp:name-for-bindings="Stream_Added"> - <arg name="Stream_ID" type="u"> - <tp:docstring> - The stream identifier (as defined in - <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - <arg name="Contact_Handle" type="u" tp:type="Contact_Handle"> - <tp:docstring> - The contact handle who the stream is with (or 0 if it - represents more than a single member) - </tp:docstring> - </arg> - <arg name="Stream_Type" type="u" tp:type="Media_Stream_Type"> - <tp:docstring> - The stream type (a value from MediaStreamType) - </tp:docstring> - </arg> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>Emitted when a new stream has been added to this channel. - Clients SHOULD assume that the stream's - <tp:type>Media_Stream_State</tp:type> is initially Disconnected.</p> - - <p>If a connection manager needs to represent the addition of a stream - whose state is already Connecting or Connected, it MUST do this - by emitting StreamAdded, closely followed by - <tp:member-ref>StreamStateChanged</tp:member-ref> indicating a - change to the appropriate state.</p> - - <tp:rationale> - <p>Historically, it was not clear from the StreamAdded signal what - the state of the stream was. telepathy-spec 0.17.22 - clarified this.</p> - </tp:rationale> - - <p>Similarly, clients SHOULD assume that the initial - <tp:type>Media_Stream_Direction</tp:type> of a newly added stream - is Receive, and that the initial - <tp:type>Media_Stream_Pending_Send</tp:type> is - Pending_Local_Send.</p> - - <p>If a connection manager needs to represent the addition of a stream - whose direction or pending-send differs from those initial values, - it MUST do so by emitting StreamAdded, closely followed by - <tp:member-ref>StreamDirectionChanged</tp:member-ref> indicating a - change to the appropriate direction and pending-send state.</p> - - <tp:rationale> - <p>StreamAdded doesn't itself indicate the stream's direction; this - is unfortunate, but is preserved for compatibility.</p> - - <p>This is the appropriate direction for streams added by a remote - contact on existing connection managers, and does not violate - user privacy by automatically sending audio or video (audio streams - start off muted, video streams start off not sending). For - streams added by the local user using the client receiving the - signal, the true direction can also be determined from the return - value of the <tp:member-ref>RequestStreams</tp:member-ref> - method.</p> - - <p>Existing clients typically operate by maintaining a separate - idea of the directions that they would like the streams to have, - and enforcing these intended directions by calling - <tp:member-ref>RequestStreamDirection</tp:member-ref> whenever - needed.</p> - </tp:rationale> - </tp:docstring> - </signal> - - <signal name="StreamDirectionChanged" - tp:name-for-bindings="Stream_Direction_Changed"> - <arg name="Stream_ID" type="u"> - <tp:docstring> - The stream identifier (as defined in <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - <arg name="Stream_Direction" type="u" tp:type="Media_Stream_Direction"> - <tp:docstring> - The new stream direction (as defined in ListStreams) - </tp:docstring> - </arg> - <arg name="Pending_Flags" type="u" tp:type="Media_Stream_Pending_Send"> - <tp:docstring> - The new pending send flags (as defined in ListStreams) - </tp:docstring> - </arg> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>Emitted when the direction or pending flags of a stream are - changed.</p> - - <p>If the MEDIA_STREAM_PENDING_LOCAL_SEND flag is set, the remote user - has requested that we begin sending on this stream. - <tp:member-ref>RequestStreamDirection</tp:member-ref> - should be called to indicate whether or not this change is - acceptable.</p> - - <tp:rationale> - <p>This allows for a MSN-style user interface, "Fred has asked you - to enable your webcam. (Accept | Reject)", if desired.</p> - </tp:rationale> - </tp:docstring> - </signal> - - <signal name="StreamError" tp:name-for-bindings="Stream_Error"> - <arg name="Stream_ID" type="u"> - <tp:docstring> - The stream identifier (as defined in - <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - <arg name="Error_Code" type="u" tp:type="Media_Stream_Error"> - <tp:docstring> - A stream error number, one of the values of MediaStreamError - </tp:docstring> - </arg> - <arg name="Message" type="s"> - <tp:docstring> - A string describing the error (for debugging purposes only) - </tp:docstring> - </arg> - <tp:docstring> - Emitted when a stream encounters an error. - </tp:docstring> - </signal> - - <signal name="StreamRemoved" tp:name-for-bindings="Stream_Removed"> - <arg name="Stream_ID" type="u"> - <tp:docstring> - stream_id - the stream identifier (as defined in - <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - <tp:docstring> - Emitted when a stream has been removed from this channel. - </tp:docstring> - </signal> - - <signal name="StreamStateChanged" - tp:name-for-bindings="Stream_State_Changed"> - <arg name="Stream_ID" type="u"> - <tp:docstring> - The stream identifier (as defined in - <tp:member-ref>ListStreams</tp:member-ref>) - </tp:docstring> - </arg> - <arg name="Stream_State" type="u" tp:type="Media_Stream_State"> - <tp:docstring> - The new stream state (as defined in ListStreams) - </tp:docstring> - </arg> - <tp:docstring> - Emitted when a member's stream's state changes. - </tp:docstring> - </signal> - - <property name="InitialAudio" tp:name-for-bindings="Initial_Audio" - type="b" access="read"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>If set to true in a channel request that will create a new channel, - the connection manager should immediately attempt to establish an - audio stream to the remote contact, making it unnecessary for the - client to call <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Type.StreamedMedia">RequestStreams</tp:dbus-ref>.</p> - - <p>If this property, or InitialVideo, is passed to EnsureChannel - (as opposed to CreateChannel), the connection manager SHOULD ignore - these properties when checking whether it can return an existing - channel as suitable; these properties only become significant when - the connection manager has decided to create a new channel.</p> - - <p>If true on a requested channel, this indicates that the audio - stream has already been requested and the client does not need to - call RequestStreams, although it MAY still do so.</p> - - <p>If true on an unrequested (incoming) channel, this indicates that - the remote contact initially requested an audio stream; this does - not imply that that audio stream is still active (as indicated by - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Type.StreamedMedia">ListStreams</tp:dbus-ref>).</p> - - <p>This property is immutable (cannot change), and therefore SHOULD - appear wherever immutable properties are reported, e.g. <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">NewChannels</tp:dbus-ref> - signals.</p> - - <tp:rationale><p>This reduces D-Bus round trips.</p></tp:rationale> - - <p>Connection managers capable of signalling audio calls to contacts - SHOULD include a channel class in <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">RequestableChannelClasses</tp:dbus-ref> - with <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">ChannelType</tp:dbus-ref> - = <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref> - and <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref> - = Contact in the fixed properties dictionary, and InitialAudio - (and also InitialVideo, if applicable) in the allowed properties - list. Clients wishing to discover whether a connection manager - can signal audio and/or video calls SHOULD use this information.</p> - - <tp:rationale> - <p>Not all protocols support signalling video calls, and it would be - possible (although unlikely) to have a protocol where only video, - and not audio, could be signalled.</p> - </tp:rationale> - - <p>Connection managers that support the <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Connection.Interface">ContactCapabilities</tp:dbus-ref> - interface SHOULD represent the capabilities of receiving audio - and/or video calls by including a channel class in - a contact's capabilities with ChannelType = StreamedMedia - in the fixed properties dictionary, and InitialAudio and/or - InitialVideo in the allowed properties list. Clients wishing to - discover whether a particular contact is likely to be able to - receive audio and/or video calls SHOULD use this information.</p> - - <tp:rationale> - <p>Not all clients support video calls, and it would also be - possible (although unlikely) to have a client which could only - stream video, not audio.</p> - </tp:rationale> - - <p>Clients that are willing to receive audio and/or video calls - SHOULD include the following among their channel classes if - calling <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities">UpdateCapabilities</tp:dbus-ref> - (clients of a <tp:dbus-ref - namespace="org.freedesktop.Telepathy">ChannelDispatcher</tp:dbus-ref> - SHOULD instead arrange for the ChannelDispatcher to do this, - by including the filters in their <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Client.Handler">HandlerChannelFilter</tp:dbus-ref> - properties):</p> - - <ul> - <li>{ ChannelType = StreamedMedia }</li> - <li>{ ChannelType = StreamedMedia, InitialAudio = true } - if receiving calls with audio is supported</li> - <li>{ ChannelType = StreamedMedia, InitialVideo = true } - if receiving calls with video is supported</li> - </ul> - - <tp:rationale> - <p>Connection managers for protocols with capability discovery, - like XMPP, need this information to advertise the appropriate - capabilities for their protocol.</p> - </tp:rationale> - </tp:docstring> - </property> - - <property name="InitialVideo" tp:name-for-bindings="Initial_Video" - type="b" access="read"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>The same as <tp:member-ref>InitialAudio</tp:member-ref>, but for - a video stream. This property is immutable (cannot change).</p> - - <p>In particular, note that if this property is false, this does not - imply that an active video stream has not been added, only that no - video stream was active at the time the channel appeared.</p> - - <p>This property is the correct way to discover whether connection - managers, contacts etc. support video calls; it appears in - capabilities structures in the same way as InitialAudio.</p> - </tp:docstring> - </property> - - <property name="ImmutableStreams" tp:name-for-bindings="Immutable_Streams" - type="b" access="read"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>If <tt>True</tt>, once streams have been requested for this channel - (either by setting <tp:member-ref>InitialAudio</tp:member-ref> or - <tp:member-ref>InitialVideo</tp:member-ref> when the channel is - requested, or by calling - <tp:member-ref>RequestStreams</tp:member-ref> on a channel with no - streams), a stream of a different content type cannot be added; - subsequent calls to <tp:member-ref>RequestStreams</tp:member-ref> - that attempt to do so will fail.</p> - - <p>If this property is missing, clients SHOULD assume that it is false, - and thus that the channel's streams can be changed once the call has - started.</p> - - <p>If this property is present in the "allowed" set in all of the - StreamedMedia entries in a contact's capabilities, then user - interfaces MAY choose to show a separate "call" option for each - class of call.</p> - - <tp:rationale> - <p>For example, once an audio-only Google Talk call has started, - it is not possible to add a video stream; both audio and video - must be requested at the start of the call if video is desired. - User interfaces may use this pseudo-capability as a hint to - display separate "Audio call" and "Video call" buttons, rather - than a single "Call" button with the option to add and remove - video once the call has started for contacts without this flag. - </p> - </tp:rationale> - - <p>This property is immutable, and therefore SHOULD be announced - in <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">NewChannels</tp:dbus-ref>, - etc.</p> - </tp:docstring> - </property> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>A channel that can send and receive streamed media such as audio or - video. Provides a number of methods for listing and requesting new - streams, and signals to indicate when streams have been added, removed - and changed status. The state of the call (ringing remotely, ringing - locally, answered, missed, etc.) are represented using the properties - and signals of the Group interface.</p> - - <p>In general this should be used in conjunction with the <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface">MediaSignalling</tp:dbus-ref> - interface to exchange connection candidates and codec choices with - whichever component is responsible for the streams. However, in certain - applications where no candidate exchange is necessary (eg the streams - are handled by specialised hardware which is controlled directly by the - connection manager), the signalling interface can be omitted and this - channel type used simply to control the streams.</p> - - <h4>Outgoing calls</h4> - - <p>To make an audio-only call to a contact <tt>foo@example.com</tt>, - clients should call:</p> - - <blockquote> - <pre> -<tp:dbus-ref - namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">CreateChannel</tp:dbus-ref>({ - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">ChannelType</tp:dbus-ref>: <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>, - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref>: Contact, - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">TargetID</tp:dbus-ref>: 'foo@example.com', - <tp:member-ref>InitialAudio</tp:member-ref>: True, -)</pre></blockquote> - - <p>As always, <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref> - may be used in place of TargetID if the contact's handle is already - known. To make an audio-and-video call, the client should also specify - <tp:member-ref>InitialVideo</tp:member-ref>. The connection manager - SHOULD return a channel whose immutable properties contain the local - user as the <tp:dbus-ref namespace='ofdT.Channel'>InitiatorHandle</tp:dbus-ref>, - the remote contact as the <tp:dbus-ref namespace='ofdT.Channel'>TargetHandle</tp:dbus-ref>, - <tp:dbus-ref namespace='ofdT.Channel'>Requested</tp:dbus-ref> = <code>True</code> - (indicating that the call is outgoing); the <tp:dbus-ref - namespace='ofdT.Channel.Interface'>Group</tp:dbus-ref> interface should - initially have the local user in <tp:dbus-ref - namespace='ofdT.Channel.Interface.Group'>Members</tp:dbus-ref> and the remote - contact in <tp:dbus-ref - namespace='ofdT.Channel.Interface.Group'>RemotePendingMembers</tp:dbus-ref>, to - indicate that we are awaiting their response.</p> - - <p>The contact answering the call is represented by the CM signalling - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref>, - moving the remote contact to Members, with the remote contact as the - <var>Actor</var> and <var>Reason</var> <code>None</code>. The contact - rejecting the call is represented by both contacts being removed from - the group, with the remote contact as the <var>Actor</var> and - <var>Reason</var> set appropriately. The local user may hang up at any - time by calling - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref> - to remove themself, with an appropriate reason; the CM SHOULD relay the - reason to the remote contact, and emit MembersChanged removing both - contacts from the group with the self handle as the <var>Actor</var>.</p> - - <p>(In the past, several other patterns have been used to place outgoing - calls; see - <a href="http://telepathy.freedesktop.org/wiki/Requesting%20StreamedMedia%20channels">'Requesting StreamedMedia Channels' on the Telepathy wiki</a> - for the details.)</p> - - <h4>Incoming calls</h4> - - <p>Incoming calls' immutable properties should contain <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref> - = Contact, both <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref> and - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel">InitiatorHandle</tp:dbus-ref> - set to the remote contact, <tp:dbus-ref - namespace='ofdT.Channel'>Requested</tp:dbus-ref> = <code>False</code> - (indicating that this is an incoming call), and appropriate values of - <tp:member-ref>InitialAudio</tp:member-ref> and - <tp:member-ref>InitialVideo</tp:member-ref>; the Group interface should - initially have the local user in <tp:dbus-ref - namespace="ofdT.Channel.Interface.Group">LocalPendingMembers</tp:dbus-ref> - and the remote contact in <tp:dbus-ref - namespace="ofdT.Channel.Interface.Group">Members</tp:dbus-ref>, - indicating that the contact is awaiting our response.</p> - - <p>To accept the call, use <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">AddMembers</tp:dbus-ref> - to move the local user to the group's members. To reject the call, use - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref> - to remove the local member from the group, with an appropriate reason. - If the remote user ends the call before it is answered, this is - represented by <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref> - removing both parties from the group with the remote contact as the - <var>Actor</var>, and <var>Reason</var> set appropriately.</p> - - <p>Note that the call may end with the self handle as the - <var>Actor</var> without the user having chosen to reject the call, as - indicated by the nature of the <var>Reason</var>. Specifically, some - local component may time out the call (indicating this with reason - <code>No_Answer</code>; for example, the CM may have forwarded the call - to another number, as configured using <tp:dbus-ref - namespace='ofdT.Connection.Interface'>Forwarding.DRAFT</tp:dbus-ref>), - or something may have gone wrong with the call - (indicated by reason <code>Error</code>). Such calls SHOULD be - considered missed, just as if the remote contact had hung up before the - local user answered the call.</p> - - <tp:rationale> - <p>This is a bit awkward, but these are the best ways we can represent - these situations. It's important to document which calls should be - considered missed, to ensure that the user can be notified.</p> - </tp:rationale> - - <p>When the local user accepts an incoming call, the connection manager - SHOULD change the direction of any streams with pending local send - to be sending, without altering whether those streams are - receiving.</p> - - <tp:rationale> - <p>This matches existing practice, and means that a client - can answer incoming calls and get an unmuted microphone/activated - webcam without having to take additional action to accept the - stream directions.</p> - - <p>It does, however, introduce a race condition: a client believing - that it is accepting an audio-only call by calling AddMembers - can inadvertantly accept an audio + video call (and hence activate - sending from a webcam without the user's permission) if a video - stream is added just before AddMembers is processed. This race - should be removed when this specification is revised.</p> - </tp:rationale> - - <h4>During a call</h4> - - <p>If <tp:member-ref>ImmutableStreams</tp:member-ref> is - <code>False</code>, new streams may be requested using - <tp:member-ref>RequestStreams</tp:member-ref> (to add video to an - audio-only call, for instance), and existing streams may be removed using - <tp:member-ref>RemoveStreams</tp:member-ref> (for example, to downgrade - an audio-video call to audio-only). The call may be ended by calling - <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembers</tp:dbus-ref> - or <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">RemoveMembersWithReason</tp:dbus-ref>; the call ending is signalled by the CM emitting <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref>, - removing both parties from the group.</p> - - <h4>Handler filters</h4> - - <p>For historical reasons, handlers must specify more than one filter if - they want to correctly advertise support for audio and/or video calls. If - they can handle channels using the <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface">MediaSignalling</tp:dbus-ref> - interface, they should also advertise various - <tp:type>Handler_Capability_Token</tp:type>s to indicate which codecs and - transports they support. See <tp:member-ref>InitialAudio</tp:member-ref> - and <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Channel.Interface">MediaSignalling/video/h264</tp:dbus-ref> - for the gory details. In summary:</p> - - <dl> - <dt>To advertise support for streamed media in general, include the - following filter in <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Client.Handler">HandlerChannelFilter</tp:dbus-ref>:</dt> - <dd><pre> -{ '...Channel.ChannelType': '...Channel.Type.StreamedMedia' , - '...Channel.TargetHandleType': Contact, -}</pre></dd> - - <dt>To advertise support for audio calls, also include the following - filter:</dt> - <dd><pre> -{ '...Channel.ChannelType': '...Channel.Type.StreamedMedia' , - '...Channel.TargetHandleType': Contact, - '...Channel.Type.StreamedMedia.InitialAudio': True, -}</pre></dd> - - <dt>To advertise support for video calls, also include the following - filter:</dt> - <dd><pre> -{ '...Channel.ChannelType': '...Channel.Type.StreamedMedia' , - '...Channel.TargetHandleType': Contact, - '...Channel.Type.StreamedMedia.InitialVideo': True, -}</pre></dd> - - <dt>If you use telepathy-farsight, and have H.264 support, you probably - want these <tp:dbus-ref - namespace="org.freedesktop.Telepathy.Client.Handler">Capabilities</tp:dbus-ref>:</dt> - <dd><pre> -[ "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/ice-udp", - "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/gtalk-p2p", - "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/h264", -]</pre></dd> - </dl> - </tp:docstring> - - <tp:flags name="Channel_Media_Capabilities" value-prefix="Channel_Media_Capability" type="u"> - <tp:docstring> - The channel-type-specific capability flags used for - Channel.Type.StreamedMedia in the <tp:dbus-ref - namespace="org.freedesktop.Telepathy">Connection.Interface.Capabilities</tp:dbus-ref> - interface. See the <tp:member-ref>InitialAudio</tp:member-ref> - property for details of the mechanisms that will replace this. - </tp:docstring> - <tp:flag suffix="Audio" value="1"> - <tp:docstring> - The handle is capable of using audio streams within a media channel. - </tp:docstring> - </tp:flag> - <tp:flag suffix="Video" value="2"> - <tp:docstring> - The handle is capable of using video streams within a media channel. - </tp:docstring> - </tp:flag> - <tp:flag suffix="NAT_Traversal_STUN" value="4"> - <tp:docstring> - The handle is capable of performing STUN to traverse NATs. - </tp:docstring> - </tp:flag> - <tp:flag suffix="NAT_Traversal_GTalk_P2P" value="8"> - <tp:docstring> - The handle is capable of establishing Google Talk peer-to-peer - connections (as implemented in libjingle 0.3) to traverse NATs. - </tp:docstring> - </tp:flag> - <tp:flag suffix="NAT_Traversal_ICE_UDP" value="16"> - <tp:docstring> - The handle is capable of establishing ICE UDP peer-to-peer - connections (as defined by the IETF MMUSIC working group) to traverse - NATs. - </tp:docstring> - </tp:flag> - - <tp:flag suffix="Immutable_Streams" value="32"> - <tp:docstring> - Channels whose target handle is this contact will have - <tp:member-ref>ImmutableStreams</tp:member-ref> = <tt>True</tt>. - </tp:docstring> - </tp:flag> - - </tp:flags> - - </interface> -</node> -<!-- vim:set sw=2 sts=2 et ft=xml: --> |