root/standards/draft-pfeiffer-temporal-fragments-current.xml

Revision 1152, 49.0 kB (checked in by silvia, 4 years ago)

The Internet-Draft Editor requires now conformance to RFC 3667,
which I had to include.
Updates to all I-Ds sent to the IETF.

Line 
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE rfc SYSTEM "rfc2629.dtd">
3
4 <?rfc toc="yes"?>
5 <?rfc sortrefs="yes"?>
6
7 <rfc category="info" ipr="full3667" docName="draft-pfeiffer-temporal-fragments-03">
8
9   <front>
10     <title abbrev="Time intervals in URIs">Specifying time intervals in URI queries and fragments of time-based Web resources</title>
11
12     <author initials="S.P." surname="Pfeiffer" fullname="Silvia Pfeiffer">
13         <organization abbrev="CSIRO">Commonwealth Scientific and
14         Industrial Research Organisation CSIRO,
15         Australia</organization>
16         <address>
17            <postal>
18               <street>PO Box 76</street>
19               <city>Epping</city>
20               <region>NSW</region>
21               <code>1710</code>
22               <country>Australia</country>
23            </postal>
24            <phone>+61 2 9372 4180</phone>
25            <email>Silvia.Pfeiffer@csiro.au</email>
26            <uri>http://www.ict.csiro.au/Silvia.Pfeiffer/</uri>
27         </address>
28     </author>
29
30     <author initials="C.D.P." surname="Parker" fullname="Conrad D. Parker">
31         <organization abbrev="CSIRO">Commonwealth Scientific and
32         Industrial Research Organisation CSIRO,
33         Australia</organization>
34         <address>
35            <postal>
36               <street>PO Box 76</street>
37               <city>Epping</city>
38               <region>NSW</region>
39               <code>1710</code>
40               <country>Australia</country>
41            </postal>
42            <phone>+61 2 9372 4222</phone>
43            <email>Conrad.Parker@csiro.au</email>
44            <uri>http://www.ict.csiro.au/Conrad.Parker/</uri>
45         </address>
46     </author>
47
48     <author initials="A.T." surname="Pang" fullname="Andre T. Pang">
49         <organization abbrev="CSIRO">Commonwealth Scientific and
50         Industrial Research Organisation CSIRO,
51         Australia</organization>
52         <address>
53            <postal>
54               <street>PO Box 76</street>
55               <city>Epping</city>
56               <region>NSW</region>
57               <code>1710</code>
58               <country>Australia</country>
59            </postal>
60            <phone>+61 2 9372 4222</phone>
61            <email>Andre.Pang@csiro.au</email>
62            <uri>http://www.ict.csiro.au/</uri>
63         </address>
64     </author>
65
66     <date month="March" year="2005"/>
67
68     <abstract>
69       <t>This document specifies a syntax for addressing time
70       intervals within time-based Web resources through URI
71       queries and fragments. This scheme is particularly used for
72       <xref target="ANX">Annodex</xref> and <xref target="CMML">CMML</xref>
73       Web resources, though it could be picked up
74       by any other time-based Web resource format.
75       Temporal addressing enables, e.g., direct access to a clip inside
76       a video stored on a Web Server, or direct jumps to a
77       specific event within a piece of music. The syntax is not
78       restricted to audio or video Web resources though, but covers all
79       kinds of Web resources that contain time-continuous
80       information.
81       </t>
82
83       <t>When a server (e.g. a Web Server) supports the URI query syntax,
84       it is able to extract the given time
85       subsections from the base resource and serve them as another
86       resource of the same type. Specifying a time point
87       or interval through a URI fragment in contrast does not deliver
88       a subpart of the resource - instead it is up to the
89       user agent and the resource type as to what action is
90       invoked. Examples are a fast forward to a time point, or a zoom
91       into a time interval.
92       </t>
93
94       <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
95       NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
96       "OPTIONAL" in this document are to be interpreted as described
97       in <xref target="KEYWORDS">RFC 2119</xref>.
98       </t>
99
100     </abstract>
101
102   </front>
103  
104   <middle>
105    
106     <!--**************-->
107     <!-- INTRODUCTION -->
108     <!--**************-->
109     <section title="Introduction">
110      
111       <t>Many resources on the World Wide Web represent information
112       that relate to a timeline of events. Time-sampled recordings of
113       sound, temporally interleaved audio-visual streams, or data
114       files containing time series data are examples. This document
115       describes a syntax for addressing temporal offsets and time
116       intervals in such resources. The aim is to make it simple to
117       incorporate infrastructure into the Internet which supports
118       the addressing and retrieval of temporal subparts of time-based
119       Web resources, as well as the automated processing of such
120       subparts for reuse.
121       </t>
122      
123       <t>The temporal URI interval specifications are to be
124       used on resources that represent a specific timeline. An example
125       of such resources are most resources of MIME types "audio/*" and
126       "video/*". Files containing commands for creating time-continuous
127       experiences (such as SMIL files for authoring interactive
128       multimedia, or VRML files for authoring 3D worlds) cannot be
129       addressed in this manner. However, if one particular user
130       interaction (i.e. one experience) is recorded, the recording
131       contains data that relates to a single timeline and can
132       be addressed with the manner described in this specification.
133       </t>
134      
135       <t>The temporal URI queries and fragments specified in this
136       document have been implemented and demonstrated to work with
137       <xref target="ANX">Annodex</xref> and <xref
138       target="CMML">CMML</xref> format Web resources over
139       <xref target="HTTP">HTTP</xref>. A possible implementation
140       over <xref target="RTSP">RTP/RTSP</xref> for Internet
141       streaming is being specified. Usage with other protocols
142       is possible, but has not been explored yet.
143       </t>
144
145     </section>
146
147
148     <!--**************-->
149     <!-- URI formats  -->
150     <!--**************-->
151     <section title="Incorporating temporal addressing into the Generic URI Scheme">
152      
153       <t>The <xref target="URI">Generic URI Scheme</xref> defines two
154       manners in which subparts of Web resources can be addressed:
155       queries and fragments. Queries are given through extending the
156       Web resource's address by a string that is separated through the
157       special character "?".  Fragments are given through extending
158       the Web resource's address by a string that is separated through
159       the special character "#".
160       </t>
161
162       <t><xref target="URI">RFC 3986</xref> specifies that URI queries
163       identify a resource and thus a Web server MUST process the
164       query returning a fully defined resource. There is no
165       generically defined structure to URI queries. However, the
166       format of a CGI query string where name-value pairs are
167       separated by the special character "&" is a commonly used
168       format. The Common Gateway Interface, or CGI, is a
169       convention for external gateway programs to interface with
170       information servers such as HTTP servers (see
171       http://hoohoo.ncsa.uiuc.edu/cgi/). When defining a common manner
172       in which temporal subparts of a Web resource can be addressed,
173       it is important to be compatible with this common CGI format.
174       </t>
175
176       <t><xref target="URI">RFC 3986</xref> also specifies that URI
177       fragments identify a secondary resource by reference to a
178       primary resource and that fragments are interpreted client side,
179       i.e. the Web infrastructure consisting of Web servers and Web
180       proxies will generally ignore the "#" extension of URIs. This
181       basically implies that a fragment provides a particular view on a
182       resource and the view is defined through the type of resource
183       and through the client side application.
184       </t>
185
186       <t>Both, URI query and URI fragment identifiers have
187       traditionally been defined for specific media types or even
188       specific services. This is especially true for URI queries where
189       the query string may consist of name-value pairs that contain
190       the particular fields and field entries of a particular form
191       that resides on a particular server and is processed by a
192       particular server extension. For the temporal addressing that is
193       proposed in this document, it is important that every Web server
194       that interpretes the query parameter reacts uniformly to it. The
195       particular resources which are covered in this manner
196       are the <xref target="ANX">Annodex</xref> and <xref
197       target="CMML">CMML</xref> media types. This scheme can be adopted
198       for other media types, by including it in the media type
199       registration for that format.
200       </t>
201      
202     </section>
203    
204
205     <!--**************-->
206     <!-- Query format -->
207     <!--**************-->
208     <section title="Temporal addressing through URI queries">
209
210       <t>URI query strings are specified after the special character
211       "?".  A temporal query parameter defines one or more intervals
212       of time.  Time is given with respect to specific time schemes.
213       The default time scheme is "npt" (normal play time), in which a
214       time point is specified in seconds through a floating point number
215       with an arbitrary temporal resolution. The available time schemes
216       and their specifications are described further down in this document.
217       </t>
218
219       <t>The BNF for a temporal URI query parameter is:
220       </t>
221
222       <artwork><![CDATA[
223 time-parameter = "t" "=" [ timescheme ":" ] time-intervalspec
224
225 time-intervalspec = time-interval ["," time-intervalspec]
226
227 time-interval = timespec ["/" timespec]
228
229 timescheme     = *( unreserved / pct-encoded / sub-delims /
230                  "/" / "?" / "#" / "[" / "]" / "@" )
231
232 timespec       = *( unreserved / pct-encoded / "?" / "#" /
233                  "[" / "]" / "@" / "!" / "$" / "&" / "'" /
234                  "(" / ")" / "*" / "+" / ";" / "=" )
235       ]]></artwork>
236
237       <t>All time intervals actually specify start and end
238       times.  If no end timespec is given, it defaults to "infinity",
239       which for a file means the end of the file or for a stream the
240       end of the stream. Overlapping time intervals MUST be
241       interpreted by merging the intervals into one.
242       </t>
243
244       <t>It is not valid to give several temporal URI query
245       parameters in one URI query. They all need to be wrapped into a single
246       specification.
247       </t>
248
249       <t>A URI with a query for several intervals may
250       be split by the user agent into several queries for a single
251       interval each and then sent to the server in consecutive
252       requests, which in the case of HTTP/1.1 would e.g. be pipelined.
253       This is of particular interest to user clients that can not
254       handle resources that consist of temporally non-consecutive
255       data, e.g. chained Annodex bitstreams.
256       </t>
257
258       <t>Examples for URIs containing temporal queries are:
259       </t>
260
261       <list style="symbols">
262         <t>http://example.com/video.anx?t=npt:15.2 --- video.anx
263         is transferred from 15.2 seconds into video.anx to the end of
264         the file/stream.
265         </t>
266
267         <t>http://example.com/video.anx?t=15.2/18.7 --- video .anx
268         is transferred from 15.2 seconds into video.anx to 18.7 seconds;
269         the default time scheme "npt" is used.
270         </t>
271
272         <t>http://example.com/video.anx?t=npt:15.2/18.7,23 --- video.anx
273         is transferred from 15.2s to 18.7s and from 23s to the end of
274         the file/stream.
275         </t>
276
277         <t>http://example.com/video.anx?t=npt:15.2/18.7,17.4/30.1 -- video.anx
278         is transferred from 15.2 seconds into video.anx to 30.1 seconds.
279         </t>
280
281         <t>http://example.com/video.anx?t=npt:15.2/18.7&t=23 --- invalid
282         query parameters - MUST create an error message.
283         </t>
284       </list>
285        
286     </section>
287
288
289     <!--*****************-->
290     <!-- Fragment format -->
291     <!--*****************-->
292     <section title="Temporal addressing through URI fragments">
293      
294       <t>URI fragment specifiers are given after the special character
295       crosshatch ("#"). A temporal URI fragment defines a specific
296       temporal view onto a Web resource consisting of one or more
297       intervals of time. Again, time is given with respect to specific
298       time schemes as defined below, "npt" being the default.
299       </t>
300
301       <t>The BNF for a temporal URI fragment identifier is (reusing the
302       time-intervalspec of the URI query section above):
303       </t>
304
305       <artwork><![CDATA[
306 temporal-fragment = time-parameter
307         ]]></artwork>
308      
309       <t>As with temporal URI query parameters, all temporal intervals
310       are specified through start and end times, the default end time
311       being infinity, which may map to the end of a file or
312       stream. Also, several temporal URI fragment identifiers are not
313       allowed.
314       </t>
315
316       <t>What a user agent does with a temporal URI fragment is up to
317       itself. As a result of the request being sent to the server, the
318       user agent receives the complete resource. If the user agent is
319       a Web browser and the resource is a video, the user agent MAY
320       play back only the specified time section(s). If the
321       user agent is a sound editor and the resource a sound file, the
322       user agent MAY select the disjoint time intervals in
323       the sound file as a first step to applying some filter to them.
324       </t>
325
326       <t>Examples for URIs with temporal fragment specifications are:
327       </t>
328
329       <list style="symbols">
330         <t>http://example.com/video.anx#t=npt:15.2 --- specifies a view
331         on the section between 15.2 seconds into video.anx and the
332         end of the file/stream.
333         </t>
334
335         <t>http://example.com/video.anx#t=15.2/18.7 --- specifies a view
336         on the section between 15.2s and 18.7s of video.anx, with a
337         default time scheme of "npt".
338         </t>
339
340         <t>http://example.com/video.anx#t=npt:15.2/18.7,23 --- specifies
341         a view on the section between 15.2s and 18.7s, as well as
342         23s to the end of the file/stream.
343         </t>
344
345         <t>http://example.com/video.anx#t=npt:15.2/18.7,17.4/30.1 -- specifies
346         a view on the section between 15.2s and 30.1s of video.anx.
347         </t>
348
349       </list>
350
351     </section>
352
353    
354     <!--**************-->
355     <!-- Time schemes -->
356     <!--**************-->
357     <section title="Time schemes">
358
359       <t>A time scheme is a short identifier for a type of time
360       specification. The following general time schemes are specified
361       in this document. Further time schemes are expected to emerge
362       and should probably be registered through IANA.
363
364         <list style="symbols">
365           <t>"npt" Normal Play Time; base of seconds as used in the
366           <xref target="RTSP">RTSP standard</xref>
367           </t>
368           <t>"smpte" Society of Motion Picture and Television
369           Engineers time codes as specified in the <xref
370           target="SMPTE">SMPTE time and control code standard</xref>
371           </t>
372           <t>"utc" Universal Time Code giving wall-clock time as
373           specified in the <xref target="ISO8601">ISO 8601
374           standard</xref>.
375           </t>
376         </list>
377       </t>
378
379       <t>Specification as BNF:</t>
380       <artwork><![CDATA[
381 timescheme = npt-timescheme | smpte-timescheme | utc-timescheme | *unreserved
382 timespec   = npt-timespec | smpte-timespec | utc-timespec | *uric
383       ]]></artwork>
384
385       <t>These time schemes are specified as follows:
386           <list style="empty">
387
388           <t>NPT time has a second or subsecond resolution. It is
389           specified as H:M:S.h (npt-hhmmss) or S.h (npt-sec), where
390           H=hours, M=minutes, S=second and h=fractions of a
391           second. Negative values are not allowed.
392           </t>
393
394           <t>Specification as BNF:</t>
395       <artwork><![CDATA[
396 npt-timescheme = "npt"
397 npt-timespec   =  npt-sec | npt-hhmmss
398 npt-sec        =   1*DIGIT [ "." *DIGIT ]
399 npt-hhmmss     =   npt-hh ":" npt-mm ":" npt-ss [ "." *DIGIT ]
400 npt-hh         =   1*DIGIT ; any positive number
401 npt-mm         =   1*2DIGIT ; 0-59
402 npt-ss         =   1*2DIGIT ; 0-59
403         ]]></artwork>
404
405           <t><xref target="SMPTE">SMPTE time codes</xref> are
406           optimized for frame level accuracy.  SMPTE is specified as
407           HH:MM:SS:FF, where HH=hours, MM=minutes, SS=second,
408           FF=frames. The drop-frame algorithms for calculating the
409           exact times can be found in the references SMPTE
410           standard. Negative values are not allowed.
411           </t>
412
413           <t> "smpte-24=" SMPTE time with a 24 fps basis</t>
414           <t> "smpte-24-drop=" SMPTE time with a 24/1.001 fps basis</t>
415           <t> "smpte-25=" SMPTE time with a 25 fps basis</t>
416           <t> "smpte-30=" SMPTE time with a 30 fps basis</t>
417           <t> "smpte-30-drop=" SMPTE time with a 30/1.001 fps basis</t>
418           <t> "smpte-50=" SMPTE time with a 50 fps basis</t>
419           <t> "smpte-60=" SMPTE time with a 60 fps basis</t>
420           <t> "smpte-60-drop=" SMPTE time with a 60/1.001 fps basis</t>
421           <t>Specification as BNF:</t>
422       <artwork><![CDATA[
423 smpte-timescheme = "smpte-24" | "smpte-24-drop" | "smpte-25" |
424                    "smpte-30" | "smpte-30-drop" | "smpte-50" |
425                    "smpte-60" | "smpte-60-drop"
426 smpte-timespec   = smpte-hh ":" smpte-mm ":" smpte-ss [ ":" smpte-ff ]
427 smpte-hh         = 1*2DIGIT
428 smpte-mm         = 1*2DIGIT
429 smpte-ss         = 1*2DIGIT
430 smpte-ff         = 1*2DIGIT
431         ]]></artwork>
432
433           <t>UTC time has a second or subsecond resolution.  It is
434           given as YYYYMMDDTHHmmss.hhZ, where Y=year, M=month, D=day,
435           H=hour, m=minute, s=second, h=subseconds (one-hundredth of a
436           second).
437           </t>
438
439           <t>Specification as BNF:</t>
440       <artwork><![CDATA[
441 utc-timescheme = "clock"
442 utc-timespec   = utc-date "T" utc-hhmmss "Z"
443 utc-date       =   8DIGIT ; < YYYYMMDD >
444 utc-hhmmss     =   6DIGIT [ "." 1*DIGIT ] ; < HHMMSS.fraction >
445         ]]></artwork>
446
447           </list>
448       </t>
449
450       <t>Examples for time-interval URI specifications with different
451       time schemes are:</t>
452       <figure>
453         <artwork><![CDATA[
454 http://example.com/audio.anx?t=smpte-25:10:07:33:06/10:07:55:00
455   (for a temporal interval between 36453.25s - 36475s)
456 http://example.com/audio.anx#t=npt:10:07:33.25
457   (for a temporal interval between 36453.25s and the end of the file/stream)
458 http://example.com/audio.anx?t=clock:20021107T173045.25Z
459   (for Thu Jul 11 05:30:45 UTC 2002 and a quarter seconds)
460           ]]></artwork>
461       </figure>
462
463       <t>The semantic interpretation of time specifications given with
464       any of the schemes depends on the resource. With every resource
465       there are two associated basetimes: a UTC basetime which may
466       e.g. specify the creation time of the resource, and a playback
467       basetime used for display in a user agent while presenting the
468       resource.
469       </t>
470
471       <t>The playback basetime of a resource defaults to 0 seconds unless
472       the resource has a different basetime associated with it. A contrasting
473       example: in professional video production, the first frame of
474       video of a program normally refers to a SMPTE basetime of
475       01:00:00:00, not 00:00:00:00. This practice arose from the
476       requirements of program production and analog videotape
477       recording technology, and it has subsequently become a uniform,
478       almost ironclad practice worldwide. Associating such a practice
479       to a digital video resource requires a way to store that
480       basetime with the resource and interpreting it correctly when
481       addressing via temporal URIs. Annodex provides such a mapping
482       through a field in its headers that stores the playback basetime.
483       CMML has a tag in its stream element for it.
484       </t>
485      
486       <t>Examples: If a resource has an associated basetime of 3600
487       seconds, and the given temporal fragment offset is 4000 sec, only
488       a seek of 400 sec into the resource is required. If the
489       basetime is given as clock time 20001010T142211.23Z and the
490       temporal offset specified is 20001010T145511.23Z, an offset of 33
491       minutes into the resource is requested.
492       </t>
493
494       <t>The UTC basetime of a resource defaults to being
495       non-specified. Associating such a UTC basetime with a resource
496       requires a way to store that basetime with the resource. For
497       example, for a resource that is a file on a server, it may be
498       chosen to be the time of storage of that resource. Annodex
499       also provides a field in its headers to store the UTC basetime,
500       and CMML has a tag for it.
501       </t>
502
503       <t>The semantic interpretation of temporal intervals is as
504       IN and OUT times like the conventions in use for editing
505       media content: [time_from;time_to[ . This means that the interval
506       stops just at the end time. The reasoning is that it just works
507       when concatenating two intervals that follow directly upon each
508       other.
509       </t>
510     </section>
511
512
513     <!--**************************-->
514     <!-- Implementation with HTTP -->
515     <!--**************************-->
516     <section title="Implementation with HTTP">
517
518       <section title="Identifying enabled HTTP servers">
519
520         <t>Time-continuous resources often come with high bandwidth
521         requirements, so a <xref target="HTTP">HTTP</xref> server
522         SHOULD serve out only the queried time interval of a
523         base resource to avoid unnecessary network load.
524         For example, a 1 hour Digital Video (DV format) requires about
525         25 GB (MPEG-2 reduces that to about 3 GB). This also significantly
526         reduces the delay for the user agent for receiving relevant data.
527         </t>
528
529         <t>A user agent that sends a URI that includes a temporal query
530         to a HTTP server expects the server to return just the subparts
531         of the base resource that it is querying for. It expects to be
532         notified by the server if the server cannot resolve the query
533         such that it may take appropriate action.
534         </t>
535
536         <t>The HTTP protocol specifies that a server MUST return
537         a "404 Not Found" error message on URI requests which cannot be
538         resolved. A URI with a query component is a different URI than
539         the same URI without a query component, so if it cannot be
540         resolved, a "404 Not Found" is expected . However, most current
541         implementations of HTTP servers regard the query component as
542         a relative to the same URI without the query component and
543         therefore support a somewhat non-conformant resolution of such a
544         URI request: if they cannot resolve the query component,
545         they will try to resolve the same URI without the query component.
546         This makes it difficult for a user agent to find
547         out whether a temporal query component was actually resolved or not.
548         </t>
549
550         <t>To address this issue, a HTTP server that is capable of resolving
551         temporal URI requests on a specified resource MUST return an additional
552         accept header field that indicates that it can handle the temporal
553         URI addressing and for which time schemes it can handle it. The
554         header field is called "X-Accept-TimeURI" and the value is a list
555         of time schemes, e.g. "X-Accept-TimeURI: npt, smpte-24, smpte-25,
556         smpte-30, smpte-50, smpte-60".
557         This request header is included for all URI requests to resources
558         on which the HTTP server can resolve a temporal URI request. A user
559         agent SHOULD check the "X-Accept-TimeURI" field to decide whether its
560         temporal URI request has been honoured and thus the results can be
561         displayed accurately.
562         </t>
563
564       </section>
565
566       <section title="Caching URIs with temporal queries in HTTP proxy servers">
567
568         <t>Caching <xref target="HTTP">HTTP/1.1</xref> proxy servers
569         allow storage of requested Web resources closer to the requesting
570         user agent and reuse by other close-by user agents, reducing
571         bandwidth usage and access time. The HTTP/1.1 caching mechanisms
572         also works for time-based Web resources. However, complete
573         time-based Web resources, such as Annodex resources, are often
574         memory-intensive. User agents may more frequently request URIs
575         with temporal queries than the full resource. Therefore, a larger
576         impact on bandwidth usage is expected from caching the temporal URI
577         queries as they are independent resources.
578         </t>
579
580         <t>The defined caching mechanism in HTTP/1.1 for subranges of a
581         resource is based on storage of byte subranges. For time-based Web
582         resources for which it is possible to map a temporal URI query to a
583         set of byte subranges on the base resource, URIs with time-queries
584         can also be stored in a proxy's cache. To this end, the HTTP server
585         MUST ensure that the core data that relates to the temporal subpart is
586         bitwise identical to the original data - otherwise a byte range
587         cannot be defined. This is achieved for Annodex subresources by
588         changing only the control section but not the data section on
589         remuxing, as described in <xref target="ANX">the Annodex
590         specifiation</xref>.
591         </t>
592
593         <t>Mapping of temporal URI queries to byte ranges can only happen
594         on the origin server, being the only component that holds the base
595         resource and can thus understand the relationship between time and
596         bytes. The caching mechanism in HTTP/1.1 for byte ranges is based
597         on the user agent requesting a URI with a "Range" request header that
598         specifies the byte ranges. Thus, an additional agent-driven negotiation
599         for delivery of the byte range mapping prior to the "Range" request
600         is introduced to enable support of temporal URI queries.
601         </t>
602
603         <t>A request header of "X-Accept-Range-Redirect" is required to
604         indicate to the server that a mapping of the temporal URI query
605         parameters to a byte range is requested rather than delivery of
606         the query-part of the resource straight away. As this field initiates
607         the server to provide a different response than if this field was not
608         available, the server MUST include into its response a message header of
609         "Vary: X-Accept-Range-Redirect". It MAY also indicate with
610         "Accept-Ranges: bytes" that it is able to accept byte range
611         requests. And it MAY indicate with "X-Accept-TimeURI" that it
612         has processed the temporal URI query request.
613         </t>
614
615         <t>The server will return a list of the byte ranges that the user
616         agent should ask for in another additional response header field:
617         "X-Range-Redirect". It will also need to redirect the user agent
618         to another resource, namely the base resource, which it provides
619         in the "Location" header field. Data that is specific to the URI
620         request with the given time-query MUST then be returned to the user
621         agent in the message body, such as for example an adapted control
622         section of an Annodex file. The response is a "200 OK" as the request
623         was satisfied with this response.
624         </t>
625
626         <t>After this, the user agent has all the information it requires
627         to post another GET request, this time for the base resource only
628         and including a "Range" request header field.
629         </t>
630  
631         <t>In its response, the server includes the requested one or several
632         byte ranges. If several byte ranges are required, the response will
633         be a multipart message as defined in <xref target="HTTP">the HTTP/1.1
634         specification</xref>. The response message headers include the
635         "Accept-Ranges: bytes" header, and the "Vary: Range" header, and
636         provides the byte range(s) in the "Content-Range" header.
637         </t>
638        
639         <t>This is an example HTTP message exchange:
640           <list style="numbers">
641           <t>User Agent HTTP request:
642             <artwork><![CDATA[
643 GET http://example.com/video.anx?t=npt:15.2 HTTP/1.1
644 Accept: application/x-annodex
645 X-Accept-Range-Redirect: bytes
646          ]]></artwork>
647           </t>
648           <t>Server HTTP response:
649             <artwork><![CDATA[
650 HTTP/1.1 200 OK
651 Date: Fri Feb 11 14:47:12 EST 2005
652 Server: Apache/2.0(Unix)
653 Content-Type: application/x-annodex
654 X-Range-Redirect: bytes=777-
655 Vary: X-Accept-Range-Redirect
656 Accept-Ranges: bytes
657 Location: http://example.com/video.anx
658 X-Accept-TimeURI: npt, smpte-25
659
660 Message body: control section of video.anx?t=npt:15.2
661           ]]></artwork>
662           </t>
663           <t>User Agent HTTP request:
664             <artwork><![CDATA[
665 GET http://example.com/video.anx HTTP/1.1
666 Accept: application/x-annodex
667 Range: bytes=777-
668           ]]></artwork>
669           </t>
670           <t>Server HTTP response:
671             <artwork><![CDATA[
672 HTTP/1.1 200 OK
673 Date: Fri Feb 11 14:49:08 EST 2005
674 Server: Apache/2.0(Unix)
675 Content-Type: application/x-annodex
676 Content-Range: bytes 777-
677 Vary: Range
678 Accept-Ranges: bytes
679 X-Accept-TimeURI: npt, smpte-25
680
681 Message body: video.anx from byte position 777 onwards
682           ]]></artwork>
683           </t>
684
685           </list>
686         </t>
687       </section>
688
689       <section title="Overview of added HTTP message headers">
690
691         <section title="X-Accept-Range-Redirect">
692
693           <t>The X-Accept-Range-Redirect request header field prompts
694           the server to reply with a byte range specification that
695           maps the queried time ranges of a URI.
696           </t>
697
698           <artwork><![CDATA[
699 X-Accept-Range-Redirect = "X-Accept-Range-Redirect" ":" "bytes"
700        ]]></artwork>
701
702         </section>
703
704         <section title="X-Range-Redirect">
705
706           <t>The X-Range-Redirect response header field provides
707           a list of byte ranges to which the server redirects
708           a user agent for finding the rest of the data that
709           was requested.
710           </t>
711
712           <artwork><![CDATA[
713 X-Range-Redirect = "X-Range-Redirect" ":" ranges-specifier
714        ]]></artwork>
715
716           <t>An example of this field is:
717           <artwork><![CDATA[
718 X-Range-Redirect: bytes=500-600,1000-
719        ]]></artwork>
720           </t>
721
722         </section>
723
724         <section title="X-Accept-TimeURI">
725
726           <t>The X-Accept-TimeURI response header field returns for
727           a timed URI query what time schemes it can resolve and
728           thus implicitly also whether it has resolved it.
729           </t>
730
731           <artwork><![CDATA[
732 X-Accept-TimeURI = "X-Accept-TimeURI" ":" 1#timescheme
733                    )
734        ]]></artwork>
735
736           <t>An example of this field is:
737           <artwork><![CDATA[
738 X-Accept-TimeURI: npt, smpte-24, smpte-25, smpte-30-drop, smpte-30
739        ]]></artwork>
740           </t>
741
742         </section>
743
744       </section>
745
746     </section>
747
748
749     <!--******************************-->
750     <!-- Implementation with RTP/RTSP -->
751     <!--******************************-->
752     <section title="Implementation with RTP/RTSP">
753
754       <t>Initial discussions within the AV Transport Working Goup
755       have started about how to use temporal URI addressing over
756       RTP/RTSP. It doesn't seem to make sense to distinguish between
757       fragments and queries as in the streaming scenario everything
758       is focused on being performed on the server. Therefore the idea
759       is not to bother with query specifications and only focus on
760       fragment specifications.
761       </t>
762
763       <t>When interpreting temporal fragment offsets in RTP/RTSP,
764       the user agent transforms it into a Range specification in
765       the PLAY request header field. Multiple time ranges are easily
766       queued by several PLAY requests.
767       </t>
768
769       <t>For example, a requested URI of rtsp://foo.bar/nemo#t=npt:10
770       will e.g. result in the following PLAY request:</t>
771       <artwork><![CDATA[
772 PLAY rtsp://foo.bar/nemo RTSP 1.0
773 CSeq: 2
774 Session: 12345678
775 Range: npt=10-
776       ]]></artwork>
777
778       <t>An implementation of this specification has not been
779       put forward yet.
780       </t>
781
782       <t>Also note that RealNetworks is using a different syntax
783       for querying temporal intervals of RealMedia over RTP/RTSP.
784       </t>
785
786
787
788     </section>
789    
790
791     <!--*************************-->
792     <!-- Security considerations -->
793     <!--*************************-->
794     <section title="Security considerations">
795
796       <t>This specification does not create any new security issues
797       beyond the ones already specified for URIs in <xref
798       target="URI">RFC 3986</xref>.
799       </t>
800
801     </section>
802
803     <!--***********-->
804     <!-- Changelog -->
805     <!--***********-->
806     <section title="ChangeLog">
807
808       <t>draft-pfeiffer-temporal-fragments-01:
809         <list style="symbols">
810
811           <t>Extension of the number of available SMPTE
812           time-schemes. Many thanks to Bill Miller and Oliver Morgan
813           of the SMPTE for their input on these changes.
814           </t>
815
816           <t>Deleted "start" and "now" as time specification values.
817           </t>
818
819           <t>Extension of the temporal fragment addressing to also
820           address temporal intervals, not only time points.
821           </t>
822
823           <t>Added section that includes some key points of discussion
824           where the existing URI standard contradicts the use of
825           fragments for time-continuous data.
826           </t>
827
828         </list>
829       </t>
830
831       <t>draft-pfeiffer-temporal-fragments-02:
832         <list style="symbols">
833
834           <t>Full compatibility with existing URI standard
835           specification is achieved by using both, query and
836           fragment specifications for addressing.
837           </t>
838
839           <t>Restriction of specification to http scheme (Web) only,
840           as usage on other protocols (such as rtp/rtsp) still
841           needs to be explored.
842           </t>
843
844           <t>All addressing is interval based because an offset
845           really implies a view onto the document from that point
846           onwards.
847           </t>
848
849