Protocol defined within this document will use tigase:meet:0
namespace.
If an entity supports Tigase Meet, it should advertise that fact by returning a feature of tigase:meet:0
in response to the XEP-0030: Service Discovery information request.
Additionally entity should advertise media types for which it supports group calls (ie. audio, video) as a feature composed of tigase:meet:0:media:
and media name, ie. audio
.
Example 1. Service discovery information request
<iq from='[email protected]/res-1'
id='ku6e51v3'
to='meet.example.com'
type='get'>
<query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
Example 2. Service discovery information response
<iq from='meet.example.com'
id='ku6e51v3'
to='[email protected]/res-1'
type='result'>
<query xmlns='http://jabber.org/protocol/disco#info'>
<feature var='tigase:meet:0'/>
<feature var='tigase:meet:0:media:audio'/>
<feature var='tigase:meet:0:media:video'/>
</query>
</iq>
If MUC room or MIX channel are advertising support for tigase:meet:0
it must act as a video group chat. That means, that room or channel bare JID will be handling/forwarding (accepting and answering) Jingle session requests required to establish a group call.
In this case, client wanting to join the group call, will not create a group call, but will use a room or channel bare JID to initiate a call as specified in Joining the call
If client wants to create an ad-hoc group call, it needs to find a component supporting tigase:meet:0
feature and proceed with Creating a group call, Joining the call and then Inviting participants to the call.
Clients sends <iq/>
stanza of type set
to the bare JID of the video conferencing component with a <create/>
element qualified by the tigase:meet:0
namespace.
<create/>
element must contain one <participant/>
element for each participant which should be invited to the newly crated group call and jid
attribute of the element should contain bare JID of the participant. <create/>
element.
Additionally, <create/>
element should contain <media/>
elements with type
attribute set to the media type name which are allowed in the group call, ie. audio
or video
.
<iq type='set' id='create-1' to='meet.example.com'>
<create xmlns='tigase:meet:0'>
<media type="audio" />
<media type="video" />
<participant>[email protected]</participant>
<participant>[email protected]</participant>
</create>
</iq>
Component will respond with <iq/>
of type result
and <create/>
element qualified by tigase:meet:0
namespace which will contain an id
attribute with which value will be a localpart of the JID of newly created ad-hoc call. Domain of this JID will match domain of the component JID.
<iq type='result' id='create-1' from='meet.example.com'>
<create id='23423' xmlns='tigase:meet:0'/>
</iq>
To allow new user access to the call, meet owner's client sends <iq/>
stanza of type set
to the bare JID of the group call with a <allow/>
element qualified by the tigase:meet:0
namespace.
allow
element must contain one <participant/>
element for each participant which should be added to JIDs allowed to join the group call.
<iq type='set' id='create-1' to='meet.example.com'>
<allow xmlns='tigase:meet:0'>
<participant>[email protected]</participant>
<participant>[email protected]</participant>
</allow>
</iq>
Component will respond with <iq/>
of type result
.
<iq type='result' id='create-1' from='meet.example.com' />
To deny new user access to the call, meet owner's client sends <iq/>
stanza of type set
to the bare JID of the group call with a <deny/>
element qualified by the tigase:meet:0
namespace.
deny
element must contain one <participant/>
element for each participant which should be removed from JIDs allowed to join the group call.
<iq type='set' id='create-1' to='meet.example.com'>
<deny xmlns='tigase:meet:0'>
<participant>[email protected]</participant>
<participant>[email protected]</participant>
</deny>
</iq>
Component will respond with <iq/>
of type result
.
<iq type='result' id='create-1' from='meet.example.com' />
Note: If denied users would be in the call, he will be kicked out.
Client initiates jingle call with the bare JID of the group call as it would during 1-1 Jingle session establishment.
In the response, component will not only establish this session, but will also initiate a Jingle session to the client. Client should accept this incoming session automatically (it will be coming from the same group chat bare JID). This incoming session initiation may be delayed until at least one other participant will join the group call.
Client sends <message/>
to each participant which should join the call. Message must contain <propose/>
element qualified by tigase:meet:0
namespace with id
attribute used for identification of invitation.
<propose/>
element must contain <media/>
elements for each media type supported in the group call.
<message to='[email protected]'>
<propose xmlns='tigase:meet:0' id='a73sjjvkla37jfea' jid='[email protected]'>
<media type="audio"/>
<media type="video"/>
</propose>
</message>
Client will respond with a <message/>
of the same type as invitation with <accept/>
element qualified by tigase:meet:0
namespace and with id
attribute equal id of the invitation.
<message to='[email protected]'>
<accept xmlns='tigase:meet:0' id='a73sjjvkla37jfea' />
</message>
and will begin Jingle session establishment as specified in Joining the call. If session establishment will fail for any reason, client should Notify invitation sender of a failure.
Client will send a <message/>
of the same type as invitation with <failure/>
element qualified by tigase:meet:0
namespace and id
attribute equal id of the invitation.
<message to='[email protected]'>
<failure xmlns='tigase:meet:0' id='a73sjjvkla37jfea' />
</message>
Client will respond with a <message/>
of the same type as invitation with <reject/>
element qualified by tigase:meet:0
namespace and with id
attribute equal id of the invitation.
<message to='[email protected]'>
<reject xmlns='tigase:meet:0' id='a73sjjvkla37jfea' />
</message>
NOTE: Clients should listen for those message-based invitations using carbons as they do for Jingle Message Initiation and act in the same way, so that accepting a call on a single client would silence other clients of the same user.
Meet component will notify joined meet participant about other meet participants joining or leaving video call (starting to publish or stopping to publish).
Meet component will send <iq/>
stanza of type set
to the client with <joined/>
element qualified by tigase:meet:0
namespace. This element should contain one or more <publisher/>
elements describing publishers for each publisher joining the call.
Each publisher
element MUST contain jid
attribute with a bare JID of a participant joining the call. publisher
element MUST contain one or more <stream>
elements with mid
attribute containing mid
of a Jingle content which contains audio/video/data streams sent by participant.
<iq type='set' to='[email protected]'>
<joined xmlns='tigase:meet:0'>
<participant jid='[email protected]'>
<stream mid='0' />
<stream mid='1' />
</participant>
</joined>
</iq>
NOTE: Notifications about participants will not cover participant himself. There will be no notification about participant [email protected]
sent to participant [email protected]
.
Meet component will send <iq/>
stanza of type set
to the client with <left/>
element qualified by tigase:meet:0
namespace. This element should contain one or more <publisher/>
elements describing publishers for each publisher joining the call.
Each publisher
element MUST contain jid
attribute with a bare JID of a participant joining the call. publisher
element MUST contain one or more <stream>
elements with mid
attribute containing mid
of a Jingle content which contains audio/video/data streams sent by participant.
<iq type='set' to='[email protected]'>
<left xmlns='tigase:meet:0'>
<participant jid='[email protected]'>
<stream mid='0' />
<stream mid='1' />
</participant>
</left>
</iq>
NOTE: Notifications about participants will not cover participant himself. There will be no notification about participant [email protected]
sent to participant [email protected]
.
What if we want to invite people from the room/channel to that call? Should we send an invite? or just a message to the room/channel?To invite participants in the call we would send a message to the channel.Should we kick out people, when they are kicked out from the channel/room? or i other cases as well?People should be kicked out of the group call when they leave the channel.- We should consider a feature of manual "destruction" of the ad-hoc group call.
- We should consider to allow inviting or kicking out people from the call.
It would be useful to add "metadata" exchange, so clients would know which A/V stream is sent by which participant (which bare JID).Added with<joined/>
and<left/>
- Verify that usage of
tigase:meet:0:media:audio
is a good idea for versioned features.