The VideoFrame() constructor creates a new VideoFrame object representing a frame of a video.
On this page
VideoFrame: VideoFrame() constructor
Syntax
js
new VideoFrame(image)
new VideoFrame(image, options)
new VideoFrame(data, options)
Parameters
The first type of constructor (see above) creates a new VideoFrame from an image. Its parameters are:
-
image -
An image containing the image data for the new
VideoFrame. It can be one of the following objects: anSVGImageElement, anHTMLVideoElement, anHTMLCanvasElement, anImageBitmap, anOffscreenCanvas, or anotherVideoFrame. optionsOptional-
An object containing the following:
durationOptional-
An integer representing the duration of the frame in microseconds.
-
timestamp -
An integer representing the timestamp of the frame in microseconds.
alphaOptional-
A string, describing how the user agent should behave when dealing with alpha channels. The default value is "keep".
"keep": Indicates that the user agent should preserve alpha channel data."discard": Indicates that the user agent should ignore or remove alpha channel data.
visibleRectOptional-
An object representing the visible rectangle of the
VideoFrame, containing the following: displayWidthOptional-
The width of the
VideoFramewhen displayed after applying aspect-ratio adjustments. displayHeightOptional-
The height of the
VideoFramewhen displayed after applying aspect-ratio adjustments.
The second type of constructor (see above) creates a new VideoFrame from an ArrayBuffer. Its parameters are:
-
data -
An
ArrayBuffercontaining the data for the newVideoFrame. -
options -
An object containing the following:
-
format -
A string representing the video pixel format. One of the following strings, which are fully described on the page for the
formatproperty:"I420""I420A""I422""I444""NV12""RGBA""RGBX""BGRA""BGRX"
-
codedWidth -
Width of the
VideoFramein pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. -
codedHeight -
Height of the
VideoFramein pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. -
timestamp -
An integer representing the timestamp of the frame in microseconds.
durationOptional-
An integer representing the duration of the frame in microseconds.
layoutOptional-
A list containing the following values for each plane in the
VideoFrame: visibleRectOptional-
An object representing the visible rectangle of the
VideoFrame, containing the following: displayWidthOptional-
The width of the
VideoFramewhen displayed after applying aspect ratio adjustments. displayHeightOptional-
The height of the
VideoFramewhen displayed after applying aspect ratio adjustments. -
colorSpace -
An object representing the color space of the
VideoFrame, containing the following:-
primaries -
A string representing the video color primaries, described on the page for the
VideoColorSpace.primariesproperty. -
transfer -
A string representing the video color transfer function, described on the page for the
VideoColorSpace.transferproperty. -
matrix -
A string representing the video color matrix, described on the page for the
VideoColorSpace.matrixproperty. -
fullRange -
A Boolean. If
true, indicates that full-range color values are used.
-
-
Examples
The following examples are from the article Video processing with WebCodecs. In this first example, a VideoFrame is created from a canvas.
js
const cnv = document.createElement("canvas");
// draw something on the canvas
// ...
let frame_from_canvas = new VideoFrame(cnv, { timestamp: 0 });
In the following example a VideoFrame is created from a TypedArray.
js
const pixelSize = 4;
const init = {
timestamp: 0,
codedWidth: 320,
codedHeight: 200,
format: "RGBA",
};
let data = new Uint8Array(init.codedWidth * init.codedHeight * pixelSize);
for (let x = 0; x < init.codedWidth; x++) {
for (let y = 0; y < init.codedHeight; y++) {
let offset = (y * init.codedWidth + x) * pixelSize;
data[offset] = 0x7f; // Red
data[offset + 1] = 0xff; // Green
data[offset + 2] = 0xd4; // Blue
data[offset + 3] = 0x0ff; // Alpha
}
}
let frame = new VideoFrame(data, init);
Specifications
| Specification |
|---|
| WebCodecs # dom-videoframe-videoframe |
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 | 16.4 | 94 | 94 | No | 66 | 16.4 | 17.0 |
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/VideoFrame/VideoFrame