WARNING: This document has been automatically Deferred after 12 months of inactivity in its previous Experimental state. Implementation of the protocol described herein is not recommended for production systems. However, exploratory implementations are encouraged to resume the standards process.

Jingle (XEP-0166) [1] is used to negotiate peer to peer media sessions.
Muji (short for Multiparty Jingle) is a way to coordinate Jingle sessions
between a group of people.
Muji conferences are held in Multi-User Chat (XEP-0045) [2] rooms.

A Muji conference has a number of contents, each of which has unique name,
content type, and an encoding.
Each participant may provide a stream for each content, and communicates
which contents they are willing to provide streams for, along with encoding
information, in their MUC presence.
This serves two purposes. Firstly, so that each participant knows which
contents every other participant provides.
Secondly, so that there is a global payload type (PT) mapping for the
various contents, so that clients only need to encode and payload each
content that they provide once.

Participants are not required to participate all the contents that are
available.
For example, a Muji client might choose to only request audio streams.

Joining a conference is done in two stages. The first step is to
declare that preparations are being done to either join or start a muji
session inside the MUC. This is indicated by the client sending a presence
stanza to the MUC with a preparing element in muji section.

The client MUST then wait until the MUC rebroadcasts its presence message,
after which it MUST wait for all other participants that had a preparing
element in their presence to finish preparation. Afterwards it should finish
its own preparation by updating its presence with the contents it wants to
take part in.

When a client adds a payload ID to a content description, it MUST have the
same codec name and receiving parameters as the corresponding entries in
other participants' payload maps for that content. For instance, if Alice
defines a payload type with ID 98, codec Speex and a a clock rate of 8000
for a content called “voice0”, then Bob must define payload type 98
identically or not at all for that content.

Furthermore, each content description MUST include at least one payload type
that every other participant supports. In other words, the intersection of
payload type mappings in descriptions for a content must not be the empty
set. This avoids clients having to encode the same stream multiple times,
which can be very costly, and also allows sending the encoded data only once
where the transport makes this possible (e.g. IP multicast).

Once a client has constructed content descriptions and advertised them in
its MUC presence, it MUST initiate a Jingle session with every other
participant. The requirement that it is the joining participant that
initiates sessions avoids race conditions.

Jingle sessions are initiated between the MUC JIDs of participants. That is,
the Jingle session-initiate stanza is sent from one MUC JID to another. This
allows participants to easily identify sessions as belonging to a Muji
conference. Content names inside Muji-related Jingle sessions always refer
to the content with the same name inside the Muji conference.

To leave a conference the Muji information MUST first be removed from the
participant's presence; subsequently it SHOULD terminate all Jingle sessions
related to that conference. Updating the presence first reduces the
likelihood of situations where new participants initiate sessions with
participants who are leaving the conference.

When scaling to conferences with a big number of participants
it's no longer viable for all participants to have direct
connections.
On connections where upstream bandwidth is the limiting factor, an RTP
relay which is able to relay the stream to multiple participants on
the behalf of the clients and which forwards the streams of other
participants back to the client can be used.
If the limiting factor is either CPU or downstream bandwidth then a mixer
can be used, which receives the media streams from other participants and
mixes them on behalf of the client, so that the client only has to deal
with receiving and decoding a single stream for each media type. On the
sending side a mixer acts like a relay and relays the clients stream to all
other participants.
Both these services can either be provided by dedicated services or by
other clients.

Appendix C: Legal Notices

Copyright

Permissions

Permission is hereby granted, free of charge, to any person obtaining a copy of this specification (the "Specification"), to make use of the Specification without restriction, including without limitation the rights to implement the Specification in a software program, deploy the Specification in a network service, and copy, modify, merge, publish, translate, distribute, sublicense, or sell copies of the Specification, and to permit persons to whom the Specification is furnished to do so, subject to the condition that the foregoing copyright notice and this permission notice shall be included in all copies or substantial portions of the Specification. Unless separate permission is granted, modified works that are redistributed shall not contain misleading information regarding the authors, title, number, or publisher of the Specification, and shall not claim endorsement of the modified works by the authors, any organization or project to which the authors belong, or the XMPP Standards Foundation.

Disclaimer of Warranty

## NOTE WELL: This Specification is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. ##

Limitation of Liability

In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall the XMPP Standards Foundation or any author of this Specification be liable for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising from, out of, or in connection with the Specification or the implementation, deployment, or other use of the Specification (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if the XMPP Standards Foundation or such author has been advised of the possibility of such damages.

IPR Conformance

This XMPP Extension Protocol has been contributed in full conformance with the XSF's Intellectual Property Rights Policy (a copy of which can be found at <https://xmpp.org/about/xsf/ipr-policy> or obtained by writing to XMPP Standards Foundation, P.O. Box 787, Parker, CO 80134 USA).

Appendix D: Relation to XMPP

The Extensible Messaging and Presence Protocol (XMPP) is defined in the XMPP Core (RFC 6120) and XMPP IM (RFC 6121) specifications contributed by the XMPP Standards Foundation to the Internet Standards Process, which is managed by the Internet Engineering Task Force in accordance with RFC 2026. Any protocol defined in this document has been developed outside the Internet Standards Process and is to be understood as an extension to XMPP rather than as an evolution, development, or modification of XMPP itself.

Appendix E: Discussion Venue

The primary venue for discussion of XMPP Extension Protocols is the <standards@xmpp.org> discussion list.

Appendix F: Requirements Conformance

The following requirements keywords as used in this document are to be interpreted as described in RFC 2119: "MUST", "SHALL", "REQUIRED"; "MUST NOT", "SHALL NOT"; "SHOULD", "RECOMMENDED"; "SHOULD NOT", "NOT RECOMMENDED"; "MAY", "OPTIONAL".