请参阅本文档的勘误表,其中可能包含规范性更正。
另请参阅译文。
版权所有 © 2012 W3C® (MIT, ERCIM, 庆应义塾大学),保留所有权利。适用 W3C 的免责声明、商标和文档使用规则。
本节描述了本文档在发布时的状态。其他文档可能会取代本文档。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 技术报告索引(网址:https://w3org.cn/TR/)中找到。
这是媒体片段 URI 1.0(基础)规范的推荐标准。它由 媒体片段工作组(W3C Web 视频活动的一部分)制作。W3C 发布技术报告作为推荐标准,旨在表明该文档被认为是稳定的,并鼓励开发社区进行实施。
如果您希望对本文档发表评论,请将其发送至 public-media-fragment@w3.org 邮件列表( 公开存档)。
作为“建议推荐标准”阶段的结果,仅进行了编辑性更改(参见 差异对比)。现有实施报告可供参考。
本文件已由 W3C 会员、软件开发人员以及其他 W3C 小组和利害关系方审阅,并由总干事认可为 W3C 推荐标准。这是一个稳定的文档,可以用作参考材料或从另一个文档中引用。W3C 发布推荐标准的角色是引起对规范的关注并促进其广泛部署。这增强了 Web 的功能和互操作性。
本文档由在 2004 年 2 月 5 日版 W3C 专利政策下运作的小组制作。W3C 维护一份与该小组交付成果相关的专利披露公开列表;该页面还包含了披露专利的说明。任何知悉其认为包含必要权利要求的专利的个人,必须按照 W3C 专利政策第 6 节的要求披露该信息。
1 简介
2 标准化问题
2.1 术语
2.2 媒体片段标准化
2.2.1 URI 片段
2.2.2 URI 查询
3 URI 片段与 URI 查询
3.1 何时选择 URI 片段?何时选择 URI 查询?
3.2 在用户代理内解析 URI 片段
3.3 解析 URI 查询
3.4 结合 URI 片段与 URI 查询
4 媒体片段语法
4.1 基本结构
4.2 片段维度
4.2.1 时间维度
4.2.2 空间维度
5 媒体片段处理
5.1 处理媒体片段 URI
5.1.1 处理键值组件
5.1.2 处理键值列表
5.2 HTTP 中 URI 片段与查询的解析协议
6 媒体片段语义
6.1 有效的媒体片段 URI
6.1.1 有效的时间维度
6.1.2 有效的空间维度
6.2 可基于 URI 语法检测的错误
6.2.1 通用 URI 级别的错误
6.2.2 时间维度的错误
6.2.3 空间维度的错误
6.3 可基于源媒体信息检测的错误
6.3.1 通用级别的错误
6.3.2 时间维度的错误
6.3.3 空间维度的错误
7 实施者注意事项(非规范性)
7.1 浏览器渲染媒体片段
7.2 客户端显示媒体片段
7.3 所有媒体片段客户端
7.4 媒体片段服务器
7.5 媒体片段 Web 应用
A 参考文献
B 收集的 URI ABNF 语法(非规范性)
C 致谢(非规范性)
本规范旨在增强 Web 基础设施,以支持对基于时间的 Web 资源的子部分进行寻址和检索,以及为了重用而对这些子部分进行自动化处理。示例用途包括通过电子邮件与朋友共享此类片段 URI、在搜索引擎界面中自动创建此类片段 URI,或使用 RDF 标注媒体片段。此类用例示例以及本规范的其他辅助条件和现有媒体片段寻址方法的综述,均在随本文档附带的《媒体片段用例与要求》文档中提供。
关键词 MUST(必须)、MUST NOT(不得)、SHOULD(应该)和 SHOULD NOT(不应该)按 RFC 2119 中的定义解释。
根据 RFC 3986,“URI”一词不包括相对引用。在本文档中,我们同时考虑 URI 和相对引用。因此,我们使用 RFC 3986(第 4.1 节)中定义的术语“URI 引用”。不过,为了简单起见,本文档仅使用“媒体片段 URI”来代替“媒体片段 URI 引用”。
以下术语在本文档中经常使用,需要明确理解:
媒体片段 URI 标准化的基础是 URI 规范 RFC 3986。在 URI 中提供媒体片段标识信息,在此是指规定 URI 片段或 URI 查询的结构。本文档将解释 URI 片段和 URI 查询如何构建以识别媒体片段。它规范化了 URI 片段和 URI 查询中用于寻址媒体片段的键值参数。这些参数建立在现有的 CGI 参数约定之上。在本节中,我们将探讨标准化媒体片段 URI 结构的影响。
URI 规范 RFC 3986 在第 3.5 节中关于 URI 片段格式的表述如下:
“片段的格式和解析 [...] 取决于潜在检索到的表示形式的媒体类型 [RFC2046]。[...] 片段标识符语义独立于 URI 方案,因此无法由方案规范重新定义。”
这本质上意味着只有媒体类型定义(通过 RFC 4288 中定义的流程注册)才能为该 MIME 类型引入 URI 片段的标准结构。媒体类型注册过程的一部分可以包含有关如何构建与该媒体类型结合使用的 URI 中的片段标识符的信息。
如 RFC 4288 第 4.11 节所述,注册 URI 片段构建规则是一项“应该”(SHOULD)要求。媒体片段工作组无权更新所有目标媒体类型的注册表。对所有媒体类型注册的分析表明,目前只有 audio/*、image/*、video/* 分支中的极少数媒体类型定义了片段或片段语义(例如,参见 SVG 1.1 第 17 章中关于 SVG 的片段定义)。据我们所知,只有极少数媒体类型实际上具有指定的片段格式,即使它并未在媒体类型中注册:这些包括 Ogg、MPEG-4 和 MPEG-21。此外,只有少数软件库实际上支持这些片段格式。对于所有其他格式,片段的语义被认为是未知的。
因此,本文档旨在向 audio/*、image/* 和 video/* 分支中的所有媒体类型所有者提出建议,以实现一种结构化的 URI 片段方法,并规范化通过 URI 片段寻址媒体片段(即媒体资源的子部分)的通用维度。我们建议媒体类型所有者将其现有方案与本文档中提出的方案进行协调,并更新或在其媒体类型注册中添加片段语义规范。
URI 规范 RFC 3986 在第 3.4 节中关于 URI 查询格式的表述如下:
“查询组件 [...] 用于在 URI 的方案和命名权限(如果有)范围内标识资源。[...] 查询组件通常用于以“键=值”对的形式携带识别信息 [...]。”
URI 查询规范与 URI 方案的联系更为紧密,其中一些甚至不使用查询组件。我们主要关注 HTTP RFC 2616 和 RTP/RTSP RFC 2326 协议,这两者都支持查询组件。HTTP 对如何解释 URI 查询只字未提。RTSP 明确表示,此时片段和查询标识符没有明确定义的含义,其解释留给 RTSP 服务器。
URI 规范 RFC 3986 在第 7.3 节中特别指出 HTTP 的一般性描述:
“例如在 HTTP 中,典型的用户代理会将 URI 解析为其五个主要组件,访问权限服务器,并向其发送权限、路径和查询组件中的数据。典型的服务器将获取该信息,将路径解析为段,将查询解析为键/值对,然后调用实现特定的处理程序来响应请求。”
由于查询组件的解释取决于服务器的功能,本文档关于查询组件的意图是建议使用标准的键值对格式,以便通过 URI 查询寻址媒体片段。我们建议服务器和服务器类型软件提供商协调其现有的媒体资源使用方案,以支持本规范中提出的命名法。
要寻址媒体片段,需要找到传达片段信息的方法。本规范建立在 URI 规范 RFC 3986 之上。每个 URI 定义为由以下四个部分组成:
<方案名称> : <层级部分> [ ? <查询> ] [ # <片段> ]
因此,在 URI 中表示媒体片段寻址有两种可能性:URI 查询部分或URI 片段部分。
本规范中有不同类型的媒体片段寻址。正如 《媒体片段用例与要求》文档(“媒体容器/资源的适应性条件”部分)中所述:并非所有容器格式和编解码器都“适合”支持不同类型的片段 URI。“适应性”是指可以从主资源中提取媒体片段,而无需修改语法元素或对比特流进行转码。
因此,符合“适应性”的资源可以用 URI 片段寻址。“条件适应”的资源可以用 URI 片段寻址,但需要额外的检索操作来检索修改后的语法元素,同时保持编解码器数据不变。“不适应”的资源需要转码。此类转码后的媒体片段无法通过 URI 片段寻址,只能通过 URI 查询寻址。
因此,当使用 URI 机制寻址媒体片段时,作者必须知道该媒体片段是否可以在不进行任何转码活动的情况下从(主)资源本身产生,或者它是否需要转码。在后一种情况下,唯一的选择是使用 URI 查询,并使用支持转码和交付(主)派生资源的服务器来满足查询需求。
如果此类用户代理原生支持本文档中指定的媒体片段语法,则认为它符合本规范的片段部分及特定维度要求。
对于原生支持媒体片段语法但必须使用其自身搜索方法的用户代理,补充规范提供了一种优化,可以使字节偏移搜索更有效。它需要一个符合规范的服务器,用户代理将与其遵循单独的 《媒体片段 1.0 URI(高级)》文档中定义的协议,在该协议中,用户代理要求服务器自行执行媒体片段地址的字节范围映射,并回传适当的字节范围。此方法不能通过 URI 完成,必须通过添加协议头来完成。与符合规范的服务器交互并遵循此协议的用户代理将直接接收适当的字节范围,而无需在网络上进行昂贵的搜索。
将媒体片段的 URI 查询与 URI 片段结合使用,可以在新创建的资源之上生成 URI 片段解析。由于具有查询部分的 URI 创建了一个新资源,我们必须在新资源上执行片段偏移。这完全符合 URI 标准 RFC 3986 的规定。
例如,http://www.example.org/video.ogv?t=60,100#t=20 将导致 20 秒的片段偏移量应用于从 60 开始到 100 结束的新资源。因此,对此的回复是一个 40 秒长的资源,其播放将从 20 秒的偏移量开始。
本节描述媒体片段 (MF) 标识符的语法表示及其解释方式。定义媒体片段语法的指导原则如下:
键值对列表编码在 URI 的查询或片段组件中。名称和值组件由等号 (=) 分隔,而多个键值对由与号 (&) 分隔。
名称和值可以是任意 Unicode 字符串,以 UTF-8 编码,并按照 RFC 3986 进行百分号编码。以下是一些在片段组件中带有键值对的 URI 示例,以演示基本结构:
http://www.example.com/example.ogv#t=10,20 http://www.example.com/example.ogv#track=audio&t=10,20 http://www.example.com/example.ogv#id=Cap%C3%ADtulo%202
虽然任意键值对可以以这种方式编码,但本规范定义了一组固定的维度。维度关键字名称编码在名称组件中,而维度特定的语法编码在值组件中。
第 5.1.1 处理键值组件 节更详细地定义了如何处理键值对语法,从而得到键值 Unicode 字符串对列表。4.2 片段维度 中的语法定义适用于这些 Unicode 字符串。
媒体片段还支持沿另外两个维度(在 《媒体片段 1.0 URI(高级)》中定义的版本中)对媒体进行寻址:
此维度表示原始媒体中的一个或多个轨道,例如“英语音轨和视频轨道”;
此维度表示原始媒体中命名的特定时间片段,例如“第 2 章”,可以视为指定时间片段的一种便捷方式。
所有维度在逻辑上是独立的,并且可以组合使用。结果与维度的顺序无关。然而,id 维度是时间维度的快捷方式,组合使用这两个维度时必须按照 6.2.1 通用 URI 级别的错误 节中所述进行处理。track 维度是指一组并行媒体流中的一个(例如“视频的英语音轨”),而不是指源媒体的(可能是自包含的)部分(例如“CD 的音频轨道 2”)。
时间裁剪被指定为正常播放时间 (npt) RFC 2326。在 《媒体片段 1.0 URI(高级)》文档中描述的高级版本中,它也可以指定为 SMPTE 时间码 SMPTE 或现实世界时钟时间 (clock) RFC 2326。开始和结束时间始终以相同的格式指定。该格式由名称指定,后跟冒号 (:),npt: 为默认值。在本版本的媒体片段规范中,没有添加时间格式说明符的可扩展机制。
正常播放时间可以指定为秒(带有可选的小数部分以表示毫秒),或以冒号分隔的时、分、秒(同样带有可选的小数部分)。分和秒必须指定为正好两位数字,小时和分数秒可以是任意位数的数字。NPT 的时、分、秒规范仅为方便起见,它并不代表帧精度。“npt:”标识符的指定是可选的,因为 NPT 是默认的时间方案。本规范建立在 RTSP 的 NPT 规范 RFC 2326 之上。
npt-sec = 1*DIGIT [ "." *DIGIT ] ; definitions taken npt-hhmmss = npt-hh ":" npt-mm ":" npt-ss [ "." *DIGIT] ; from RFC 2326, npt-mmss = npt-mm ":" npt-ss [ "." *DIGIT] npt-hh = 1*DIGIT ; any positive number npt-mm = 2DIGIT ; 0-59 npt-ss = 2DIGIT ; 0-59 npttimedef = [ deftimeformat ":"] ( npttime [ "," npttime ] ) / ( "," npttime ) deftimeformat = %x6E.70.74 ; "npt" npttime = npt-sec / npt-mmss / npt-hhmmss
示例
t=npt:10,20 # => results in the time interval [10,20) t=npt:,121.5 # => results in the time interval [0,121.5) t=0:02:00,121.5 # => results in the time interval [120,121.5) t=npt:120,0:02:01.5 # => also results in the time interval [120,121.5)
本节通过 3 URI 片段与 URI 查询 节中解释的情况,定义了 HTTP 协议上的不同交换场景。
4 媒体片段语法 节中定义的正式文法描述了媒体片段生产者应该输出的内容。它没有考虑根据 RFC 3986 有效的可能的百分号编码,且该文法并不是媒体片段应该如何解析的规范。因此,5.1 处理媒体片段 URI 节定义了如何解析媒体片段 URI。
本节定义了如何解析 4 媒体片段语法 节中定义的媒体片段 URI,并附带了一些需要注意的注意事项。实施者可以自由使用任何等效技术。
本节定义了如何将八位字节字符串(来自 URI 的查询或片段组件)转换为键值 Unicode 字符串对列表。
根据 namevalues 语法解析八位字节字符串,产生一个键值对列表,其中名称和值都是八位字节字符串。根据 RFC 3986,在解码百分号编码的八位字节之前,必须解析并分离名称和值组件。
对于每个键值对:
请注意,对于任何输入,输出都是明确定义的。
示例
| 输入: | 输出: | 注 |
|---|---|---|
| "t=1" | [("t", "1")] | 简单情况 |
| "t=1&t=2" | [("t", "1"), ("t", "2")] | 重复名称 |
| "a=b=c" | [("a", "b=c")] | 值中的 "=" |
| "a&b=c" | [("a", ""), ("b", "c")] | 缺失值 |
| "%74=%6ept%3A%310" | [("t", "npt:10")] | 不必要的百分号编码 |
| "id=%xy&t=1" | [("t", "1")] | 无效的百分号编码 |
| "id=%E4r&t=1" | [("t", "1")] | 无效的 UTF-8 |
虽然本节定义的处理过程被设计为与许多 HTTP 服务器环境中的 URI 查询组件解析基本兼容,但实施者应注意以下不兼容的差异:
"&" 是键值对的唯一主要分隔符,但某些服务器端语言也将 ";" 视为分隔符。
应忽略具有无效百分号编码的键值对,但某些服务器端语言会静默屏蔽此类错误。
"+" 字符不应被特殊处理,但某些服务器端语言将其替换为空格 (" ") 字符。
必须保留相同名称的多次出现,但某些服务器端语言仅保留最后一次出现。
本节定义了如何将键值 Unicode 字符串对列表转换为媒体片段维度。
给定 4.2 片段维度 节中定义的维度,每个维度都有一对分别对应名称和值组件的生成规则:
| Keyword(关键字) | 维度 |
|---|---|
| t | 4.2.1 时间维度 |
| xywh | 4.2.2 空间维度 |
| track | 媒体片段 1.0 URI(高级) |
| id | 媒体片段 1.0 URI(高级) |
最初,所有维度都是未定义的。
对于每个键值对:
如果名称与上表中的关键字匹配,则按相应部分解释值。
否则,该键值对不代表媒体片段维度。验证器应发出警告。用户代理必须忽略该键值对。
注意:因为键值对是按顺序处理的,所以使用的任何维度的最后一次有效出现才是被采用的。
此外,正如 4.2.1 时间维度 节中所述,时间间隔是半开区间(即开始时间被视为间隔的一部分,而结束时间被视为不属于该间隔的第一个时间点)。因此,如果我们下文陈述“媒体从 x 播放到 y”,这意味着对应于 y 的帧将不会被播放。
对于 a <= b 时的 t=a,b,以下时间片段是有效的:
为了描述时间媒体片段的不同情况,我们使用 6.1.1 有效的时间维度 中的定义。只有当用户代理知道持续时间(对于不存在的时间片段)和源媒体的帧速率时,才能检测到以下时间片段的无效性。
e。e。为了描述空间媒体片段的不同情况,我们使用 6.1.2 有效的空间维度 中的定义。只有当用户代理知道源媒体的分辨率时,才能检测到以下空间片段的无效性。
本节包含给实施者的注意事项。这里的一些信息已经在文档的其他地方正式说明,此处的参考主要是作为提醒。其他项目确实超出了本规范的范围,但此处的注释反映了作者认为的最佳实践。
各小节并非互斥。因此,作为媒体片段客户端的 Web 浏览器实施者应该阅读 7.1 浏览器渲染媒体片段、7.2 客户端显示媒体片段 和 7.3 所有媒体片段客户端 节。
4.2.2 空间维度 节中定义的像素坐标旨在与 HTML5 中定义的内在宽度和高度一致。对于空间 URI 片段,下一节描述了两个不同的用例:高亮显示和裁剪。然而,HTML 渲染客户端预计将裁剪作为默认的渲染机制实现。
同步: 当检索该资源的媒体片段时,需要保持媒体资源不同轨道之间的同步。这对于 URI 片段和 URI 查询检索都是如此。使用 URI 查询时,如果需要转码,则同步中不可察觉的变化是可以接受的。
嵌入式时间码: 当媒体资源包含嵌入式时间码时,在进行媒体片段检索时需要保持这些时间码,特别是在使用 URI 片段方法时。当使用 URI 查询并进行转码时,如果嵌入式时间码有用且需要,则应予以保留。
合理的字节范围: 如果单个时间范围请求会导致不成比例的大量字节范围,则服务器最好返回一个重定向,指向媒体片段的查询形式。如果底层媒体文件以奇怪的方式组织,则可能会发生这种情况。
unichar = <any Unicode code point> unistring = *unichar ; defined in RFC 5234 ALPHA = %x41-5A / %x61-7A ; A-Z / a-z DIGIT = %x30-39 ; 0-9 HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" ; defined in RFC 3986 unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" pchar = unreserved / pct-encoded / sub-delims / ":" / "@" fragment = *( pchar / "/" / "?" ) ; defined in RFC 2326 npt-sec = 1*DIGIT [ "." *DIGIT ] ; definitions taken npt-hhmmss = npt-hh ":" npt-mm ":" npt-ss [ "." *DIGIT] ; from RFC 2326 npt-mmss = npt-mm ":" npt-ss [ "." *DIGIT] npt-hh = 1*DIGIT ; any positive number npt-mm = 2DIGIT ; 0-59 npt-ss = 2DIGIT ; 0-59 ; defined in RFC 3339 date-fullyear = 4DIGIT date-month = 2DIGIT ; 01-12 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on ; month/year time-hour = 2DIGIT ; 00-23 time-minute = 2DIGIT ; 00-59 time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second ; rules time-secfrac = "." 1*DIGIT time-numoffset = ("+" / "-") time-hour ":" time-minute time-offset = "Z" / time-numoffset partial-time = time-hour ":" time-minute ":" time-second [time-secfrac] full-date = date-fullyear "-" date-month "-" date-mday full-time = partial-time time-offset date-time = full-date "T" full-time ; Mediafragment definitions segment = mediasegment / *( pchar / "/" / "?" ) ; augmented fragment ; definition taken from ; RFC 3986 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Common Prefixes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; deftimeformat = %x6E.70.74 ; "npt" pfxdeftimeformat = %x74.3A.6E.70.74 ; "t:npt" smpteformat = %x73.6D.70.74.65 ; "smpte" / %x73.6D.70.74.65.2D.32.35 ; "smpte-25" / %x73.6D.70.74.65.2D.33.30 ; "smpte-30" / %x73.6D.70.74.65.2D.33.30.2D.64.72.6F.70 ; "smpte-30-drop" pfxsmpteformat = %x74.3A.73.6D.70.74.65 ; "t:smpte" / %x74.3A.73.6D.70.74.65.2D.32.35 ; "t:smpte-25" / %x74.3A.73.6D.70.74.65.2D.33.30 ; "t:smpte-30" / %x74.3A.73.6D.70.74.65.2D.33.30.2D.64.72.6F.70 ; "t:smpte-30-drop" clockformat = %x63.6C.6F.63.6B ; "clock" pfxclockformat = %x74.3A.63.6C.6F.63.6B ; "clock" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Segment ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; mediasegment = ( timesegment / spacesegment / tracksegment / idsegment ) *( "&" ( timesegment / spacesegment / tracksegment / idsegment ) timesegment = timeprefix "=" timeparam timeprefix = %x74 ; "t" timeparam = npttimedef / smptetimedef / clocktimedef npttimedef = [ deftimeformat ":"] ( npttime [ "," npttime ] ) / ( "," npttime ) npttime = npt-sec / npt-mmss / npt-hhmmss smptetimedef = smpteformat ":"( frametime [ "," frametime ] ) / ( "," frametime ) frametime = 1*DIGIT ":" 2DIGIT ":" 2DIGIT [ ":" 2DIGIT [ "." 2DIGIT ] ] clocktimedef = clockformat ":"( clocktime [ "," clocktime ] ) / ( "," clocktime ) clocktime = (datetime / walltime / date) datetime = date-time ; inclusion of RFC 3339 spacesegment = xywhprefix "=" xywhparam xywhprefix = %x78.79.77.68 ; "xywh" xywhparam = [ xywhunit ":" ] 1*DIGIT "," 1*DIGIT "," 1*DIGIT "," 1*DIGIT xywhunit = %x70.69.78.65.6C ; "pixel" / %x70.65.72.63.65.6E.74 ; "percent" tracksegment = trackprefix "=" trackparam trackprefix = %x74.72.61.63.6B ; "track" trackparam = unistring idsegment = idprefix "=" idparam idprefix = %x69.64 ; "id" idparam = unistring
本文档是 W3C 媒体片段工作组的工作成果。工作组成员(撰写本文时,按字母顺序排列)为:Eric Carlson (Apple, Inc.), Chris Double (Mozilla Foundation), Michael Hausenblas (DERI Galway at the National University of Ireland, Galway, Ireland), Jack Jansen (CWI), Philip Jägenstedt (Opera Software), Yves Lafon (W3C), Erik Mannens (IBBT), Thierry Michel (W3C/ERCIM), Guillaume (Jean-Louis) Olivrin (Meraka Institute), Soohong Daniel Park (Samsung Electronics Co., Ltd.), Conrad Parker (W3C 特邀专家), Silvia Pfeiffer (W3C 特邀专家), Nobuhisa Shiraishi (NEC Corporation), David Singer (Apple, Inc.), Thomas Steiner (Google, Inc.), Raphaël Troncy (EURECOM), Davy Van Deursen (IBBT),
也非常感谢为 public-media-fragment@w3.org 上的讨论 做出贡献的人们。特别是:Olivier Aubert, Werner Bailer, Tobias Bürger, Pierre-Antoine Champin, Cyril Concolato, Fantasai, Franck Denoual, Martin J. Dürst, Jean Pierre Evain, Ken Harrenstien, Kilroy Hughes, Ryo Kawaguchi, Wim Van Lancker, Véronique Malaisé, Henrik Nordstrom, Christoph Päper, Yannick Prié, Yves Raimond, Julian Reschke, Sam Sneddon, Felix Sasaki, Jakub Sendor, Philip Taylor, Christian Timmerer, Jorrit Vermeiren, Jeroen Wijering, Munjo Yu 和 Boris Zbarsky。