摘要

  • Content-Duration: 33让邮件客户端无需打开媒体,就能显示发送方声明的33秒时长。它让时间信息容易取得,却没有让它成为独立测量结果。
  • RFC 2424指出,精确时长需要打开并播放内容;接收端如何使用该字段由本地实现决定,而且不能据此推算数据的精确字节大小。

消息还没有播放,数字已经出现:Content-Duration: 33。小屏幕上的客户端可以在用户打开附件之前,先显示一段语音似乎有多长;它不必先解码音频,就能给出一个方便的提示。便利是真实的,但标头中的数字与对媒体进行实际观察之间,仍隔着一道边界。

这正是 RFC 2424 在1998年9月试图处理的问题。它以标准轨道文件定义了一个MIME标头,适用于随时间变化的内容,通常是音频或视频。语法很简短:Content-Duration: 后接一至十位十进制数字。数值代表秒,不写单位标签。RFC给出的例子中,33就是33秒。

为什么把这项声明放在单独的标头里?媒体格式可能已把时长写在内部,也可能允许根据数据字节长度计算。无论哪种方式,软件都得处理内容本身,或理解其编码。MIME标头提供了一条成本更低的路径:把时间值放在邮件的外层结构中,让客户端可以直接读取。在受限的语音邮件环境里,简单的MIME桌面客户端,甚至非MIME桌面,都可能在打开音频之前显示语音消息的时长。

这种简单性也让字段的权责变得清晰。RFC 2424称它是由发送方决定的时长值。文件一方面说这个值应该精确,另一方面立刻限定了精确性的来源:不打开并播放内容,就无法知道确切时长。如果必须知道准确值,就应采用后者。因此,这个字段不是测量服务,而是发送方为了便于读取而提供、能够随邮件携带的声明;要核验它,仍须观察媒体。

这项标准并没有规定一种统一界面。RFC列举了几种显示时长的位置,例如收件箱列表或打开的音频附件,随后说明接收端如何使用该字段属于本地实现问题。标准定义了字段及其含义,却没有要求每个客户端都显示它,也没规定其显著程度,更不能证明某个客户端正确解码了媒体。标准化提示可以比单一界面传播得更远,但界面行为并不会因此自动统一。

Voice Profile for Internet Mail为这个字段提供了一个具体使用场景。对于 audio/32KADPCM,时长信息可以帮助基础桌面客户端在处理音频之前判断语音消息的长度。这并不证明说话者是谁、录音何时完成、用户是否打开了它,或有人是否听到了结尾。这些是不同的事实,需要另行携带或观察;该字段本身并没有回答它们。

后续文件显示了语义的延续,也显示了适用框架的扩大。RFC 3803 于2004年取代RFC 2424,并说明只改动了编辑和模板性文字。语法以及“发送方声明”与“播放后才能确知”之间的区别都保留了下来。2005年的 RFC 4021 将 Content-Duration 注册为标准轨道的MIME标头字段,描述为内容部分的时长,单位为秒。登记让人更容易在标头注册表中找到它,却没有把声明变成经过核验的读数。

一份关于客户端行为的信息类文件 RFC 4024,更明确地讨论了显示问题。文本大小可以用千字节表达,语音时长用秒,传真长度用页数。它优先建议客户端用主要音频部分的 Content-Duration 显示语音消息时长,同时允许客户端汇总多个音频部分。对于混合媒体,所显示的“大小”应由主要内容类型决定。这些是客户端界面的建议,并不保证字段经过测量,也不代表内容已经播放。

RFC 2424还注意到,把媒体属性移到媒体之外,会改变它的暴露方式。在一些环境里,在标头中明确披露时长可能产生安全风险。它也警告,不能依赖该字段确定数据的精确大小;精确长度必须检查数据本身。秒与字节回答的是不同问题。发送方声明的时长不能取代字节检查,正如字节数不能证明某个解码器将播放多久。

这段历史揭示的道理不夸张,却持久:标准可以让一项声明低成本地携带和展示,却不意味着它所描述的属性也能低成本地验证。RFC 2424把两端都写明了:由发送方提供、方便读取的时长,以及必须打开并播放才能得到的精确信息。客户端可以先显示前者,而后者尚未发生。无论字段还是显示界面,都不能证明时长与播放相符、消息完整到达,或有人听过它。标头说33秒;在检查内容之前,证据也就到此为止。