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. 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. flipOptional-
A boolean. If
true, horizontal mirroring is applied. Defaults tofalse. rotationOptional-
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 aDataViewcontaining 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.
transfer-
An array of
ArrayBuffers thatVideoFramewill detach and take ownership of. If the array contains theArrayBufferbackingdata,VideoFramewill use that buffer directly instead of copying from it. flipOptional-
A boolean. If
true, horizontal mirroring is applied. Defaults tofalse. rotationOptional-
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 frameFromCanvas = 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> |