来源:Global Video Tech Meetup: Portland 主讲人:Will law 翻译整理:张一炜 本次演讲介绍了目前 CDN 日志所包含的信息有限的问题,引出了由 CTA 提出的 CMCD(Common Media Client Data)规范,并对其中的主要内容进行了详细的介绍,同时也给出了 CMCD 规范的数据如何帮助优化 CDN 传输以提高客户端的 QoE 指标。
目录
CMCD(Common Media Client Data) 是由 CTA WAVE(Web Application Video Ecosystem) 创立的项目,并得到了 Apple、Hulu、Dolby 等组织的支持。并在 2020 年 9 月发布。
CMCD 规范的提出,主要是为了解决 CDN 日志的一些缺陷。CDN 的日志信息格式如下图所示。
原始的 CDN 日志信息内容
一行 CDN 的日志信息中虽然包括了请求的 IP 地址与请求的视频段编号。但由于日志中的 IP 地址可能仅仅是网关的地址,仅通过这一条日志也难以判断实际的用户。CDN 的日志也仅能反应点击量信息,无法得到有关 QoE 维度的信息。
另外 CDN 的日志无法获得详细的视频段信息,包括该媒体数据实际的长度,是 HLS 还是 DASH 格式,对象的码率、直播或者点播、播放器的 buffer 情况以及当前的播放状态等都无法获取。
从播放端的角度来看,同样希望 CDN 能够通过日志信息了解到播放器的情况,包括了当前的网络状况、当前播放器的 QoE 指标(Convivia,NPAW,MUX等)、当前 CDN 在发送缓慢的数据是初始化数据、音频数据还是视频数据。并且,虽然从 CDN 的日志可以获取点击量的信息,但无法知道点击量对应的实际视频内容的个数。
所以,在播放器和 CDN 服务器之间交换一些互相有益的信息是很有必要的。事实上,在播放器请求播放列表和媒体数据段的时候就已经实现了每隔几秒交换一定的信息。可以在其中添加一些其他的数据信息来实现 CDN 服务器和播放器之间的信息交换。
播放器对 CDN 服务器的请求
CMCD 规范为了解决上述问题,定义了一套结构化的键值对集合,以此来传递对 CDN 服务器和播放器共同有益的信息。在播放器与 CDN 服务器之间的交换方式包括了一系列的自定义 header、查询参数以及 json 对象三种方式。该规范被称为通用的原因也正是在于这样的数据结构可以支持所有的播放器与 CDN 服务器。
具体来说,CMCD 的键值对主要包括了以下几个,括号中的内容为对应的 key 标识,后面则是对该键值对的简单介绍。
为了确保传输内容的 CMCD 结构化数据的隐私性,推荐使用 HTTPS 来传输相应的数据。
CMCD 中还包括一些基本的规则,即上述的所有 key 都是可选的,客户端仅仅发送一个 sid 的情况也是允许的。并且,也允许添加自定义的键值对,但对于自定义的情况,需要携带一个连字符前缀以避免和未来版本的 CMCD 的命名空间产生冲突。
如果在 header 中添加自定义的键值对,则这些自定义的键必须基于其期望的级别和可变性分配个4个特定的 header 名称(CMCD-Request、CMCD-Object、CMCD-Status、CMCD-Session)。
下面给出一个 CMCD 规范下的结构化数据,其中包括了自定义 header、查询参数以及 json 对象三种方式。
CMCD 结构化数据
借助这些键值对信息,CDN 服务器与客户端可以高效的交换一些互相有益的信息,以使得 CDN 服务器对客户端的状态和需求有更好的了解。主要包括以下一些应用。
附上演讲视频:
http://mpvideo.qpic.cn/0bc3aeabeaaajmae26gvnrqvaaodciaqaeqa.f10002.mp4?dis_k=53e450e41ba284cba25e055da915f746&dis_t=1645149885&vid=wxv_2210922384063332355&format_id=10002&support_redirect=0&mmversion=false