Client Reports¶
Client Reports are complex objects that are specific to the technology that was used to measure the data.
We provide them so you can dig deeper into the data and analyze it in more detail.
Each Client Report contains:
- metadata (e.g., the type and timestamp) common to all Client Reports
- the actual
data
that was measured by the client
Normally, each measured subject has its own type of Client Report. For example:
- A video study with subject
youtube
has aYoutubeClientReport
- A network study with subject
dns
has aDnsClientReport
- … and so on
However, there are also some generic Client Reports that can be used for multiple services:
- Each video study has a
P1203ClientReport
which contains information about the video quality and aPerformanceClientReport
which contains information about the performance of the playback.
Finally, some services could have multiple types of Client Reports (e.g., YouTube has a Client Report for its Stats for Nerds, but we might add more in the future). In the latter case, the data_type
attribute may identify the specific type of the Client Report.
Example¶
Here is are two example Client Reports, both for a video measurement (as identified by the measurement_id
):
We provide this one for every video measurement. This corresponds to the input format of the P.1203 video QoE model. It allows you to get a good overview of what happened during a streaming session.
{
"id": 43009,
"measurement_id": 874,
"type": "P1203ClientReport",
"data_type": "object",
"created_at": "2023-02-11T13:42:58.510Z",
"updated_at": "2023-02-11T13:42:58.510Z",
"client_time": "2023-02-11T13:42:54.875Z",
"client_time_skewed": "2023-02-11T13:42:54.878Z",
"data": {
"I11": {
"segments": [
{
"codec": "opus",
"start": 0,
"bitrate": 125.36497312878555,
"duration": 0.6666666666666666
},
{
"codec": "opus",
"start": 0.6666666666666666,
"bitrate": 125.36497312878555,
"duration": 19.333333333333332
},
{
"codec": "opus",
"start": 20,
"bitrate": 127.71297482399984,
"duration": 20.333333333333332
},
{
"codec": "opus",
"start": 40.333333333333336,
"bitrate": 133.1045843559189,
"duration": 19
}
],
"streamId": 1
},
"I13": {
"segments": [
{
"fps": 25,
"codec": "vp9",
"start": 0,
"bitrate": 296.51000006291014,
"duration": 0.6666666666666666,
"resolution": "640x360"
},
{
"fps": 29.666666666666668,
"codec": "vp9",
"start": 0.6666666666666666,
"bitrate": 296.51000006291014,
"duration": 19.333333333333332,
"resolution": "854x480"
},
{
"fps": 51,
"codec": "vp9",
"start": 20,
"bitrate": 2516.2002482479243,
"duration": 20.333333333333332,
"resolution": "1920x1080"
},
{
"fps": 61,
"codec": "vp9",
"start": 40.333333333333336,
"bitrate": 2401.3066847336336,
"duration": 19,
"resolution": "1920x1080"
}
],
"streamId": 1
},
"I23": {
"pauses": [
[
0.513657,
0.068
],
[
0.591163,
0.035
],
[
0.674196,
0.05
],
[
0.702526,
0.009
],
[
0.768459,
0.003
]
],
"stalling": [
[
0,
0.901
]
],
"streamId": 1
},
"IGen": {
"device": "pc",
"displaySize": "1920x1080",
"viewingDistance": "150cm"
}
}
}
- This is a
P1203ClientReport
data type (see below for its definition).
This is a Client Report for a YouTube video measurement. It contains the Stats for Nerds data that YouTube provides for each video. This is a very detailed report that allows you to analyze the video quality in great detail.
Note that the data type is stats_for_nerds
, as we might add more YouTube Client Reports in the future.
{
"id": 43008,
"measurement_id": 874,
"type": "YoutubeClientReport",
"data_type": "stats_for_nerds",
"created_at": "2023-02-11T13:42:58.502Z",
"updated_at": "2023-02-11T13:42:58.502Z",
"client_time": "2023-02-11T13:42:54.332Z",
"client_time_skewed": "2023-02-11T13:42:54.335Z",
"data": { // (1)!
"s_cpn": "BBGW T4J4 V8DK",
"volume": 100,
"video_id": "aqz-KE-bpKQ",
"viewport": "1920x1080",
"timestamp": "Sat Feb 11 2023 13:42:53 GMT+0000 (Coordinated Universal Time)",
"audio_itag": 251,
"video_itag": 303,
"color_space": "bt709",
"current_fps": 60,
"current_res": "1920x1080",
"optimal_fps": 60,
"optimal_res": "1920x1080",
"frames_total": 2747,
"mystery_text": "s:8 t:58.36 b:0.000-99.733 L pbs:1562",
"buffer_health": 41.55,
"frames_dropped": 2,
"audio_codec_mime": "opus",
"connection_speed": 69076,
"content_loudness": -4.7,
"network_activity": 1680,
"video_codec_mime": "vp09.00.51.08.01.01.01.01.00",
"normalized_volume": 100
}
}
- This is a
YoutubeStatsForNerdsInfo
data type (see below for its definition).
Properties¶
Common Properties¶
General attributes for a client report.
Property | Type | Description |
---|---|---|
clientTime |
string , or number |
The time at which the report was created |
clientTimeSkewed |
string , or number (optional) |
The time at which the report was created, adjusted in case of client skew |
data |
object (no predefined properties) |
The actual client report data |
dataType |
array of string |
The type of data (if not explicitly defined, simply 'object') |
type |
array of string |
The type of client report |
Data Properties¶
ByteCountClientReport
Data¶
A report for storing byte counts for a given measurement session.
Property | Type | Description |
---|---|---|
byteCounts |
array of array |
The byte counts, as a tuple of timestamp and bytes |
DnsClientReport
Data¶
A report for dig
-based DNS measurements.
Property | Type | Description |
---|---|---|
answerIp |
string |
The resolved IP for the host, as returned by the DNS server (may be IPv4 or IPv6) |
avgQueryTime |
number |
Average query time in microseconds |
host |
string |
The host that was queried (multiple client reports will be used for multiple hosts) |
individiualQueryTimes |
array of number |
Individual query times in microseconds |
maxQueryTime |
number |
The maximum query time in microseconds |
nameserver |
string |
The used nameserver for this request, may be empty if useGetAddrInfo was used for the study |
IcmpPingClientReport
Data¶
A report for ping
-based ICMP measurements.
Property | Type | Description |
---|---|---|
avgRtt |
number |
The average round-trip time (in milliseconds) |
dataBytes |
number |
The number of bytes of data sent in each ping |
host |
string |
The host that was pinged |
individualPings |
array of object (optional) |
An array of individual ping results |
ipAddress |
string |
The IP address of the host that was pinged |
maxRtt |
number |
The maximum round-trip time (in milliseconds) |
minRtt |
number |
The minimum round-trip time (in milliseconds) |
packetsLost |
number |
The packet loss percentage (from 0 to 100) |
packetsReceived |
number |
The number of ping packets received |
packetsTransmitted |
number |
The number of ping packets transmitted |
stdevRtt |
number |
The standard deviation of round-trip times (in milliseconds) |
LighthouseClientReport
Data¶
A Lighthouse measurement result. Simplified type definition from the original Lighthouse project.
Property | Type | Description |
---|---|---|
audits |
object (no predefined properties) |
An object containing the results of the audits, keyed by the audits' id identifier. |
categories |
object (no predefined properties) |
The top-level categories, their overall scores, and member audits. |
categoryGroups |
object (no predefined properties) (optional) |
Descriptions of the groups referenced by CategoryMembers. |
configSettings |
object (no predefined properties) |
The config settings used for these results. |
entities |
object (no predefined properties) (optional) |
All the origins encountered during this Lighthouse run, and information about what web property (aka "entity") they belong to. Won't be present for snapshot mode. |
environment |
object (no predefined properties) |
Information about the environment in which Lighthouse was run. |
fetchTime |
string |
The ISO-8601 timestamp of when the results were generated. |
finalDisplayedUrl |
string |
The URL displayed on the page after Lighthouse finishes. |
finalUrl |
string (optional) |
For historical reasons, this will always be the same as mainDocumentUrl . |
fullPageScreenshot |
object (no predefined properties) (optional), or null (optional) (optional) |
Screenshot taken of the full page, with node rects referencing audit results. If there was an error with collection, this is null. If disabled via the disableFullPageScreenshot setting, this is undefined. |
gatherMode |
string |
Gather mode used to collect artifacts for this result. |
i18n |
object (no predefined properties) |
Strings for the report and the record of all formatted string locations in the LHR and their corresponding source values. |
lighthouseVersion |
string |
The version of Lighthouse with which these results were generated. |
mainDocumentUrl |
string (optional) |
URL of the last document request during a Lighthouse navigation. Will be undefined in timespan/snapshot. |
requestedUrl |
string (optional) |
The URL that Lighthouse initially navigated to. Will be undefined in timespan/snapshot. |
runWarnings |
array of string |
List of top-level warnings for this Lighthouse run. |
runtimeError |
object with properties: code , message (optional) |
A top-level error message that, if present, indicates a serious enough problem that this Lighthouse result may need to be discarded. |
stackPacks |
array of object (optional) |
An array containing the result of all stack packs. |
timing |
object (no predefined properties) |
Execution timings for the Lighthouse run |
userAgent |
string |
The User-Agent string of the browser used run Lighthouse for these results. |
NetflixClientReport
Data¶
Information gathered from the Netflix player debug window. Note that in practice some data may not be available.
Property | Type | Description |
---|---|---|
audioBitrate |
number |
The bitrate of the audio in kbps |
audioCdn |
string |
The domain of the CDN used to deliver the audio content |
audioCodec |
string |
The audio codec used by the stream in MIME format, e.g. "audio/mp4; codecs=\"mp4a.40.5\" (he-aac)" |
bufferingState |
string |
The state of the player's internal buffering |
bufferingVmaf |
number |
The VMAF score of the stream for buffering |
corruptedFrames |
number |
The number of corrupted frames in the stream |
decodedFrames |
number |
The number of decoded frames in the stream |
droppedFrames |
number |
The number of dropped frames in the stream |
duration |
number |
The duration of the stream in seconds |
framerate |
number |
The framerate of the stream in frames per second |
playerState |
string |
The state of the player |
playingVmaf |
number |
The VMAF score of the stream for playing |
position |
number |
The position of the player in the stream in seconds |
renderingState |
string |
The state of the player's rendering |
resolution |
string |
The resolution of the stream |
throughput |
string , or number |
The throughput as a string formatted as "69000 kbps" or similar, or a number in kbps (legacy) |
totalFrameDelay |
number , or null |
The total frame delay of the stream |
videoBitrate |
number |
The bitrate of the video in kbps |
videoCdn |
string |
The domain of the CDN used to deliver the video content |
videoCodec |
string |
The video codec used by the stream in MIME format, e.g. "video/mp4;codecs=vp09.00.11.08.02 (vp9)" |
NetworkPerformanceClientReport
Data¶
This report contains global and domain-specific metrics based on a set of network requests and responses.
Property | Type | Description |
---|---|---|
domainPerformance |
array of object |
The domain-specific metrics |
firstRequestTime |
string |
The time of the first request in ISO 8601 format |
globalMetrics |
object with properties: averageRequestTime , contentTypeDistribution , totalTransferSize |
The global metrics |
parentDomain |
string |
The parent domain from which requests were made |
totalRequests |
number |
The number of requests |
OoklaSpeedtestClientReport
Data¶
A report for Ookla Speedtest measurements made with the Ookla Speedtest CLI.
Property | Type | Description |
---|---|---|
download |
object with properties: bandwidth , bytes , elapsed , latency |
A single speedtest result. |
interface |
object with properties: externalIp , internalIp , isVpn , macAddr , name |
Network interface information |
isp |
string |
Internet Service Provider |
packetLoss |
number |
Packet loss percentage |
ping |
object with properties: high , jitter , latency , low |
Network ping information |
result |
object with properties: id , persisted , url |
Test result information |
server |
object with properties: country , host , id , ip , location , name , port |
Server information |
timestamp |
string |
The timestamp of the report in ISO 8601 format |
type |
string |
The type of report, should be fixed to "result" |
upload |
object with properties: bandwidth , bytes , elapsed , latency |
A single speedtest result. |
P1203ClientReport
Data¶
P1203ClientReport is the same as P1203InputReport, but with additional options for the programmatic calculation.
Property | Type | Description |
---|---|---|
I11 |
object with properties: segments , streamId |
|
I13 |
object with properties: segments , streamId |
|
I23 |
object with properties: pauses , seeking , stalling , streamId |
|
IGen |
object with properties: device , displaySize , viewingDistance |
|
O21 |
array of number (optional) |
|
O22 |
array of number (optional) |
|
calculationSettings |
object with properties: amendment1App2 , amendment1Audiovisual , amendment1Stalling , fastMode , pa , pq , pv , verbose (optional) |
PerformanceClientReport
Data¶
A report for video playback performance.
Property | Type | Description |
---|---|---|
audioBufferTrace |
array of array (optional) |
The video player audio buffer size. Each entry is a tuple of media timestamp and size in seconds. |
bufferTrace |
array of array |
The video player buffer size. Each entry is a tuple of media timestamp and size in seconds. |
droppedVideoFrames |
number |
The number of dropped video frames |
latencyTrace |
array of array |
The video player latency (CDN-to-player). Each entry is a tuple of media timestamp and latency in seconds. |
videoBufferTrace |
array of array (optional) |
The video player video buffer size. Each entry is a tuple of media timestamp and size in seconds. |
TracerouteClientReport
Data¶
A report for traceroute
-based measurements.
Property | Type | Description |
---|---|---|
firstHop |
object with properties: asns , hostnames , ipAddresses , rtts , seq (optional) |
The first hop |
host |
string |
The host name of the target |
individualHops |
array of object (optional) |
An array of individual hop results |
ipAddress |
string |
The IP address of the target |
lastHop |
object with properties: asns , hostnames , ipAddresses , rtts , seq (optional) |
The last host |
maxHops |
number |
Maximum number of hops used |
numHops |
number (optional) |
The final number of hops to the target |
packetSize |
number |
Bytes per packet |
WebrtcInternalsClientReport
Data¶
Data that can be extracted from the chrome://webrtc-internals page via download TODO: further narrow types if needed.
Property | Type | Description |
---|---|---|
PeerConnections |
object (no predefined properties) |
|
UserAgent |
string |
|
getUserMedia |
array of object |
YoutubeClientReport
Data¶
An object containing the YouTube Stats for Nerds window information.
Property | Type | Description |
---|---|---|
audioCodecMime |
string |
The audio codec MIME type, e.g. "opus" |
audioItag |
number |
The audio itag |
bufferHealth |
number |
Buffer health in seconds |
colorSpace |
string (optional) |
The color space name, e.g. "bt709". Not always fetchable, e.g. in Safari. |
connectionSpeed |
number |
The connection speed in kbps |
contentLoudness |
number |
The content loudness |
currentFps |
number |
The current fps |
currentRes |
string |
The current resolution in "<width>x<height>" |
framesDropped |
number |
The number of dropped frames |
framesTotal |
number |
The total number of frames |
mysteryText |
string |
Who knows what this might be? |
networkActivity |
number |
The current network activity in KB |
normalizedVolume |
number |
The normalized volume |
optimalFps |
number |
The optimal fps |
optimalRes |
string |
The optimal resolution in "<width>x<height>" |
sCPN |
string |
The video title |
timestamp |
string (optional) |
An ISO 8601 timestamp |
videoCodecMime |
string |
The video codec NIME type, e.g. "av01.0.08M.08" |
videoId |
string |
The video ID |
videoItag |
number |
The video itag |
viewport |
string |
The viewport size in "<width>x<height>" |
viewportScale |
number |
The viewport scale |
volume |
number |
The volume |