| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|
| 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 |
|
|---|