A user account is required in order to edit this wiki, but we've had to disable public user registrations due to spam.
To request an account, ask an autoconfirmed user on Chat (such as one of these permanent autoconfirmed members).
Video Metrics: Difference between revisions
No edit summary |
No edit summary |
||
Line 39: | Line 39: | ||
Bandwidth and droprate are running metrics (averaged out). Latency and dimensions are sampled metrics (taken once). For RTMP dynamic, the metrics are broadcast at a settable interval (default 2s). For HTTP adaptive, metrics are calculate and broadcast for the last fragment that was loaded (for bandwidth/latency/qualityLevel) or presented (for droprate/dimensions). | Bandwidth and droprate are running metrics (averaged out). Latency and dimensions are sampled metrics (taken once). For RTMP dynamic, the metrics are broadcast at a settable interval (default 2s). For HTTP adaptive, metrics are calculate and broadcast for the last fragment that was loaded (for bandwidth/latency/qualityLevel) or presented (for droprate/dimensions). | ||
'''Note:''' Next to QOS metrics, JW Player [http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/16012/setting-up-rtmp-dynamic-streaming accepts and exposes] per video an array with quality levels (the distinct streams of a video between which the player can | '''Note:''' Next to QOS metrics, JW Player [http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/16012/setting-up-rtmp-dynamic-streaming accepts and exposes] per video an array with quality levels (the distinct streams of a video between which the player can switch). The ''qualityLevel'' metric defines the index in this array of the currently active stream. For each stream, properties like ''bitrate'', ''framerate'', ''height'' and ''width'' are available. This basic mapping works b/c JW Player to date solely supports single A/V muxed dynamic/adaptive videos - no multitracks. | ||
Revision as of 12:23, 31 March 2011
Related HTML WG bug: http://www.w3.org/Bugs/Public/show_bug.cgi?id=12399
Requirements
For several reasons, we need to expose the performance of media elements to JavaScript.
One concrete use case is that content publishers want to understand the quality of their content as being played back by their users and how much a user is actually playing back. For example, if a video always goes into buffering mode after 1 min for all users - maybe there is a problem in the encoding, or the video is too big for the typical bandwidth/CPU combination. Also, publishers want to track the metrics of how much of their video and audio files is actually being watched.
A further use case is HTTP adaptive streaming, where an author wants to manually implement an algorithm for switching between different resources of different bandwidth or screen size. For example, if the user goes full screen and the user's machine and bandwidth allow for it, the author might want to switch to a higher resolution video.
Collection of Proposals/Implementations
Mozilla have implemented the following statistics into Firefox:
- mozParsedFrames - number of frames that have been demuxed and extracted out of the media.
- mozDecodedFrames - number of frames that have been decoded - converted into YCbCr.
- mozPresentedFrames - number of frames that have been presented to the rendering pipeline for rendering - were "set as the current image".
- mozPaintedFrames - number of frames which were presented to the rendering pipeline and ended up being painted on the screen. Note that if the video is not on screen (e.g. in another tab or scrolled off screen), this counter will not increase.
- mozPaintDelay - the time delay between presenting the last frame and it being painted on screen (approximately).
Webkit have implemented these:
- webkitAudioBytesDecoded
- webkitVideoBytesDecoded
- webkitDecodedFrames
- webkitDroppedFrames
JW Player (using actionscript) broadcasts the following QOS metrics for both RTMP dynamic and HTTP adaptive:
- bandwidth: server-client data rate, in kilobytespersecond.
- latency: client-server-client roundtrip time, in milliseconds.
- frameDropRate: number of frames not presented to the viewer, in frames per second.
- screenWidth / screenHeight: dimensions of the video viewport, in pixels.
- qualityLevel: index of the currently playing quality level (see note).
Bandwidth and droprate are running metrics (averaged out). Latency and dimensions are sampled metrics (taken once). For RTMP dynamic, the metrics are broadcast at a settable interval (default 2s). For HTTP adaptive, metrics are calculate and broadcast for the last fragment that was loaded (for bandwidth/latency/qualityLevel) or presented (for droprate/dimensions).
Note: Next to QOS metrics, JW Player accepts and exposes per video an array with quality levels (the distinct streams of a video between which the player can switch). The qualityLevel metric defines the index in this array of the currently active stream. For each stream, properties like bitrate, framerate, height and width are available. This basic mapping works b/c JW Player to date solely supports single A/V muxed dynamic/adaptive videos - no multitracks.
Previously the following statistics have been proposed for HTTP adaptive streaming:
- downloadRate: The current server-client bandwidth (read-only).
- videoBitrate: The current video bitrate (read-only).
- droppedFrames: The total number of frames dropped for this playback session (read-only).
- decodedFrames: The total number of frames decoded for this playback session (read-only).
- height: The current height of the video element (already exists).
- videoHeight: The current height of the videofile (already exists).
- width: The current width of the video element (already exists).
- videoWidth: The current width of the videofile (already exists).
Further, a requirement to expose playback rate statistics has come out of issue-147:
- currentPlaybackRate: the rate at which the video/audio is currently playing back
Here are a few metrics that measure the QoS that a user receives:
- playerLoadTime
- streamBitrate
(user interaction and playthrough can be measured using existing events)