mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-25 10:42:19 -05:00
0.23
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2112 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
parent
66fd54e33e
commit
e905816570
132
xep-0167.xml
132
xep-0167.xml
@ -10,7 +10,7 @@
|
|||||||
<abstract>This specification defines a Jingle application type for negotiating one or more sessions that use the Real-time Transport Protocol (RTP) to exchange media such as voice or video. The application type includes a straightforward mapping to Session Description Protocol (SDP) for interworking with SIP media endpoints.</abstract>
|
<abstract>This specification defines a Jingle application type for negotiating one or more sessions that use the Real-time Transport Protocol (RTP) to exchange media such as voice or video. The application type includes a straightforward mapping to Session Description Protocol (SDP) for interworking with SIP media endpoints.</abstract>
|
||||||
&LEGALNOTICE;
|
&LEGALNOTICE;
|
||||||
<number>0167</number>
|
<number>0167</number>
|
||||||
<status>Proposed</status>
|
<status>Experimental</status>
|
||||||
<type>Standards Track</type>
|
<type>Standards Track</type>
|
||||||
<sig>Standards</sig>
|
<sig>Standards</sig>
|
||||||
<approver>Council</approver>
|
<approver>Council</approver>
|
||||||
@ -25,6 +25,12 @@
|
|||||||
&stpeter;
|
&stpeter;
|
||||||
&seanegan;
|
&seanegan;
|
||||||
&robmcqueen;
|
&robmcqueen;
|
||||||
|
<revision>
|
||||||
|
<version>0.23</version>
|
||||||
|
<date>2008-07-31</date>
|
||||||
|
<initials>ram/psa</initials>
|
||||||
|
<remark><p>Removed profile attribute; modified secure session establishment to align with SRTP usage.</p></remark>
|
||||||
|
</revision>
|
||||||
<revision>
|
<revision>
|
||||||
<version>0.22</version>
|
<version>0.22</version>
|
||||||
<date>2008-06-09</date>
|
<date>2008-06-09</date>
|
||||||
@ -226,7 +232,6 @@
|
|||||||
]]></example>
|
]]></example>
|
||||||
<p>The &DESCRIPTION; element is intended to be a child of a &CONTENT; element as specified in <cite>XEP-0166</cite>.</p>
|
<p>The &DESCRIPTION; element is intended to be a child of a &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".</p>
|
<p>The &DESCRIPTION; element MUST possess a 'media' attribute that specifies the media type, such as "audio" or "video".</p>
|
||||||
<p>The &DESCRIPTION; element SHOULD possess a 'profile' attribute that specifies the profile of RTP in use as would be encapsulated in SDP (e.g., "RTP/AVP" or "UDP/TLS/RTP/SAVP"). If not included, the default value of "RTP/AVP" MUST be assumed.</p>
|
|
||||||
<p>The encodings SHOULD be provided in order of preference by placing the most-preferred &PAYLOADTYPE; element as the first child of the &DESCRIPTION; element (etc.).</p>
|
<p>The encodings SHOULD be provided in order of preference by placing the most-preferred &PAYLOADTYPE; element as the first child of the &DESCRIPTION; element (etc.).</p>
|
||||||
<p>The allowable attributes of the &PAYLOADTYPE; element are as follows:</p>
|
<p>The allowable attributes of the &PAYLOADTYPE; element are as follows:</p>
|
||||||
<table caption='Payload-Type Attributes'>
|
<table caption='Payload-Type Attributes'>
|
||||||
@ -312,7 +317,7 @@ Initiator Responder
|
|||||||
initiator='romeo@montague.net/orchard'
|
initiator='romeo@montague.net/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
@ -328,7 +333,7 @@ Initiator Responder
|
|||||||
<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>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 error, the responder acknowledges the session initiation request.</p>
|
||||||
<example caption="Responder acknowledges session-initiate"><![CDATA[
|
<example caption="Responder acknowledges session-initiate"><![CDATA[
|
||||||
<iq from='juliet@capulet.com/balcony'
|
<iq from='juliet@capulet.com/balcony'
|
||||||
id='jingle1'
|
id='jingle1'
|
||||||
to='romeo@montague.net/orchard'
|
to='romeo@montague.net/orchard'
|
||||||
type='result'/>
|
type='result'/>
|
||||||
@ -346,7 +351,7 @@ Initiator Responder
|
|||||||
responder='juliet@capulet.com/balcony'
|
responder='juliet@capulet.com/balcony'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
</description>
|
</description>
|
||||||
@ -369,7 +374,7 @@ Initiator Responder
|
|||||||
]]></example>
|
]]></example>
|
||||||
<p>And the initiator acknowledges session acceptance:</p>
|
<p>And the initiator acknowledges session acceptance:</p>
|
||||||
<example caption="Initiator acknowledges session acceptance"><![CDATA[
|
<example caption="Initiator acknowledges session acceptance"><![CDATA[
|
||||||
<iq from='romeo@montague.net/orchard'
|
<iq from='romeo@montague.net/orchard'
|
||||||
id='accept1'
|
id='accept1'
|
||||||
to='juliet@capulet.com/balcony'
|
to='juliet@capulet.com/balcony'
|
||||||
type='result'/>
|
type='result'/>
|
||||||
@ -388,7 +393,7 @@ Initiator Responder
|
|||||||
<code><![CDATA[
|
<code><![CDATA[
|
||||||
m=<media> <port> <transport> <fmt list>
|
m=<media> <port> <transport> <fmt list>
|
||||||
]]></code>
|
]]></code>
|
||||||
<p>In the context of Jingle audio sessions, the <media> is "audio" or "video" or some other media type, the <port> is the preferred port for such communications (which may be determined dynamically), the <transport> is whatever profile is negotiated via the 'profile' attribute of the &CONTENT; element in the Jingle negotiation (e.g., "RTP/AVP"), and the <fmt list> is the payload-type ID.</p>
|
<p>In the context of Jingle audio sessions, the <media> is "audio" or "video" or some other media type, the <port> is the preferred port for such communications (which may be determined dynamically), and the <fmt list> is the payload-type ID.</p>
|
||||||
<p>For example, consider the following static payload-type:</p>
|
<p>For example, consider the following static payload-type:</p>
|
||||||
<example caption="Jingle format for static payload-type"><![CDATA[
|
<example caption="Jingle format for static payload-type"><![CDATA[
|
||||||
<payload-type id="13" name="CN"/>
|
<payload-type id="13" name="CN"/>
|
||||||
@ -440,6 +445,32 @@ delivery-method=inline; configuration=somebase16string;
|
|||||||
]]></example>
|
]]></example>
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
|
<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 <crypto/> element qualified by the 'urn:xmpp:tmp:jingle:apps:rtp' namespace.</p>
|
||||||
|
<p>If the initiator wishes to use SRTP, the session-initiate MUST include at least one <crypto/> element and MAY multiple instances of the element. The <crypto/> element MUST be a child of the <description/> element.</p>
|
||||||
|
<p>The XML attributes of the <crypto/> 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>
|
||||||
|
<li>session-params -- this maps to the SDP "session-params" parameter and has the same semantics (i.e., it provides transport-specific parameters for SRTP negotiation).</li>
|
||||||
|
<li>tag -- this maps to the SDP "tag" parameter and has the same semantics (i.e., it is a decimal number used as an identifier for a particular crypto element).</li>
|
||||||
|
</ul>
|
||||||
|
<p>An example follows.</p>
|
||||||
|
<example caption="The crypto element"><![CDATA[
|
||||||
|
<crypto
|
||||||
|
crypto-suite='AES_CM_128_HMAC_SHA1_80'
|
||||||
|
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|220|1:32'
|
||||||
|
session-params='KDR=1;UNENCRYPTED_SRTCP'
|
||||||
|
tag='1'/>
|
||||||
|
]]></example>
|
||||||
|
<p>The mapping to SDP is as follows.</p>
|
||||||
|
<example caption="SDP mapping of the crypto element"><![CDATA[
|
||||||
|
a=crypto:1 AES_CM_128_HMAC_SHA1_80
|
||||||
|
inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32
|
||||||
|
]]></example>
|
||||||
|
<p>When the responder receives a session-initiate action containing one or more instances of the <crypto/> element, it MUST either accept one of the <crypto/> elements or reject the offer by sending a session-terminate action with a reason of <invalid-crypto/>.</p>
|
||||||
|
</section1>
|
||||||
|
|
||||||
<section1 topic='Informational Messages' anchor='info'>
|
<section1 topic='Informational Messages' anchor='info'>
|
||||||
<section2 topic='Format' anchor='info-format'>
|
<section2 topic='Format' anchor='info-format'>
|
||||||
<p>Informational messages may be sent by either party within the context of Jingle to communicate the status of a Jingle RTP session, device, or principal. The informational message MUST be an IQ-set containing a &JINGLE; element of type "session-info", where the informational message is a payload element qualified by the 'urn:xmpp:tmp:jingle:apps:rtp:info' namespace; the following payload elements are defined: <note>A <trying/> element (equivalent to the SIP 100 Trying response code) is not necessary, since each session-level action is acknowledged via XMPP IQ semantics.</note></p>
|
<p>Informational messages may be sent by either party within the context of Jingle to communicate the status of a Jingle RTP session, device, or principal. The informational message MUST be an IQ-set containing a &JINGLE; element of type "session-info", where the informational message is a payload element qualified by the 'urn:xmpp:tmp:jingle:apps:rtp:info' namespace; the following payload elements are defined: <note>A <trying/> element (equivalent to the SIP 100 Trying response code) is not necessary, since each session-level action is acknowledged via XMPP IQ semantics.</note></p>
|
||||||
@ -583,7 +614,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
@ -630,7 +661,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<reason>
|
<reason>
|
||||||
<condition><busy/></condition>
|
<busy/>
|
||||||
<text>No time to chat right now!</text>
|
<text>No time to chat right now!</text>
|
||||||
</reason>
|
</reason>
|
||||||
</jingle>
|
</jingle>
|
||||||
@ -644,7 +675,7 @@ Romeo Juliet
|
|||||||
type='result'/>
|
type='result'/>
|
||||||
]]></example>
|
]]></example>
|
||||||
</section2>
|
</section2>
|
||||||
<section2 topic='Jingle Audio via RTP/AVP, Negotiated with ICE-UDP' anchor='scenarios-voicechat'>
|
<section2 topic='Jingle Audio via RTP, Negotiated with ICE-UDP' anchor='scenarios-voicechat'>
|
||||||
<p>In this scenario, Romeo initiates a voice chat with Juliet using a transport method of ICE-UDP. The parties also exchange informational messages.</p>
|
<p>In this scenario, Romeo initiates a voice chat with Juliet using a transport method of ICE-UDP. The parties also exchange informational messages.</p>
|
||||||
<p>The session flow is as follows:</p>
|
<p>The session flow is as follows:</p>
|
||||||
<code><![CDATA[
|
<code><![CDATA[
|
||||||
@ -662,7 +693,7 @@ Romeo Juliet
|
|||||||
| (with acks) |
|
| (with acks) |
|
||||||
|<--------------------------->|
|
|<--------------------------->|
|
||||||
| STUN connectivity checks |
|
| STUN connectivity checks |
|
||||||
|<--------------------------->|
|
|<===========================>|
|
||||||
| session-accept |
|
| session-accept |
|
||||||
|<----------------------------|
|
|<----------------------------|
|
||||||
| ack |
|
| ack |
|
||||||
@ -686,7 +717,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
@ -735,7 +766,7 @@ Romeo Juliet
|
|||||||
responder='juliet@capulet.lit/balcony'
|
responder='juliet@capulet.lit/balcony'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
</description>
|
</description>
|
||||||
@ -780,7 +811,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<reason>
|
<reason>
|
||||||
<condition><no-error/></condition>
|
<no-error/>
|
||||||
<text>Sorry, gotta go!</text>
|
<text>Sorry, gotta go!</text>
|
||||||
</reason>
|
</reason>
|
||||||
</jingle>
|
</jingle>
|
||||||
@ -794,7 +825,7 @@ Romeo Juliet
|
|||||||
type='result'/>
|
type='result'/>
|
||||||
]]></example>
|
]]></example>
|
||||||
</section2>
|
</section2>
|
||||||
<section2 topic='Jingle Audio and Video via RTP/AVP, Negotiated with ICE-UDP' anchor='scenarios-audiovideo'>
|
<section2 topic='Jingle Audio and Video via RTP, Negotiated with ICE-UDP' anchor='scenarios-audiovideo'>
|
||||||
<p>In this scenario, Romeo initiates a combined audio and video chat with Juliet using a transport method of ICE-UDP. Juliet at first refuses the video portion, then later offers to add video, which Romeo accepts. The parties also exchange various informational messages</p>
|
<p>In this scenario, Romeo initiates a combined audio and video chat with Juliet using a transport method of ICE-UDP. Juliet at first refuses the video portion, then later offers to add video, which Romeo accepts. The parties also exchange various informational messages</p>
|
||||||
<p>The session flow is as follows:</p>
|
<p>The session flow is as follows:</p>
|
||||||
<code><![CDATA[
|
<code><![CDATA[
|
||||||
@ -816,7 +847,7 @@ Romeo Juliet
|
|||||||
| (with acks) |
|
| (with acks) |
|
||||||
|<--------------------------->|
|
|<--------------------------->|
|
||||||
| STUN connectivity checks |
|
| STUN connectivity checks |
|
||||||
|<--------------------------->|
|
|<===========================>|
|
||||||
| session-accept |
|
| session-accept |
|
||||||
|<----------------------------|
|
|<----------------------------|
|
||||||
| ack |
|
| ack |
|
||||||
@ -858,7 +889,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
@ -868,7 +899,7 @@ Romeo Juliet
|
|||||||
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
|
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
|
||||||
</content>
|
</content>
|
||||||
<content creator='initiator' name='webcam'>
|
<content creator='initiator' name='webcam'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video'>
|
||||||
<payload-type id='98' name='theora' clockrate='90000' height='720' width='1280'>
|
<payload-type id='98' name='theora' clockrate='90000' height='720' width='1280'>
|
||||||
<parameter name='delivery-method' value='inline'/>
|
<parameter name='delivery-method' value='inline'/>
|
||||||
<parameter name='configuration' value='somebase16string'/>
|
<parameter name='configuration' value='somebase16string'/>
|
||||||
@ -941,7 +972,7 @@ Romeo Juliet
|
|||||||
responder='juliet@capulet.lit/balcony'
|
responder='juliet@capulet.lit/balcony'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
</description>
|
</description>
|
||||||
@ -1026,7 +1057,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='responder' name='webcam'>
|
<content creator='responder' name='webcam'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video'>
|
||||||
<payload-type id='98' name='theora' height='720' width='1280'>
|
<payload-type id='98' name='theora' height='720' width='1280'>
|
||||||
<parameter name='delivery-method' value='inline'/>
|
<parameter name='delivery-method' value='inline'/>
|
||||||
<parameter name='configuration' value='somebase16string'/>
|
<parameter name='configuration' value='somebase16string'/>
|
||||||
@ -1057,7 +1088,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='responder' name='webcam'>
|
<content creator='responder' name='webcam'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video' profile='RTP/AVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video'>
|
||||||
<payload-type id='98' name='theora' height='720' width='1280'>
|
<payload-type id='98' name='theora' height='720' width='1280'>
|
||||||
<parameter name='delivery-method' value='inline'/>
|
<parameter name='delivery-method' value='inline'/>
|
||||||
<parameter name='configuration' value='somebase16string'/>
|
<parameter name='configuration' value='somebase16string'/>
|
||||||
@ -1090,7 +1121,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<reason>
|
<reason>
|
||||||
<condition><busy/></condition>
|
<busy/>
|
||||||
<text>I'm outta here!</text>
|
<text>I'm outta here!</text>
|
||||||
</reason>
|
</reason>
|
||||||
</jingle>
|
</jingle>
|
||||||
@ -1103,8 +1134,8 @@ Romeo Juliet
|
|||||||
type='result'/>
|
type='result'/>
|
||||||
]]></example>
|
]]></example>
|
||||||
</section2>
|
</section2>
|
||||||
<section2 topic='Secure Jingle Audio via UDP/TLS/RTP/SAVP, Negotiated with ICE-UDP' anchor='scenarios-secure'>
|
<section2 topic='Jingle Audio via SRTP, Negotiated with ICE-UDP' anchor='scenarios-srtp'>
|
||||||
<p>In this scenario, Romeo initiates a voice chat with Juliet using a secure transport as specified in &sdpdtls; (via a profile of "UDP/TLS/RTP/SAVP").</p>
|
<p>In this scenario, Romeo initiates a secure voice chat with Juliet using a transport method of ICE-UDP. The parties also exchange informational messages.</p>
|
||||||
<p>The session flow is as follows:</p>
|
<p>The session flow is as follows:</p>
|
||||||
<code><![CDATA[
|
<code><![CDATA[
|
||||||
Romeo Juliet
|
Romeo Juliet
|
||||||
@ -1121,7 +1152,7 @@ Romeo Juliet
|
|||||||
| (with acks) |
|
| (with acks) |
|
||||||
|<--------------------------->|
|
|<--------------------------->|
|
||||||
| STUN connectivity checks |
|
| STUN connectivity checks |
|
||||||
|<--------------------------->|
|
|<===========================>|
|
||||||
| session-accept |
|
| session-accept |
|
||||||
|<----------------------------|
|
|<----------------------------|
|
||||||
| ack |
|
| ack |
|
||||||
@ -1145,21 +1176,26 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='UDP/TLS/RTP/SAVP'/>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
<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'/>
|
||||||
|
<crypto
|
||||||
|
crypto-suite='AES_CM_128_HMAC_SHA1_80'
|
||||||
|
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|220|1:32'
|
||||||
|
session-params='KDR=1;UNENCRYPTED_SRTCP'
|
||||||
|
tag='1'/>
|
||||||
</description>
|
</description>
|
||||||
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
|
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
|
||||||
</content>
|
</content>
|
||||||
</jingle>
|
</jingle>
|
||||||
</iq>
|
</iq>
|
||||||
]]></example>
|
]]></example>
|
||||||
<example caption="Responder acknowledges session-initiate"><![CDATA[
|
<example caption="Responder sends provisional acceptance"><![CDATA[
|
||||||
<iq from='juliet@capulet.lit/balcony'
|
<iq from='juliet@capulet.lit/balcony'
|
||||||
id='jingle1'
|
id='accept1'
|
||||||
to='romeo@montague.lit/orchard'
|
to='romeo@montague.lit/orchard'
|
||||||
type='result'/>
|
type='result'/>
|
||||||
]]></example>
|
]]></example>
|
||||||
@ -1194,9 +1230,14 @@ Romeo Juliet
|
|||||||
responder='juliet@capulet.lit/balcony'
|
responder='juliet@capulet.lit/balcony'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<content creator='initiator' name='voice'>
|
<content creator='initiator' name='voice'>
|
||||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='UDP/TLS/RTP/SAVP'>
|
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||||
<payload-type id='18' name='G729'/>
|
<payload-type id='18' name='G729'/>
|
||||||
|
<crypto
|
||||||
|
crypto-suite='AES_CM_128_HMAC_SHA1_80'
|
||||||
|
key-params='inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|220|1:32'
|
||||||
|
session-params='KDR=1;UNENCRYPTED_SRTCP'
|
||||||
|
tag='1'/>
|
||||||
</description>
|
</description>
|
||||||
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'>
|
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'>
|
||||||
<candidate component='1'
|
<candidate component='1'
|
||||||
@ -1239,7 +1280,7 @@ Romeo Juliet
|
|||||||
initiator='romeo@montague.lit/orchard'
|
initiator='romeo@montague.lit/orchard'
|
||||||
sid='a73sjjvkla37jfea'>
|
sid='a73sjjvkla37jfea'>
|
||||||
<reason>
|
<reason>
|
||||||
<condition><no-error/></condition>
|
<no-error/>
|
||||||
<text>Sorry, gotta go!</text>
|
<text>Sorry, gotta go!</text>
|
||||||
</reason>
|
</reason>
|
||||||
</jingle>
|
</jingle>
|
||||||
@ -1280,7 +1321,7 @@ Romeo Juliet
|
|||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='Security Considerations' anchor='security'>
|
<section1 topic='Security Considerations' anchor='security'>
|
||||||
<p>In order to secure the data stream, implementations SHOULD use encryption methods appropriate to the transport method and media being exchanged; for example, in the case of UDP, that would include Datagram Transport Layer Security (DTLS) as specified in &rfc4347;. The work-in-progress <cite>draft-fishl-mmusic-sdp-dtls</cite> defines such methods for the Session Description Protocol; the relevant RTP profile (e.g., "UDP/TLS/RTP/SAVP" for transporting the RTP stream over DTLS with UDP) shall be specified as the value of the &CONTENT; element's 'profile' attribute.</p>
|
<p>In order to secure the data stream, implementations SHOULD use encryption methods appropriate to the transport method and media being exchanged. Such encryption methods are out of scope for this specification.</p>
|
||||||
</section1>
|
</section1>
|
||||||
|
|
||||||
<section1 topic='IANA Considerations' anchor='iana'>
|
<section1 topic='IANA Considerations' anchor='iana'>
|
||||||
@ -1345,17 +1386,25 @@ Romeo Juliet
|
|||||||
|
|
||||||
<xs:element name='description'>
|
<xs:element name='description'>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence minOccurs='0' maxOccurs='unbounded'/>
|
<xs:sequence>
|
||||||
<xs:element ref='payload-type'/>
|
<xs:element name='payload-type'
|
||||||
|
type='payloadElementType'
|
||||||
|
minOccurs='0'
|
||||||
|
maxOccurs='unbounded'/>
|
||||||
|
<xs:element name='crypto'
|
||||||
|
type='cryptoElementType'
|
||||||
|
minOccurs='0'
|
||||||
|
maxOccurs='unbounded'/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
<xs:attribute name='profile' use='optional' type='xs:string' default='RTP/AVP'/>
|
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|
||||||
<xs:element name='payload-type'>
|
<xs:complexType name='payloadElementType'>
|
||||||
<xs:complexType>
|
<xs:sequence>
|
||||||
<xs:sequence minOccurs='0' maxOccurs='unbounded'>
|
<xs:element name='parameter'
|
||||||
<xs:element ref='parameter'/>
|
type='parameterElementType'
|
||||||
|
minOccurs='0'
|
||||||
|
maxOccurs='unbounded'/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
<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'/>
|
||||||
@ -1364,10 +1413,8 @@ Romeo Juliet
|
|||||||
<xs:attribute name='name' type='xs:string' use='optional'/>
|
<xs:attribute name='name' type='xs:string' use='optional'/>
|
||||||
<xs:attribute name='ptime' type='xs:short' use='optional'/>
|
<xs:attribute name='ptime' type='xs:short' use='optional'/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<xs:element name='parameter'>
|
<xs:complexType name='parameterElementType'>
|
||||||
<xs:complexType>
|
|
||||||
<xs:simpleContent>
|
<xs:simpleContent>
|
||||||
<xs:extension base='empty'>
|
<xs:extension base='empty'>
|
||||||
<xs:attribute name='name' type='xs:string' use='required'/>
|
<xs:attribute name='name' type='xs:string' use='required'/>
|
||||||
@ -1375,7 +1422,6 @@ Romeo Juliet
|
|||||||
</xs:extension>
|
</xs:extension>
|
||||||
</xs:simpleContent>
|
</xs:simpleContent>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<xs:simpleType name='empty'>
|
<xs:simpleType name='empty'>
|
||||||
<xs:restriction base='xs:string'>
|
<xs:restriction base='xs:string'>
|
||||||
@ -1431,6 +1477,6 @@ Romeo Juliet
|
|||||||
</section2>
|
</section2>
|
||||||
</section1>
|
</section1>
|
||||||
<section1 topic='Acknowledgements' anchor='ack'>
|
<section1 topic='Acknowledgements' anchor='ack'>
|
||||||
<p>Thanks to Milton Chen, Diana Cionoiu, Olivier Crête, Tim Julien, Steffen Larsen, Robert McQueen, Jeff Muller, Mike Ruprecht, and Paul Witty for their feedback.</p>
|
<p>Thanks to Milton Chen, Diana Cionoiu, Olivier Crête, Tim Julien, Steffen Larsen, Jeff Muller, Mike Ruprecht, and Paul Witty for their feedback.</p>
|
||||||
</section1>
|
</section1>
|
||||||
</xep>
|
</xep>
|
||||||
|
Loading…
Reference in New Issue
Block a user