VideoFrame
The VideoFrame interface of the Web Codecs API represents a frame of a video.
Description
A VideoFrame object can be created or accessed in a number of ways. The MediaStreamTrackProcessor breaks a media track into individual VideoFrame objects.
A VideoFrame is a CanvasImageSource and has a constructor that accepts a CanvasImageSource. This means that a frame can be created from an image or video element.
A second constructor enables the creation of a VideoFrame from its binary pixel representation in a BufferSource.
Created frames may then turned into a media track, for example with the MediaStreamTrackGenerator interface that creates a media track from a stream of frames.
Constructor
VideoFrame.VideoFrame()-
Creates a new
VideoFrameobject.
Properties
-
VideoFrame.formatRead only -
Returns the pixel format of the
VideoFrame. -
VideoFrame.codedWidthRead only -
Returns the width of the
VideoFramein pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. -
VideoFrame.codedHeightRead only -
Returns the height of the
VideoFramein pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. -
VideoFrame.codedRectRead only -
Returns a
DOMRectReadOnlywith the width and height matchingcodedWidthandcodedHeight. -
VideoFrame.visibleRectRead only -
Returns a
DOMRectReadOnlydescribing the visible rectangle of pixels for thisVideoFrame. -
VideoFrame.displayWidthRead only -
Returns the width of the
VideoFramewhen displayed after applying aspect ratio adjustments. -
VideoFrame.displayHeightRead only -
Returns the height of the
VideoFramewhen displayed after applying aspect ratio adjustments. -
VideoFrame.durationRead only -
Returns an integer indicating the duration of the audio in microseconds.
-
VideoFrame.timestampRead only -
Returns an integer indicating the timestamp of the audio in microseconds.
-
VideoFrame.colorSpaceRead only -
Returns a
VideoColorSpaceobject.
Methods
VideoFrame.allocationSize()-
Returns the number of bytes required to hold the
VideoFrameas filtered by options passed into the method. VideoFrame.clone()-
Creates a new
VideoFrameobject with reference to the same media resource as the original. VideoFrame.close()-
Clears all states and releases the reference to the media resource.
Examples
In the following example frames are returned from a MediaStreamTrackProcessor, then encoded. See the full example and read more about it in the article Video processing with WebCodecs.
let frame_counter = 0; const track = stream.getVideoTracks()[0]; const media_processor = new MediaStreamTrackProcessor(track); const reader = media_processor.readable.getReader(); while (true) { const result = await reader.read(); if (result.done) break; let frame = result.value; if (encoder.encodeQueueSize > 2) { // Too many frames in flight, encoder is overwhelmed // let's drop this frame. frame.close(); } else { frame_counter++; const insert_keyframe = (frame_counter % 150) == 0; encoder.encode(frame, { keyFrame: insert_keyframe }); frame.close(); } }
Specifications
| Specification |
|---|
| WebCodecs # videoframe-interface |
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
VideoFrame |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
VideoFrame |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
allocationSize |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
clone |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
close |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
codedHeight |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
codedRect |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
codedWidth |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
colorSpace |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
displayHeight |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
displayWidth |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
duration |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
format |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
timestamp |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
visibleRect |
94 |
94 |
No |
No |
80 |
No |
94 |
94 |
No |
No |
No |
No |
See also
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/VideoFrame