HTTP Adaptive Streaming event definitions for qlog
This document describes the values of the qlog name ("category" + "event") and "data" fields and their semantics for HTTP Adaptive Streaming (HAS).
The event and data structure definitions in ths document are expressed in the Concise Data Definition Language CDDL and its extensions described in QLOG.
The following fields from QLOG are imported and used: name, category, type, data, protocol_type, and time-related fields.
This document describes how HAS can be expressed in qlog using the schema defined in QLOG. HAS events are defined with a category, a name (the concatenation of "category" and "event").
Some data fields use complex datastructures. These are represented as enums or re-usable definitions, which are grouped together on the bottom of this document for clarity.
When any event from this document is included in a qlog trace, the "protocol_type" qlog array field MUST contain an entry with the value "HAS".
Emitted when the stream is initialised.
Definition:
PlaybackStreamInitialised = {
autoplay: boolean
window_size: string
device: DeviceType
}
DeviceType =
"pc" /
"handheld" /
"mobile"
Emitted when the playback of the media has ended.
Definition:
PlaybackStreamEnd = {
playhead: Playhead
}
Playhead = {
ms: uint16
? frames: uint16
? bytes: uint16
}
Emitted when the manifest and other metadata is loaded.
Definition:
PlaybackMetadataLoaded = {
protocol: Protocol
url: string
? media_duration: uint16
; either a filepath to the manifest on the system
; or a stringified representation of the manifest
? manifest: string
}
Protocol =
"Progressive" /
"DASH" /
"HLS" /
"MSS" /
...
Emitted when there is an interaction with the video player.
Definition:
PlaybackPlayerInteraction = {
state: InteractionState
playhead: Playhead
? playback_rate: float32
? volume: float32
? window_size: string
}
InteractionState =
"play" /
"pause" /
"seek" /
"playback_rate" /
"volume" /
"resize"
Emitted when there is an change of the playback state.
Definition:
PlaybackPlayerState = {
state: PlaybackState
playhead: Playhead
}
PlaybackState =
"playing" /
"paused" /
"stopped"
Emitted when the playback stalls
Definition:
PlaybackStall = {
playhead: Playhead
}
Emitted occasionally when the playhead progresses
Definition:
PlaybackPlayheadProgress = {
playhead: Playhead
? remaining: Playhead
}
Emitted when the representation being shown has changed
Definition:
PlaybackQualityChanged = {
media_type: MediaType
to: Representation
? from: Representation
}
Representation = {
id: string
? bitrate: uint16
}
MediaType =
"video" /
"audio"
Emitted when the requested representation of the media changes
Definition:
ABRRepresentationSwitch = {
media_type: MediaType
to: Representation
? from: Representation
}
Emitted when the readiness of the media potentially changed
Definition:
ABRReadyStateChange = {
state: ReadyState
}
ReadyState =
"have_nothing" /
"have_metadata" /
"have_current_data" /
"have_future_data" /
"have_enough_data"
Logs the metrics of the ABR algorithm
Definition:
ABRStreamMetrics = {
? min_rtt: uint16
? smoothed_rtt: uint16
? latest_rtt: uint16
? rtt_variance: uint16
? bitrate: uint16
? dropped_frames: uint16
}
Emitted when the occupancy of a buffer changes
Definition:
BufferOccupancyUpdate = {
media_type: mediaType
buffer: Buffer
}
Buffer = {
level_ms: uint16
? target_ms: uint16
? level_frames: uint16
? level_bytes: uint16
}
Emitted when a network request is started
Definition:
NetworkRequest = {
media_type: RequestType
resource_url: string
? request_range: string
}
RequestType =
"video" /
"audio" /
"subtitles" /
"manifest" /
"other"
Emitted when a network request made progress
Definition:
NetworkRequestUpdate = {
resource_url: string
bytes_received: uint16
? rtt: uint16
? error: string
}
Emitted when a network request is aborted
Definition:
NetworkRequestAbort = {
resource_url: string
}