Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
This document reports on implementations of the Media Fragments URI 1.0 specification [Media Fragments URI 1.0]. An implementation must be able to parse a media fragment identifier, interpret it according to the processing rules, and visualize the media fragment as recommended by the specification. The main purpose of this document is to show that each feature of the Media Fragments URI 1.0 specification [Media Fragments URI 1.0] has been implemented by demonstrating interoperable implementations of each feature. To evaluate the coverage of an implementation's features, the Media Fragment User Agent Test Cases are used as a point of reference.
This is an Editor's Draft, hence work in progress. Publication as a Editor's Draft does not imply endorsement by the W3C Membership. As this is a draft document, it may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
The work described herein has been produced by the Media Fragments Working Group, which is part of the W3C Video on the Web Activity.
Please send comments about this document to public-media-fragment@w3.org mailing list (public archive).
1 Introduction
2 Media Fragment URI 1.0 Implementations
3 Implementation Test Results
3.1 Implementation Report for Media Fragments Basics
3.2 Implementation Report for Media Fragments Advanced
A References
B Acknowledgements (Non-Normative)
The goal of this report is to verify if the Media Fragments URI 1.0 specification [Media Fragments URI 1.0] is implementable. Consequently, the report does not attempt to test the conformance of the implementations. To evaluate the coverage of an implementation's features, the [Media Fragments User Agent Test Cases] are used as a point of reference.
The test cases are represented in both HTML and RDF (both Turtle and RDF/XML representations). Thus the approved test cases can be accessed by executing the following query:
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix tc: <http://www.w3.org/2006/03/test-description#> select * where { ?tc rdf:type tc:TestCase ; tc:reviewStatus tc:approved . }
The implementations are usually (manually) evaluated using NinSuna's UA Implementation Report Generator, an HTML form for entering the outcome of the test cases for a given implementation. The individual implementation reports are available as HTML and RDF (using the EARL 1.0 Schema specification).
Name | Contact | URI |
---|---|---|
Firefox | Mozilla | http://nightly.mozilla.org/ |
mediafragments.js | Thomas Steiner | https://github.com/tomayac/Media-Fragments-URI |
NinSuna Media Fragments Player | Wim Van Lancker | http://ninsuna.elis.ugent.be/MFPlayer/html5 |
Synote Media Fragment Player | Yunjia Li | http://synote-server.ecs.soton.ac.uk:8000/media-fragment-player |
WebKit | Apple | http://www.webkit.org/ |
Note that there is also a showcase portal at http://mediafragments.org/, aiming to reference all existing implementations or applications using the Media Fragments URI specification.
The combined results of all individual implementation reports are depicted in the tables below. A link is provided for each implementation to their detailed implementation report. Note that we added an additional outcome value to the values defined by EARL 1.0 Schema: notImplemented, which means that a certain test fails because the feature is not implemented.
The results of the implementation tests are splitted over two sections:
TC | Input | Purpose | Firefox | mediafragments.js | NinSuna Media Fragments Player | Synote Media Fragment Player | WebKit |
---|---|---|---|---|---|---|---|
TC0001-UA | t=, | Syntax error, not allowed according to the ABNF. The media fragment is ignored. | passed | passed | passed | passed | passed |
TC0002-UA | t=3,3 | Invalid semantics: start must be smaller than end. The media fragment is ignored. | passed | passed | passed | passed | passed |
TC0003-UA | t=7,3 | Invalid semantics: the requested interval's start is beyond its end. The media fragment is ignored. | passed | passed | passed | passed | passed |
TC0004-UA | t=0,9.97 | The media is requested from 0 to e. | passed | passed | passed | passed | passed |
TC0005-UA | t=3,7 | The media is requested from a to b. | passed | passed | passed | passed | passed |
TC0006-UA | t=3,15 | The media is requested from a to e. | passed | passed | passed | passed | passed |
TC0009-UA | t=15,20 | The request lies beyond the end of the resource. If the UA knows the duration of the resource, it seeks to the end of the media resource. Otherwise, the UA will send an (out-of-range) HTTP request with an 'include-setup' in order to setup its decoding pipeline. | passed | passed | passed | passed | passed |
TC0011-UA | t=3 | Equivalent to #t=a,e. The media is requested from a to e. | passed | passed | passed | passed | passed |
TC0012-UA | t=3, | Invalid syntax, hence the temporal fragment is ignored. | passed | passed | passed | passed | passed |
TC0014-UA | t=15 | The request lies beyond the end of the resource. If the UA knows the duration of the resource, it seeks to the end of the media resource. Otherwise, the UA will send an (out-of-range) HTTP request with an 'include-setup' in order to setup its decoding pipeline. | passed | passed | passed | passed | passed |
TC0015-UA | t=,7 | Equivalent to #t=0,b. The media is requested from 0 to b. | passed | passed | passed | passed | passed |
TC0017-UA | t=,15 | Equivalent to #t=0,e. The media is requested from 0 to e. | passed | passed | passed | passed | passed |
TC0024-UA | t=npt:3,7 | equivalent to #t=3,7 | passed | passed | passed | passed | passed |
TC0027-UA | t=banana | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0028-UA | t=3,banana | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0029-UA | t=banana,7 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0030-UA | t='3' | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0031-UA | t=3-7 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0032-UA | t=3:7 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0033-UA | t=3,7,9 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0034-UA | t%3D3 | UA does not identify this as a media fragment, so it will play the entire media resource. Note: %3D is equivalent to =. | passed | passed | passed | passed | passed |
TC0035-UA | %74=3 | The media is requested from 3 seconds to the end. Note: %74 is equivalent to t. | passed | passed | passed | passed | passed |
TC0036-UA | t=%33 | The media is requested from 3 seconds to the end. Note: %33 is equivalent to 3. | passed | passed | passed | passed | passed |
TC0037-UA | t=3%2C7 | The media is requested from 3 to 7 seconds. Note: %2C is equivalent to ,. | passed | passed | passed | passed | passed |
TC0038-UA | t=%6Ept:3 | The media is requested from 3 seconds to the end. %6E is equivalent to n. | passed | passed | passed | passed | passed |
TC0039-UA | t=npt%3A3 | The media is requested from 3 seconds to the end. Note: %3A is equivalent to :. | passed | passed | passed | passed | passed |
TC0044-UA | t=-1,3 | Invalid syntax: a '-' character is not allowed at this position according to the ABNF. The UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0045-UA | xywh=200,100,200,200 | The full media resource is requested. Subsequently, the media is cropped within the rectangular (200,100,200,200) during playback. | notImplemented | passed | passed | notImplemented | notImplemented |
TC0046-UA | xywh=pixel:200,100,200,200 | The full media resource is requested. Subsequently, the media is cropped within the rectangular (200,100,200,200) during playback. | notImplemented | passed | passed | notImplemented | notImplemented |
TC0047-UA | xywh=percent:0,0,50,50 | The full media resource is requested. Subsequently, the media is cropped within the rectangular (0,0,640,360) during playback, since the video's full resolution is 1280x720px | notImplemented | passed | passed | notImplemented | notImplemented |
TC0048-UA | xywh=200,100,0,0 | Invalid semantics: width and height of cropped region must be larger than 0. The media fragment is ignored and the full media resource is requested. | passed | passed | passed | notImplemented | notImplemented |
TC0049-UA | xywh=-200,100,200,200 | Invalid syntax: the '-' character is not allowed at that position according to the ABNF. Hence, the full media resource is requested. | notImplemented | passed | passed | notImplemented | notImplemented |
TC0050-UA | xywh=percent:0,0,150,50 | Invalid semantics: width and height percentages of a cropped region must be smaller or equal to 100. The media fragment is ignored and the full media resource is requested. | notImplemented | passed | passed | notImplemented | notImplemented |
TC0051-UA | t=3& | After processing name-value pairs, this appears to be equivalent to #t=3. | passed | passed | passed | passed | passed |
TC0052-UA | u=12&t=3 | After processing name-value pairs, this appears to be equivalent to #t=3. | passed | passed | passed | passed | passed |
TC0053-UA | t=foo:7&t=npt:3 | After processing name-value pairs, this appears to be equivalent to #t=3. | passed | passed | passed | passed | passed |
TC0054-UA | &&=&=tom&jerry=&t=3&t=meow:0# | After processing name-value pairs, this appears to be equivalent to #t=3. | passed | passed | passed | passed | passed |
TC0055-UA | t=7&t=3 | When a fragment dimensions occurs multiple times, only the last occurrence of that dimension is interpreted. | passed | passed | passed | passed | passed |
TC0058-UA | T=3,7 | UA does not identify this as a media fragment. The entire media resource is played. | passed | passed | passed | passed | passed |
TC0061-UA | t= | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0062-UA | t=. | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0063-UA | t=.0 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0064-UA | t=0s | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0065-UA | t=,0s | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0066-UA | t=0s,0s | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0067-UA | t=00:00:00s | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0068-UA | t=s | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0069-UA | t=npt: | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0070-UA | t=1e-1 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0071-UA | t=00:00:01.1e-1 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0072-UA | t=3. | Equivalent to #t=a,e. The media is requested from a to e. | passed | passed | passed | passed | passed |
TC0073-UA | t=0:0:0 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0074-UA | t=0:00:60 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0075-UA | t=0:01:60 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0076-UA | t=0:60:00 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0077-UA | t=0:000:000 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0078-UA | t=00:00:03,00:00:07 | The media is requested from a to b. | passed | passed | passed | passed | passed |
TC0079-UA | t=3,00:00:07 | The media is requested from a to b. | passed | passed | passed | passed | passed |
TC0080-UA | t=00:00. | A valid media fragment, starting at 0 seconds. Thus, the UA will play the entire media resource. | passed | passed | passed | passed | passed |
TC0081-UA | t=0:00:00. | A valid media fragment, starting at 0 seconds. Thus, the UA will play the entire media resource. | passed | passed | passed | passed | passed |
TC0082-UA | t=0:00:10e-1 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0083-UA | t=0:00:60.000 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0084-UA | t=0:60:00.000 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0085-UA | t=3,7&t=foo | The media is requested from a to b. | passed | passed | passed | passed | passed |
TC0086-UA | foo&t=3,7 | Rubbish before & is ignored. | passed | passed | passed | passed | passed |
TC0087-UA | t=3,7&foo | Rubbish after & is ignored. | passed | passed | passed | passed | passed |
TC0088-UA | t=3,7&& | Sprinkling & is OK. | passed | passed | passed | passed | passed |
TC0089-UA | &t=3,7 | Sprinkling & is OK. | passed | passed | passed | passed | passed |
TC0090-UA | &&t=3,7 | Sprinkling & is OK. | passed | passed | passed | passed | passed |
TC0091-UA | &t=3,7& | Sprinkling & is OK. | passed | passed | passed | passed | passed |
TC0092-UA | t%3d10 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0093-UA | t=10%26 | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0094-UA | t=3,7, | UA knows that this is an invalid media fragment, so it will play the entire media resource. | passed | passed | passed | passed | passed |
TC0095-UA | xywh=200,100,2000,200 | The full media resource is requested. Subsequently, the media is cropped within the rectangular (200,100,520,200) during playback (since the media's resolution is 1280x720px). | notImplemented | passed | passed | notImplemented | notImplemented |
TC0097-UA | xywh=20,20,5,5 | Spatial fragments cannot be applied to audio resources and are thus ignored by the UA. | passed | passed | passed | notImplemented | notImplemented |
TC0098-UA | xywh=2000,100,200,200 | The full media resource is requested. Since the spatial fragment is outside the source media (its resolution is 1280x720px), it is ignored by the UA. | notImplemented | passed | passed | notImplemented | notImplemented |
TC | Input | Purpose | Firefox | mediafragments.js | NinSuna Media Fragments Player | Synote Media Fragment Player | WebKit |
---|---|---|---|---|---|---|---|
TC0018-UA | t=smpte:0:00:03,0:00:07 | SMPTE time code unit | notImplemented | notImplemented | notImplemented | passed | notImplemented |
TC0019-UA | t=smpte:0:00:03:15.00,0:00:07 | SMPTE time code unit | notImplemented | notImplemented | notImplemented | passed | notImplemented |
TC0020-UA | t=smpte-25:0:00:03,0:00:07 | SMPTE time code unit | notImplemented | notImplemented | notImplemented | passed | notImplemented |
TC0021-UA | t=smpte-25:0:00:03,0:00:07 | A smpte temporal fragment using the wrong frame rate is ignored if the UA is aware of the frame rate. Otherwise, a (non-understandable) Range header is sent. | notImplemented | notImplemented | notImplemented | failed | notImplemented |
TC0022-UA | t=smpte-30:0:00:03,0:00:07 | SMPTE time code unit | notImplemented | notImplemented | notImplemented | passed | notImplemented |
TC0023-UA | t=smpte-30-drop:0:00:03,0:00:07 | SMPTE time code unit | notImplemented | notImplemented | notImplemented | passed | notImplemented |
TC0025-UA | t=clock:2010-10-22T07:33:56Z | Given the creation time of the media resource, find the corresponding temporal fragment | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0026-UA | t=clock:2010-10-22T07:33:56+00:20 | Given the creation time of the media resource, find the corresponding temporal fragment | notImplemented | notImplemented | notImplemented | failed | notImplemented |
TC0056-UA | track=4 | The full media resource is requested, only track 4 will be played. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0057-UA | track=foo | The track 'foo' is a non-existent track, hence the track fragment will be ignored. The entire media resource will be played. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0059-UA | t=smpte:00:00:01&t=npt:3 | When a fragment dimensions occurs multiple times, only the last occurrence of that dimension is interpreted. | notImplemented | notImplemented | notImplemented | passed | passed |
TC0060-UA | track=n%40m3%20%26%3D | The full media resource is requested. Only to track 'n@m3 &=' is played. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0096-UA | track=4&track=5 | The full media resource is requested. Only tracks 4 and 5 are played. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0099-UA | t=smpte-30:0:00:03,0:00:07 | SMPTE encoded media resources having smpte time codes starting at non-zero. The first frame of the media resource is marked with timecode 0:00:02 in smpte-30. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0100-UA | t=smpte-30:0:00:00,0:00:01 | SMPTE encoded media resources having smpte time codes starting at non-zero. The first frame of the media resource is marked with timecode 0:00:02 in smpte-30. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0101-UA | id=Doug | The bytes corresponding to the id fragment are requested. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
TC0102-UA | id=foo | The requested id fragment does not exist within the media resource. | notImplemented | notImplemented | notImplemented | notImplemented | notImplemented |
This document is the work of the W3C Media Fragments Working Group. The editors want to thank all the implementors, not only for the implementation itself but also for taking the time in creating an implementation report.