VideoFrame: VideoFrame() constructor
Baseline 2024 *Newly available
Since September 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
* Some parts of this feature may have varying levels of support.
Note: This feature is available in Dedicated Web Workers.
The VideoFrame()
constructor creates a new VideoFrame
object representing a frame of a video.
Syntax
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
. options
Optional-
An object containing the following:
duration
Optional-
An integer representing the duration of the frame in microseconds.
timestamp
-
An integer representing the timestamp of the frame in microseconds.
alpha
Optional-
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.
visibleRect
Optional-
An object representing the visible rectangle of the
VideoFrame
, containing the following: displayWidth
Optional-
The width of the
VideoFrame
when displayed after applying aspect-ratio adjustments. displayHeight
Optional-
The height of the
VideoFrame
when displayed after applying aspect-ratio adjustments. flip
Optional-
A boolean. If
true
, horizontal mirroring is applied. Defaults tofalse
. rotation
Optional-
An integer representing the rotation (0, 90, 180, or 270) in degrees clockwise. Defaults to
0
. Arbitrary numbers (including negatives) are rounded to the next quarter turn.
The second type of constructor (see above) creates a new VideoFrame
from an ArrayBuffer
. Its parameters are:
data
-
An
ArrayBuffer
, aTypedArray
, or aDataView
containing 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
format
property:"I420"
"I420A"
"I422"
"I444"
"NV12"
"RGBA"
"RGBX"
"BGRA"
"BGRX"
codedWidth
-
Width of the
VideoFrame
in pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. codedHeight
-
Height of the
VideoFrame
in pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. timestamp
-
An integer representing the timestamp of the frame in microseconds.
duration
Optional-
An integer representing the duration of the frame in microseconds.
layout
Optional-
A list containing the following values for each plane in the
VideoFrame
: visibleRect
Optional-
An object representing the visible rectangle of the
VideoFrame
, containing the following: displayWidth
Optional-
The width of the
VideoFrame
when displayed after applying aspect ratio adjustments. displayHeight
Optional-
The height of the
VideoFrame
when 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.primaries
property. transfer
-
A string representing the video color transfer function, described on the page for the
VideoColorSpace.transfer
property. matrix
-
A string representing the video color matrix, described on the page for the
VideoColorSpace.matrix
property. fullRange
-
A Boolean. If
true
, indicates that full-range color values are used.
transfer
-
An array of
ArrayBuffer
s thatVideoFrame
will detach and take ownership of. If the array contains theArrayBuffer
backingdata
,VideoFrame
will use that buffer directly instead of copying from it. flip
Optional-
A boolean. If
true
, horizontal mirroring is applied. Defaults tofalse
. rotation
Optional-
An integer representing the rotation (0, 90, 180, or 270) in degrees clockwise. Defaults to
0
. Arbitrary numbers (including negatives) are rounded to the next quarter turn.
Examples
The following examples are from the article Video processing with WebCodecs. In this first example, a VideoFrame
is created from a canvas.
const cnv = document.createElement("canvas");
// draw something on the canvas
// …
const frame_from_canvas = new VideoFrame(cnv, { timestamp: 0 });
In the following example a VideoFrame
is created from a TypedArray
.
const pixelSize = 4;
const init = {
timestamp: 0,
codedWidth: 320,
codedHeight: 200,
format: "RGBA",
};
const data = new Uint8Array(init.codedWidth * init.codedHeight * pixelSize);
for (let x = 0; x < init.codedWidth; x++) {
for (let y = 0; y < init.codedHeight; y++) {
const 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
}
}
init.transfer = [data.buffer];
const frame = new VideoFrame(data, init);
Specifications
Specification |
---|
WebCodecs # dom-videoframe-videoframe |