1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-11-22 09:12:19 -05:00
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@761 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2007-04-17 21:07:03 +00:00
parent a25a816bfc
commit 5bff624496

View File

@ -25,6 +25,12 @@
&stpeter; &stpeter;
&seanegan; &seanegan;
&robmcqueen; &robmcqueen;
<revision>
<version>0.9</version>
<date>2007-04-17</date>
<initials>psa</initials>
<remark><p>Specified Jingle conformance, including the preference for lossy transports over reliable transports and the process of sending and receiving audio content over each transport type.</p></remark>
</revision>
<revision> <revision>
<version>0.8</version> <version>0.8</version>
<date>2007-03-23</date> <date>2007-03-23</date>
@ -93,7 +99,7 @@
</revision> </revision>
</header> </header>
<section1 topic='Introduction' anchor='intro'> <section1 topic='Introduction' anchor='intro'>
<p>&xep0166; can be used to initiate and negotiate a wide range of peer-to-peer sessions. One session type of interest is audio chat. This document specifies a format for describing Jingle audio sessions.</p> <p>&xep0166; can be used to initiate and negotiate a wide range of peer-to-peer sessions. One session type of interest is audio chat. This document specifies a format for negotiating Jingle audio sessions over the Realtime Transport Protocol (RTP; see &rfc3550;).</p>
</section1> </section1>
<section1 topic='Requirements' anchor='reqs'> <section1 topic='Requirements' anchor='reqs'>
<p>The Jingle content description format defined herein is designed to meet the following requirements:</p> <p>The Jingle content description format defined herein is designed to meet the following requirements:</p>
@ -103,6 +109,22 @@
<li>Define informational messages related to audio chat (e.g., busy and ringing).</li> <li>Define informational messages related to audio chat (e.g., busy and ringing).</li>
</ol> </ol>
</section1> </section1>
<section1 topic='Jingle Conformance' anchor='conformance'>
<p>In accordance with Section 8 of <cite>XEP-0166</cite>, this document specifies the following information related to the Jingle Audio via RTP application type:</p>
<ol>
<li><p>The content negotiation process is defined in the <link url='#negotiation'>Negotiating a Jingle Audio Session</link> section of this document.</p></li>
<li><p>The semantics of the &DESCRIPTION; element are defined in the <link url='#format'>Content Description Format</link> section of this document.</p></li>
<li><p>A mapping of Jingle semantics to the Session Description Protocol is provided in the <link url='#sdp'>Mapping to Session Description Protocol</link> section of this document.</p></li>
<li><p>A Jingle audio session SHOULD use a lossy transport method such as &xep0177; or the "ice-udp" method specified in &xep0176;, but MAY use a reliable transport such as "ice-tcp".</p></li>
<li>
<p>Content is to be sent and received as follows:</p>
<ul>
<li><p>For lossy transports, outbound audio content shall be encoded into RTP packets and each packet shall be sent individually over the transport. Each inbound packet received over the transport is an RTP packet.</p></li>
<li><p>For reliable transports, outbound audio content shall be encoded into RTP packets and each packet data shall be sent in succession over the transport. Incoming data received over the transport shall be processed as a stream of RTP packets, where each RTP packet boundary marks the location of the next packet.</p></li>
</ul>
</li>
</ol>
</section1>
<section1 topic='Content Description Format' anchor='format'> <section1 topic='Content Description Format' anchor='format'>
<p>A Jingle audio session is described by one or more encodings contained within a wrapper &lt;description/&gt; element. In the language of <cite>RFC 4566</cite> these encodings are payload-types; therefore, each &lt;payload-type/&gt; element specifies an encoding that can be used for the audio stream. In Jingle Audio, these encodings are used in the context of RTP. The most common encodings for the Audio/Video Profile (AVP) of RTP are listed in &rfc3551; (these "static" types are reserved from payload ID 0 through payload ID 95), although other encodings are allowed (these "dynamic" types use payload IDs 96 to 127) in accordance with the dynamic assignment rules described in Section 3 of <cite>RFC 3551</cite>.</p> <p>A Jingle audio session is described by one or more encodings contained within a wrapper &lt;description/&gt; element. In the language of <cite>RFC 4566</cite> these encodings are payload-types; therefore, each &lt;payload-type/&gt; element specifies an encoding that can be used for the audio stream. In Jingle Audio, these encodings are used in the context of RTP. The most common encodings for the Audio/Video Profile (AVP) of RTP are listed in &rfc3551; (these "static" types are reserved from payload ID 0 through payload ID 95), although other encodings are allowed (these "dynamic" types use payload IDs 96 to 127) in accordance with the dynamic assignment rules described in Section 3 of <cite>RFC 3551</cite>.</p>
<p>The allowable attributes are as follows:</p> <p>The allowable attributes are as follows:</p>
@ -184,14 +206,17 @@
<payload-type id='103' name='L16' clockrate='16000' channels='2'/> <payload-type id='103' name='L16' clockrate='16000' channels='2'/>
<payload-type id='98' name='x-ISAC' clockrate='8000'/> <payload-type id='98' name='x-ISAC' clockrate='8000'/>
</description> </description>
<transport xmlns='http://www.xmpp.org/extensions/xep-0176.html#ns'/> <transport xmlns='http://www.xmpp.org/extensions/xep-0176.html#ns-udp'/>
</content> </content>
</jingle> </jingle>
</iq> </iq>
]]></example> ]]></example>
<p>Upon receiving the session-initiate stanza, the receiver determines whether it can provisionally accept the session and proceed with the negotiation. The general Jingle error cases are specified in <cite>XEP-0166</cite>. In addition, the receiver must determine if it supports any of the payload types advertised by the initiator; if it does not, it MUST reject the session by sending a &lt;unsupported-codecs/&gt; error:</p> <p>Upon receiving the session-initiate stanza, the receiver determines whether it can provisionally accept the session and proceed with the negotiation. The general Jingle error cases are specified in <cite>XEP-0166</cite>. In addition, the receiver must determine if it supports any of the payload types advertised by the initiator; if it does not, it MUST reject the session by sending a &lt;unsupported-codecs/&gt; error:</p>
<example caption="Receiver Does Not Support Codecs"><![CDATA[ <example caption="Receiver Does Not Support Codecs"><![CDATA[
<iq type='error' from='juliet@capulet.com/balcony' to='romeo@montague.net/orchard' id='jingleaudio1'> <iq type='error'
from='juliet@capulet.com/balcony'
to='romeo@montague.net/orchard'
id='jingleaudio1'>
<error type='cancel'> <error type='cancel'>
<not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> <not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
<unsupported-codecs xmlns='http://www.xmpp.org/extensions/xep-0167.html#ns-errors'/> <unsupported-codecs xmlns='http://www.xmpp.org/extensions/xep-0167.html#ns-errors'/>
@ -225,7 +250,7 @@
<payload-type id='8' name='PCMA'/> <payload-type id='8' name='PCMA'/>
<payload-type id='13' name='CN'/> <payload-type id='13' name='CN'/>
</description> </description>
<transport xmlns='http://www.xmpp.org/extensions/xep-0176.html#ns'/> <transport xmlns='http://www.xmpp.org/extensions/xep-0176.html#ns-udp'/>
</content> </content>
</jingle> </jingle>
</iq> </iq>
@ -247,7 +272,7 @@
sid='a73sjjvkla37jfea'> sid='a73sjjvkla37jfea'>
<content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'> <content creator='initiator' name='this-is-the-audio-content' profile='RTP/AVP'>
<description xmlns='http://www.xmpp.org/extensions/xep-0167.html#ns'/> <description xmlns='http://www.xmpp.org/extensions/xep-0167.html#ns'/>
<transport xmlns='http://www.xmpp.org/extensions/xep-0176.html#ns'> <transport xmlns='http://www.xmpp.org/extensions/xep-0176.html#ns-udp'>
<candidate component='2' <candidate component='2'
foundation='1' foundation='1'
generation='0' generation='0'
@ -326,7 +351,7 @@ a=fmtp:96 vbr=on;cng=on
</tr> </tr>
<tr> <tr>
<td>&lt;mute/&gt;</td> <td>&lt;mute/&gt;</td>
<td>The principal is temporarily stopping audio input but continues to accept audio output.</td> <td>The principal is temporarily stopping audio output but continues to accept audio input.</td>
</tr> </tr>
<tr> <tr>
<td>&lt;ringing/&gt;</td> <td>&lt;ringing/&gt;</td>
@ -462,6 +487,7 @@ a=fmtp:96 vbr=on;cng=on
<content> <content>
<name>audio-rtp</name> <name>audio-rtp</name>
<desc>Jingle sessions that support audio exchange via the Real-time Transport Protocol</desc> <desc>Jingle sessions that support audio exchange via the Real-time Transport Protocol</desc>
<transport>lossy</transport>
<doc>XEP-0167</doc> <doc>XEP-0167</doc>
</content> </content>
]]></code> ]]></code>
@ -489,8 +515,7 @@ a=fmtp:96 vbr=on;cng=on
<xs:element name='payload-type'> <xs:element name='payload-type'>
<xs:complexType> <xs:complexType>
<xs:sequence minOccurs='0' maxOccurs='unbounded'> <xs:sequence minOccurs='0' maxOccurs='unbounded'> <xs:element ref='parameter'/>
<xs:element ref='parameter'/>
</xs:choice> </xs:choice>
<xs:attribute name='channels' type='xs:byte' use='optional' default='1'/> <xs:attribute name='channels' type='xs:byte' use='optional' default='1'/>
<xs:attribute name='clockrate' type='xs:short' use='optional'/> <xs:attribute name='clockrate' type='xs:short' use='optional'/>