借助 Media CDN,您可以使用 Google 的广泛日志记录基础架构和低延迟日志传送功能,将每个请求日志与单个播放事件相关联。这有助于您了解在播放期间流量是如何分发的,包括边缘位置、网络状况、源选择和任何错误。
具体实现方法如下:
- 让您能够在多个请求中提供客户端生成的播放 ID。
- 与 Cloud Logging 集成,跨播放和各个请求进行查询。
- 使用 BigQuery 或您选择的平台导出和查询数据。通过规模化数据分析,您可以查看整个播放生命周期内的总延迟时间和投放格式。
结合使用播放跟踪和近乎实时的日志记录功能,您可以按位置、串流或客户端网络将播放会话与整体体验质量相关联,并快速解决问题。
跟踪播放
如需将多个请求与面向用户的播放会话相关联,您需要在客户端中为该播放生成 ID。播放回放跟踪的工作原理是,在所有关联的请求日志中包含标头或查询参数的值。
借助 Shaka、ExoPlayer 和 Apple 的 AVPlayer 等播放器,您可以钩住播放开始事件,并将查询参数和 HTTP 标头附加到针对该在线媒体源发出的请求。
标头和查询参数的定义如下:
- HTTP 请求标头:
Playback-Trace-ID
- 网址查询参数:
playback-trace-id=
如果请求中同时存在 HTTP 标头和查询参数,系统会使用 HTTP 标头,而不是查询参数。
- 播放 ID 的长度不得少于 12 字节(96 位),不得超过 32 字节(256 位),并且必须由随机来源生成。
- 系统不会记录短于 12 个字节的播放 ID。这是为了避免碰撞。
- 播放 ID 长度超过 32 字节时,会截断为前 32 个字节。
播放 ID 在 7 天内应是唯一的。7 天后,如果播放 ID 被重复使用或发生冲突,系统会将每组请求视为单独的播放。
示例:在 Shaka Player 中生成播放 ID
为了能够大规模地获享播放跟踪功能的好处,每次用户视频播放都需要包含针对片段(以及可选的清单)发出的所有请求的播放 ID。播放中的所有请求的此播放 ID 必须相同,才能汇总统计信息。
下面的示例:
- 在视频加载时生成播放 ID。
- 仅在提取片段时发送,不发送清单。
如果您想使用现有的播放 ID(例如内容管理系统和客户端分析提供的 ID),请使用该值填充 playbackSessionId
。
let playbackSessionId; player.addEventListener('loading', () => { const randomBuffer = crypto.getRandomValues(new Uint8Array(16)); playbackSessionId = shaka.util.Uint8ArrayUtils.toBase64(randomBuffer); }); player.getNetworkingEngine().registerRequestFilter((type, request) => { // Remove this "type" check if you want the header on every request. // Alternately, you can check the request.uris array to send the // header to some servers and not others. if (type == shaka.net.NetworkingEngine.RequestType.SEGMENT) { request.headers['CPN'] = playbackSessionId; } });