1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-12-21 23:28:51 -05:00

bandwidth, encryption, etc.

git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2580 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2008-12-18 23:00:03 +00:00
parent b815e3d190
commit 2a71e1626e

View File

@ -17,10 +17,12 @@
<dependencies>
<spec>XMPP Core</spec>
<spec>XEP-0166</spec>
<spec>RFC 3550</spec>
</dependencies>
<supersedes/>
<supersededby/>
<shortname>NOT_YET_ASSIGNED</shortname>
<shortname>N/A</shortname>
<discuss>jingle</discuss>
&scottlu;
&stpeter;
&seanegan;
@ -28,11 +30,13 @@
&diana;
<revision>
<version>0.25</version>
<date>2008-12-16</date>
<date>2008-12-18</date>
<initials>psa</initials>
<remark>
<ul>
<li>Added optional bandwidth attribute.</li>
<li>Refactored encryption syntax.</li>
<li>Added optional bandwidth element.</li>
<li>Added example of description-info action for modifying application parameters.</li>
</ul>
</remark>
</revision>
@ -258,7 +262,7 @@
]]></code>
<p>The &DESCRIPTION; element is intended to be a child of a Jingle &CONTENT; element as specified in <cite>XEP-0166</cite>.</p>
<p>The &DESCRIPTION; element MUST possess a 'media' attribute that specifies the media type, such as "audio" or "video", where the media type SHOULD be as registered at &ianamedia;.</p>
<p>The &DESCRIPTION; element MAY possess a 'bandwidth' attribute that specifies the "session bandwidth" as described in Section 6.2 of <cite>RFC 3550</cite>, measured in kilobits per second as described in Section 5.2 of <cite>RFC 4566</cite>.</p>
<p>After inclusion of one or more &PAYLOADTYPE; child elements, the &DESCRIPTION; element MAY also contain a &lt;bandwidth/&gt; element that specifies the allowable or preferred bandwidth for use by this application type. The 'type' attribute of the &lt;bandwidth/&gt; element SHOULD be a value for the SDP "bwtype" parameter as listed in the &ianasdp;. For RTP sessions, often the &lt;bandwidth/&gt; element will specify the "session bandwidth" as described in Section 6.2 of <cite>RFC 3550</cite>, measured in kilobits per second as described in Section 5.2 of <cite>RFC 4566</cite>.</p>
<p>The encodings SHOULD be provided in order of preference by placing the most-preferred payload type as the first &PAYLOADTYPE; child of the &DESCRIPTION; element and the least-preferred payload type as the last child.</p>
<p>The allowable attributes of the &PAYLOADTYPE; element are as follows:</p>
<table caption='Payload-Type Attributes'>
@ -335,20 +339,20 @@ Initiator Responder
]]></code>
<p>When the initiator sends a session-initiate stanza to the responder, the &DESCRIPTION; element includes all of the payload types that the initiator can send and/or receive for Jingle RTP, each one encapsulated in a separate &PAYLOADTYPE; element (the rules specified in &rfc3264; SHOULD be followed regarding inclusion of payload types).</p>
<example caption="Initiation"><![CDATA[
<iq from='romeo@montague.net/orchard'
<iq from='romeo@montague.lit/orchard'
id='jingle1'
to='juliet@capulet.com/balcony'
to='juliet@capulet.lit/balcony'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-initiate'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='voice'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='audio'>
<payload-type id='96' name='speex' clockrate='16000'/>
<payload-type id='97' name='speex' clockrate='8000'/>
<payload-type id='18' name='G729'/>
<payload-type id='0' name='PCMU' />
<payload-type id='0' name='PCMU'/>
<payload-type id='103' name='L16' clockrate='16000' channels='2'/>
<payload-type id='98' name='x-ISAC' clockrate='8000'/>
</description>
@ -358,24 +362,24 @@ Initiator Responder
</iq>
]]></example>
<p>Upon receiving the session-initiate stanza, the responder determines whether it can proceed with the negotiation. The general Jingle error cases are specified in <cite>XEP-0166</cite> and illustrated in the <link url='#scenarios'>Scenarios</link> section of this document.</p>
<p>If there is no error, the responder acknowledges the session initiation request.</p>
<p>If there is no immediate error, the responder acknowledges the session initiation request.</p>
<example caption="Responder acknowledges session-initiate"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='jingle1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='result'/>
]]></example>
<p>After successful transport negotiation (not shown here), the responder accepts the session by sending a session-accept action to the initiator. The session-accept SHOULD include a subset of the payload types sent by the initiator, i.e., a list of the offered payload types that the responder can send and/or receive. The list that the responder sends SHOULD retain the ID numbers specified by the initiator. The order of the &PAYLOADTYPE; elements indicates the responder's preferences, with the most-preferred types first.</p>
<p>In the following example, we imagine that the responder supports Speex at clockrate of 8000 but not 16000, G729, and PCMA but not PMCU. Therefore the responder returns only two payload types (since PMCA was not offered).</p>
<example caption="Responder definitively accepts the session"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='accept1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-accept'
initiator='romeo@montague.net/orchard'
responder='juliet@capulet.com/balcony'
initiator='romeo@montague.lit/orchard'
responder='juliet@capulet.lit/balcony'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='voice'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='audio'>
@ -401,9 +405,9 @@ Initiator Responder
]]></example>
<p>And the initiator acknowledges session acceptance:</p>
<example caption="Initiator acknowledges session acceptance"><![CDATA[
<iq from='romeo@montague.net/orchard'
<iq from='romeo@montague.lit/orchard'
id='accept1'
to='juliet@capulet.com/balcony'
to='juliet@capulet.lit/balcony'
type='result'/>
]]></example>
<p>The initiator and responder would then exchange media using any of the codecs that meet the following criteria:</p>
@ -464,8 +468,8 @@ a=fmtp:96 vbr=on;cng=on
<code><![CDATA[
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='video'>
<payload-type id='98' name='theora' clockrate='90000'>
<parameter name='height' value='720'/>
<parameter name='width' value='1280'/>
<parameter name='height' value='600'/>
<parameter name='width' value='800'/>
<parameter name='delivery-method' value='inline'/>
<parameter name='configuration' value='somebase16string'/>
<parameter name='sampling' value='YCbCr-4:2:2'/>
@ -476,7 +480,7 @@ a=fmtp:96 vbr=on;cng=on
<code><![CDATA[
m=video 49170 RTP/AVP 98
a=rtpmap:98 theora/90000
a=fmtp:98 sampling=YCbCr-4:2:2; width=1280; height=720;
a=fmtp:98 sampling=YCbCr-4:2:2; width=800; height=600;
delivery-method=inline; configuration=somebase16string;
]]></code>
</section1>
@ -498,8 +502,8 @@ delivery-method=inline; configuration=somebase16string;
<section1 topic='Negotiation of SRTP' anchor='srtp'>
<p>&rfc3711; defines the Secure Real-time Transport Protocol, and &rfc4568; defines the SDP "crypto" attribute for signalling and negotiating the use of SRTP in the context of offer-answer protocols such as SIP. To enable the use of SRTP and gatewaying to non-XMPP technologies that make use of the "crypto" SDP attribute, we define a corresponding &lt;crypto/&gt; element qualified by the 'urn:xmpp:jingle:apps:rtp:0' namespace.</p>
<p>If the initiator wishes to use SRTP, the session-initiate MUST include at least one &lt;crypto/&gt; element and MAY include multiple instances of the element. The &lt;crypto/&gt; element MUST be a child of the &lt;description/&gt; element.</p>
<p>The XML attributes of the &lt;crypto/&gt; element are as follows:</p>
<p>If the initiator wishes to use SRTP, the session-initiate stanza MUST include an &lt;encryption/&gt; element, which MUST contain at least one &lt;crypto/&gt; element and MAY include multiple instances of the &lt;crypto/&gt; element. The &lt;encryption/&gt; element MUST be a child of the &lt;description/&gt; element. If the initiator requires the session to be encrypted, the &lt;encryption/&gt; element MUST include a 'required' attribute whose logical value is TRUE and whose lexical value is "true" or "1" &BOOLEANNOTE;, where this attribute defaults to a logical value of FALSE (i.e., a lexical value of "false" or "0").</p>
<p>The &lt;crypto/&gt; element is defined as empty (i.e., not containing any child elements); the XML attributes of the &lt;crypto/&gt; element are as follows:</p>
<ul>
<li>crypto-suite -- this maps to the SDP "crypto-suite" parameter and has the same semantics (i.e., it is an identifier that describes the encryption and authentication algorithms).</li>
<li>key-params -- this maps to the SDP "key-params" parameter and has the same semantics (i.e., it provides one or more sets of keying material for the crypto-suite in question).</li>
@ -508,18 +512,22 @@ delivery-method=inline; configuration=somebase16string;
</ul>
<p>An example follows.</p>
<code><![CDATA[
<crypto
crypto-suite='AES_CM_128_HMAC_SHA1_80'
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32'
session-params='KDR=1;UNENCRYPTED_SRTCP'
tag='1'/>
<encryption required='1'>
<crypto
crypto-suite='AES_CM_128_HMAC_SHA1_80'
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32'
session-params='KDR=1;UNENCRYPTED_SRTCP'
tag='1'/>
</encryption>
]]></code>
<p>The mapping to SDP is as follows.</p>
<p>The mapping of to SDP is as follows.</p>
<code><![CDATA[
a=crypto:1 AES_CM_128_HMAC_SHA1_80
inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32
]]></code>
<p>When the responder receives a session-initiate action containing one or more instances of the &lt;crypto/&gt; element, it MUST either accept one of the &lt;crypto/&gt; elements or reject the offer by sending a session-terminate action with a Jingle reason of &lt;general-error/&gt; and an RTP-specific condition of &lt;invalid-crypto/&gt;; see the <link url='#scenarios'>Scenarios</link> section of this document for examples.</p>
<p>When the responder receives a session-initiate action containing an &lt;encryption/&gt; element, the responder MUST either (1) accept the offer by denoting one of the &lt;crypto/&gt; elements as acceptable (it does this by mirroring that &lt;crypto/&gt; element in its session acceptance) or (2) reject the offer by sending a session-terminate action with a Jingle reason of &lt;security-error/&gt; and an RTP-specific condition of &lt;invalid-crypto/&gt;.</p>
<p>If the responder requires encryption but the initiator did not include an &lt;encryption/&gt; element in its offer, the responder MUST reject the offer by sending a session-terminate action with a Jingle reason of &lt;security-error/&gt; and an RTP-specific condition of &lt;crypto-required/&gt;.</p>
<p>If the initiator requires encryption but the responder does not include an &lt;encryption/&gt; element in its session acceptance, the initiator MUST terminate the session with a Jingle reason of &lt;security-error/&gt; and an RTP-specific condition of &lt;crypto-required/&gt;.</p>
</section1>
<section1 topic='Informational Messages' anchor='info'>
@ -551,13 +559,13 @@ delivery-method=inline; configuration=somebase16string;
</section2>
<section2 topic='Examples' anchor='info-examples'>
<example caption="Responder sends active message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='active1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<active xmlns='urn:xmpp:jingle:apps:rtp:info:0'
name='webcam'/>
@ -565,26 +573,26 @@ delivery-method=inline; configuration=somebase16string;
</iq>
]]></example>
<example caption="Responder sends hold message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='hold1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<hold xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
</iq>
]]></example>
<example caption="Responder sends mute message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='mute1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<mute xmlns='urn:xmpp:jingle:apps:rtp:info:0'
name='voice'/>
@ -592,13 +600,13 @@ delivery-method=inline; configuration=somebase16string;
</iq>
]]></example>
<example caption="Responder sends ringing message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='ringing1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<ringing xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -607,20 +615,45 @@ delivery-method=inline; configuration=somebase16string;
</section2>
</section1>
<section1 topic='Exchanging Application Parameters' anchor='parameters'>
<p>Before or during an RTP session, either party can share suggested application parameters with the other party by sending a Jingle stanza with an action of "description-info". The stanza shall contain only a &DESCRIPTION; element, which specifies suggested parameters for a given application type (e.g., a change to the height and width for display of a video stream). An example follows.</p>
<example caption="Entity sends application parameters"><![CDATA[
<iq from='romeo@montague.lit/orchard'
id='desc1'
to='juliet@capulet.lit/balcony'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='description-info'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='webcam'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='video'>
<payload-type id='98' name='theora' clockrate='90000'>
<parameter name='height' value='768'/>
<parameter name='width' value='1024'/>
</payload-type>
</description>
</content>
</jingle>
</iq>
]]></example>
<p>The description-info stanza SHOULD include only the suggested or modified information, not the complete set of application parameters (if those parameters have not changed). Furthermore, the data provided is purely advisory; the session SHOULD NOT fail if the receving party cannot adjust its parameters accordingly.</p>
</section1>
<section1 topic='Determining Support' anchor='support'>
<p>If an entity supports Jingle RTP session, it MUST advertise that fact by returning a feature of "urn:xmpp:jingle:apps:rtp:0" &VNOTE; in response to &xep0030; information requests.</p>
<example caption="Service discovery information request"><![CDATA[
<iq from='romeo@montague.net/orchard'
<iq from='romeo@montague.lit/orchard'
id='disco1'
to='juliet@capulet.com/balcony'
to='juliet@capulet.lit/balcony'
type='get'>
<query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
]]></example>
<example caption="Service discovery information response"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='disco1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='result'>
<query xmlns='http://jabber.org/protocol/disco#info'>
...
@ -688,13 +721,13 @@ Romeo Juliet
type='result'/>
]]></example>
<example caption="Responder sends ringing message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='ringing1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<ringing xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -792,13 +825,13 @@ Romeo Juliet
type='result'/>
]]></example>
<example caption="Responder sends ringing message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='ringing1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<ringing xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -931,18 +964,20 @@ Romeo Juliet
<payload-type id='18' name='G729'/>
<payload-type id='103' name='L16' clockrate='16000' channels='2'/>
<payload-type id='98' name='x-ISAC' clockrate='8000'/>
<crypto
crypto-suite='AES_CM_128_HMAC_SHA1_80'
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32'
session-params='KDR=1;UNENCRYPTED_SRTCP'
tag='1'/>
<encryption required='1'>
<crypto
crypto-suite='AES_CM_128_HMAC_SHA1_80'
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32'
session-params='KDR=1;UNENCRYPTED_SRTCP'
tag='1'/>
</encryption>
</description>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:0'/>
</content>
</jingle>
</iq>
]]></example>
<p>To signal that the initiator wishes to use SRTP, the initiator's client includes keying material.</p>
<p>To signal that the initiator wishes to use SRTP, the initiator's client includes keying material via the &lt;encryption/&gt; element (with one set of keying material per &lt;crypto/&gt; element). Here the initiator signals that encryption is mandatory via the 'required' attribute.</p>
<p>The responder immediately acknowledges the session initiation request.</p>
<example caption="Responder acknowledges session-initiate"><![CDATA[
<iq from='juliet@capulet.lit/balcony'
@ -958,7 +993,7 @@ Romeo Juliet
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-terminate'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<reason>
<general-error/>
@ -968,13 +1003,13 @@ Romeo Juliet
</iq>
]]></example>
<example caption="Responder sends ringing message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='ringing1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<ringing xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -1001,11 +1036,13 @@ Romeo Juliet
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='audio'>
<payload-type id='97' name='speex' clockrate='8000'/>
<payload-type id='18' name='G729'/>
<crypto
crypto-suite='AES_CM_128_HMAC_SHA1_80'
key-params='inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32'
session-params='KDR=1;UNENCRYPTED_SRTCP'
tag='1'/>
<encryption>
<crypto
crypto-suite='AES_CM_128_HMAC_SHA1_80'
key-params='inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32'
session-params='KDR=1;UNENCRYPTED_SRTCP'
tag='1'/>
</encryption>
</description>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:0'>
<candidate component='1'
@ -1353,8 +1390,8 @@ Romeo Juliet
<content creator='initiator' name='webcam'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='video'>
<payload-type id='98' name='theora' clockrate='90000'>
<parameter name='height' value='720'/>
<parameter name='width' value='1280'/>
<parameter name='height' value='600'/>
<parameter name='width' value='800'/>
<parameter name='delivery-method' value='inline'/>
<parameter name='configuration' value='somebase16string'/>
<parameter name='sampling' value='YCbCr-4:2:2'/>
@ -1362,6 +1399,7 @@ Romeo Juliet
<payload-type id='28' name='nv' clockrate='90000'/>
<payload-type id='25' name='CelB' clockrate='90000'/>
<payload-type id='32' name='MPV' clockrate='90000'/>
<bandwidth type='AS'>768000</bandwidth>
</description>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:0'/>
</content>
@ -1375,13 +1413,13 @@ Romeo Juliet
type='result'/>
]]></example>
<example caption="Responder sends ringing message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='ringing1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<ringing xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -1461,13 +1499,13 @@ Romeo Juliet
<p>The parties now begin to exchange media. In this case they would exchange audio using the Speex codec at a clockrate of 8000 since that is the highest-priority codec for the responder (as determined by the XML order of the &PAYLOADTYPE; children).</p>
<p>The parties chat for a while. Eventually Juliet wants to get her hair in order so she puts Romeo on hold.</p>
<example caption="Responder sends hold message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='hold1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<hold xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -1481,13 +1519,13 @@ Romeo Juliet
]]></example>
<p>Juliet returns so she informs Romeo that she is actively engaged in the call again.</p>
<example caption="Responder sends active message"><![CDATA[
<iq from='juliet@capulet.com/balcony'
<iq from='juliet@capulet.lit/balcony'
id='active1'
to='romeo@montague.net/orchard'
to='romeo@montague.lit/orchard'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='session-info'
initiator='romeo@montague.net/orchard'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<active xmlns='urn:xmpp:jingle:apps:rtp:info:0'/>
</jingle>
@ -1513,14 +1551,15 @@ Romeo Juliet
<content creator='responder' name='webcam'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='video'>
<payload-type id='98' name='theora' clockrate='90000'>
<parameter name='height' value='720'/>
<parameter name='width' value='1280'/>
<parameter name='height' value='600'/>
<parameter name='width' value='800'/>
<parameter name='delivery-method' value='inline'/>
<parameter name='configuration' value='somebase16string'/>
<parameter name='sampling' value='YCbCr-4:2:2'/>
</payload-type>
<payload-type id='32' name='MPV' clockrate='90000'/>
<payload-type id='33' name='MP2T' clockrate='90000'/>
<bandwidth type='AS'>768000</bandwidth>
</description>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:0'/>
</content>
@ -1546,13 +1585,14 @@ Romeo Juliet
<content creator='responder' name='webcam'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='video'>
<payload-type id='98' name='theora' clockrate='90000'>
<parameter name='height' value='720'/>
<parameter name='width' value='1280'/>
<parameter name='height' value='600'/>
<parameter name='width' value='800'/>
<parameter name='delivery-method' value='inline'/>
<parameter name='configuration' value='somebase16string'/>
<parameter name='sampling' value='YCbCr-4:2:2'/>
</payload-type>
<payload-type id='32' name='MPV' clockrate='90000'/>
<bandwidth type='AS'>768000</bandwidth>
</description>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:0'/>
</content>
@ -1566,8 +1606,35 @@ Romeo Juliet
to='romeo@montague.lit/orchard'
type='result'/>
]]></example>
<p>The media session proceeds. Now they would exchange both audio and video, where the audio is exchanged via the Speex codec at a clockrate of 8000 and the video is exchanged using the Theora codec with a height of 720 pixels, a width of 1280 pixels, and so on.</p>
<p>The media session proceeds. Now they would exchange both audio and video, where the audio is exchanged via the Speex codec at a clockrate of 8000 and the video is exchanged using the Theora codec with a height of 600 pixels, a width of 800 pixels, and so on.</p>
<p>The parties can continue the session as long as desired.</p>
<p>Other events might occur throughout the life of the session. For example, one of the parties might want to tweak the video parameters using a description-info action.</p>
<example caption="Initiator sends changes to application parameters"><![CDATA[
<iq from='romeo@montague.lit/orchard'
id='desc1'
to='juliet@capulet.lit/balcony'
type='set'>
<jingle xmlns='urn:xmpp:jingle:0'
action='description-info'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='webcam'>
<description xmlns='urn:xmpp:jingle:apps:rtp:0' media='video'>
<payload-type id='98' name='theora' clockrate='90000'>
<parameter name='height' value='768'/>
<parameter name='width' value='1024'/>
<parameter name='delivery-method' value='inline'/>
<parameter name='configuration' value='somebase16string'/>
<parameter name='sampling' value='YCbCr-4:2:2'/>
</payload-type>
<bandwidth type='AS'>768000</bandwidth>
</description>
</content>
</jingle>
</iq>
]]></example>
<example caption="Responder acknowledges description-info"><![CDATA[
]]></example>
<p>Eventually, one of the parties terminates the session.</p>
<example caption="Initiator sends session-terminate"><![CDATA[
<iq from='romeo@montague.lit/orchard'
@ -1689,14 +1756,28 @@ Romeo Juliet
type='payloadElementType'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element name='crypto'
type='cryptoElementType'
<xs:element name='encryption'
type='encryptionElementType'
minOccurs='0'
maxOccurs='unbounded'/>
maxOccurs='1'/>
<xs:element name='bandwidth'
type='bandwidthElementType'
minOccurs='0'
maxOccurs='1'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name='bandwidthElementType'>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='type'
type='xs:string'
use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name='cryptoElementType'>
<xs:simpleContent>
<xs:extension base='empty'>
@ -1708,6 +1789,15 @@ Romeo Juliet
</xs:simpleContent>
</xs:complexType>
<xs:complexType name='encryptionElementType'>
<xs:sequence>
<xs:element name='crypto'
type='cryptoElementType'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
<xs:complexType name='payloadElementType'>
<xs:sequence>
<xs:element name='parameter'
@ -1807,6 +1897,6 @@ Romeo Juliet
</section2>
</section1>
<section1 topic='Acknowledgements' anchor='ack'>
<p>Thanks to Milton Chen, Olivier Cr&#234;te, Tim Julien, Steffen Larsen, Jeff Muller, Mike Ruprecht, and Paul Witty for their feedback.</p>
<p>Thanks to Milton Chen, Paul Chitescu, Olivier Cr&#234;te, Tim Julien, Steffen Larsen, Jeff Muller, Mike Ruprecht, Justin Uberti, and Paul Witty for their feedback.</p>
</section1>
</xep>