VideoFrame: VideoFrame() constructor
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
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.
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.
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
// ...
let frame_from_canvas = new VideoFrame(cnv, { timestamp: 0 });
In the following example a VideoFrame is created from a TypedArray.
const pixelSize = 4;
let 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
}
}
init.transfer = [data.buffer];
let frame = new VideoFrame(data, init);
Specifications
| Specification |
|---|
| WebCodecs # dom-videoframe-videoframe |
Browser compatibility
| desktop | mobile | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
VideoFrame() constructor | |||||||||||