xeps/xep-0180.xml

239 lines
9.9 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE xep SYSTEM 'xep.dtd' [
<!ENTITY % ents SYSTEM 'xep.ent'>
%ents;
]>
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
<xep>
<header>
<title>Jingle Video Content Description Format</title>
<abstract>This document defines a content description format for Jingle video sessions.</abstract>
&LEGALNOTICE;
<number>0180</number>
<status>Experimental</status>
<type>Standards Track</type>
<jig>Standards JIG</jig>
<approver>Council</approver>
<dependencies>
<spec>XMPP Core</spec>
<spec>XEP-0166</spec>
</dependencies>
<supersedes/>
<supersededby/>
<shortname>jingle-video</shortname>
&stpeter;
<author>
<firstname>Milton</firstname>
<surname>Chen</surname>
<email>Milton.Chen@vseelab.com</email>
</author>
<revision>
<version>0.3</version>
<date>2006-08-23</date>
<initials>psa</initials>
<remark><p>Modified namespace to track XEP-0166.</p></remark>
</revision>
<revision>
<version>0.2</version>
<date>2006-07-12</date>
<initials>psa</initials>
<remark><p>Updated to use content type instead of media type.</p></remark>
</revision>
<revision>
<version>0.1</version>
<date>2006-03-23</date>
<initials>psa/mc</initials>
<remark><p>Initial version.</p></remark>
</revision>
<revision>
<version>0.0.1</version>
<date>2006-03-20</date>
<initials>psa/mc</initials>
<remark><p>First draft.</p></remark>
</revision>
</header>
<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 video exchange. This document specifies a format for describing Jingle video sessions.</p>
</section1>
<section1 topic='Requirements' anchor='reqs'>
<p>The Jingle content description format defined herein is designed to meet the following requirements:</p>
<ol>
<li>Enable negotiation of parameters necessary for video exchange.</li>
<li>Map these parameters to Session Description Protocol (SDP; see &rfc4566;) to enable interoperability.</li>
<li>Define informational messages related to video exchange chat.</li>
</ol>
</section1>
<section1 topic='Content Description Format' anchor='format'>
<p>A Jingle video session is described by one or more encodings contained within a wrapper &DESCRIPTION; element. In the language of <cite>RFC 4566</cite> these encodings are payload-types; therefore, each &lt;payload-type/&gt; child element specifies an encoding that can be used for the video stream. Such encodings are often used in the context of the Real-time Transfer Protocol (RTP; see &rfc3550;) but may be used in other contexts as well. 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 96), although other encodings are allowed (these "dynamic" types use payload IDs 97 to 127) in accordance with the dynamic assignment rules described in Section 3 of <cite>RFC 3551</cite>. The &PAYLOADTYPE; element's 'id' attribute is REQUIRED and its 'name' attribute is RECOMMENDED. The encodings SHOULD be provided in order of preference.</p>
<example caption="Video Description Format"><![CDATA[
<description xmlns='http://jabber.org/protocol/jingle/description/video'>
<payload-type id='18' name='G729'/>
<payload-type id='97' name='IPCMWB'/>
<payload-type id='98' name='L16' transparent='true'/>
<payload-type id='13' name='CN'/>
</description>
]]></example>
<p>The &DESCRIPTION; element is intended to be a child of a &JINGLE; element as specified in <cite>XEP-0166</cite>.</p>
<p>The defined attributes of the &PAYLOADTYPE; element are as follows:</p>
<table caption='Video Description Attributes'>
<tr>
<th>Attribute</th>
<th>Description</th>
<th>Datatype/Units</th>
</tr>
<tr>
<td>channels</td>
<td>The number of channels (e.g., 2 for stereoscopic video)</td>
<td>positiveInteger (defaults to 1)</td>
</tr>
<tr>
<td>height</td>
<td>The vertical extent of the displayed video, in pixels</td>
<td>positiveInteger</td>
</tr>
<tr>
<td>id</td>
<td>A unique identifier for the payload type</td>
<td>positiveInteger</td>
</tr>
<tr>
<td>layer</td>
<td>The relationship of a layer to the "bottom" of the stack, where 0 = bottom (the first layer)</td>
<td>nonNegativeInteger</td>
</tr>
<tr>
<td>name</td>
<td>A name for the payload type</td>
<td>string</td>
</tr>
<tr>
<td>transparent</td>
<td>Whether or not a layer is transparent</td>
<td>boolean</td>
</tr>
<tr>
<td>width</td>
<td>The horizontal extent of the displayed video, in pixels</td>
<td>positiveInteger</td>
</tr>
<tr>
<td>x</td>
<td>The horizontal starting point of a tile, in pixels from the origin point</td>
<td>positiveInteger</td>
</tr>
<tr>
<td>y</td>
<td>The vertical starting point of a tile, in pixels from the origin point</td>
<td>positiveInteger</td>
</tr>
</table>
</section1>
<section1 topic='Mapping to Session Description Protocol' anchor='sdp'>
<p>To follow.</p>
</section1>
<section1 topic='Service Discovery' anchor='disco'>
<p>If an entity supports the Jingle video content description format, it MUST advertise that fact by returning a feature of "http://jabber.org/protocol/jingle/description/video" in response to &xep0030; information requests.</p>
<example caption="Service Discovery Information Request"><![CDATA[
<iq from='romeo@montague.net/orchard'
id='disco1'
to='juliet@capulet.com/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'
id='disco1'
to='romeo@montague.net/orchard'
type='result'>
<query xmlns='http://jabber.org/protocol/disco#info'>
...
<feature var='http://jabber.org/protocol/jingle'/>
<feature var='http://jabber.org/protocol/jingle/description/video'/>
...
</query>
</iq>
]]></example>
</section1>
<section1 topic='Informational Messages' anchor='info'>
<p>Informational messages may be sent by either party within the context of Jingle to communicate the status of a Jingle video session, device, or principal. The informational message MUST be an IQ-set containing a &JINGLE; element of type "content-info", where the informational message is a payload element qualified by the 'http://jabber.org/protocol/jingle/info/video' namespace. No payload elements have yet been defined, but will be specified in a future version of this document.</p>
</section1>
<section1 topic='Implementation Notes' anchor='impl'>
<section2 topic='Codecs' anchor='impl-codecs'>
<p>Support for the Theora codec <note>See &lt;<link url='http://www.theora.org/'>http://www.theora.org/</link>&gt;.</note> is RECOMMENDED.</p>
</section2>
</section1>
<section1 topic='Security Considerations' anchor='security'>
<p>The description of a format for video sessions introduces no known security vulnerabilities.</p>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
<p>This document requires no interaction with &IANA;.</p>
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
<section2 topic='Protocol Namespaces' anchor='registrar-ns'>
<p>The &REGISTRAR; shall include 'http://jabber.org/protocol/jingle/description/video' and 'http://jabber.org/protocol/jingle/info/video' in its registry of protocol namespaces.</p>
</section2>
<section2 topic='Jingle Content Description Formats' anchor='registrar-content'>
<p>The XMPP Registrar shall include the name "video" in its registry of Jingle content description formats. The registration is as follows:</p>
<code><![CDATA[
<content>
<name>video</name>
<desc>Jingle sessions that support video exchanges</desc>
<doc>XEP-xxxx</doc>
</content>
]]></code>
</section2>
</section1>
<section1 topic='XML Schemas' anchor='schema'>
<section2 topic='Content Description Format' anchor='schema-content'>
<code><![CDATA[
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/jingle/description/video'
xmlns='http://jabber.org/protocol/jingle/description/video'
elementFormDefault='qualified'>
<xs:element name='description'>
<xs:complexType>
<xs:sequence>
<xs:element ref='payload-type' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='payload-type'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='channels' type='xs:integer' use='optional' default='1'/>
<xs:attribute name='height' type='xs:nonNegativeInteger' use='optional'/>
<xs:attribute name='id' type='xs:unsignedByte' use='required'/>
<xs:attribute name='layer' type='xs:nonNegativeInteger' use='optional'/>
<xs:attribute name='name' type='xs:string' use='optional'/>
<xs:attribute name='rate' type='xs:short' use='optional'/>
<xs:attribute name='transparent' type='xs:boolean' use='optional'/>
<xs:attribute name='width' type='xs:nonNegativeInteger' use='optional'/>
<xs:attribute name='x' type='xs:integer' use='optional'/>
<xs:attribute name='y' type='xs:integer' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
]]></code>
</section2>
<section2 topic='Informational Messages' anchor='schema-info'>
<p>To follow.</p>
</section2>
</section1>
</xep>