mediabunny
Version:
Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.
139 lines • 6.39 kB
TypeScript
/*!
* Copyright (c) 2026-present, Vanilagy and contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
export declare const PLACEHOLDER_DATA: Uint8Array<ArrayBuffer>;
/**
* The type of a packet. Key packets can be decoded without previous packets, while delta packets depend on previous
* packets.
* @group Packets
* @public
*/
export type PacketType = 'key' | 'delta';
/**
* Holds additional data accompanying an {@link EncodedPacket}.
* @group Packets
* @public
*/
export type EncodedPacketSideData = {
/**
* An encoded alpha frame, encoded with the same codec as the packet. Typically used for transparent videos, where
* the alpha information is stored separately from the color information.
*/
alpha?: Uint8Array;
/**
* The actual byte length of the alpha data. This field is useful for metadata-only packets where the
* `alpha` field contains no bytes.
*/
alphaByteLength?: number;
};
/**
* Represents an encoded chunk of media. Mainly used as an expressive wrapper around WebCodecs API's
* [`EncodedVideoChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedVideoChunk) and
* [`EncodedAudioChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedAudioChunk), but can also be used
* standalone.
* @group Packets
* @public
*/
export declare class EncodedPacket {
/**
* The encoded data of this packet. For any given codec, this data must adhere to the format specified in the
* Mediabunny Codec Registry.
*/
readonly data: Uint8Array;
/** The type of this packet. */
readonly type: PacketType;
/**
* The presentation timestamp of this packet in seconds. May be negative. Samples with negative end timestamps
* should not be presented.
*/
readonly timestamp: number;
/** The duration of this packet in seconds. */
readonly duration: number;
/**
* The sequence number indicates the decode order of the packets. Packet A must be decoded before packet B if A
* has a lower sequence number than B. If two packets have the same sequence number, they are the same packet.
* Otherwise, sequence numbers are arbitrary and are not guaranteed to have any meaning besides their relative
* ordering. Negative sequence numbers mean the sequence number is undefined.
*/
readonly sequenceNumber: number;
/**
* The actual byte length of the data in this packet. This field is useful for metadata-only packets where the
* `data` field contains no bytes.
*/
readonly byteLength: number;
/** Additional data carried with this packet. */
readonly sideData: EncodedPacketSideData;
/** Creates a new {@link EncodedPacket} from raw bytes and timing information. */
constructor(
/**
* The encoded data of this packet. For any given codec, this data must adhere to the format specified in the
* Mediabunny Codec Registry.
*/
data: Uint8Array,
/** The type of this packet. */
type: PacketType,
/**
* The presentation timestamp of this packet in seconds. May be negative. Samples with negative end timestamps
* should not be presented.
*/
timestamp: number,
/** The duration of this packet in seconds. */
duration: number,
/**
* The sequence number indicates the decode order of the packets. Packet A must be decoded before packet B if A
* has a lower sequence number than B. If two packets have the same sequence number, they are the same packet.
* Otherwise, sequence numbers are arbitrary and are not guaranteed to have any meaning besides their relative
* ordering. Negative sequence numbers mean the sequence number is undefined.
*/
sequenceNumber?: number, byteLength?: number, sideData?: EncodedPacketSideData);
/**
* If this packet is a metadata-only packet. Metadata-only packets don't contain their packet data. They are the
* result of retrieving packets with {@link PacketRetrievalOptions.metadataOnly} set to `true`.
*/
get isMetadataOnly(): boolean;
/** The timestamp of this packet in microseconds. */
get microsecondTimestamp(): number;
/** The duration of this packet in microseconds. */
get microsecondDuration(): number;
/** Converts this packet to an
* [`EncodedVideoChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedVideoChunk) for use with the
* WebCodecs API. */
toEncodedVideoChunk(): EncodedVideoChunk;
/**
* Converts this packet to an
* [`EncodedVideoChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedVideoChunk) for use with the
* WebCodecs API, using the alpha side data instead of the color data. Throws if no alpha side data is defined.
*/
alphaToEncodedVideoChunk(type?: PacketType): EncodedVideoChunk;
/** Converts this packet to an
* [`EncodedAudioChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedAudioChunk) for use with the
* WebCodecs API. */
toEncodedAudioChunk(): EncodedAudioChunk;
/**
* Creates an {@link EncodedPacket} from an
* [`EncodedVideoChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedVideoChunk) or
* [`EncodedAudioChunk`](https://developer.mozilla.org/en-US/docs/Web/API/EncodedAudioChunk). This method is useful
* for converting chunks from the WebCodecs API to `EncodedPacket` instances.
*/
static fromEncodedChunk(chunk: EncodedVideoChunk | EncodedAudioChunk, sideData?: EncodedPacketSideData): EncodedPacket;
/** Clones this packet while optionally modifying the new packet's data. */
clone(options?: {
/** The data of the cloned packet. */
data?: Uint8Array;
/** The type of the cloned packet. */
type?: PacketType;
/** The timestamp of the cloned packet in seconds. */
timestamp?: number;
/** The duration of the cloned packet in seconds. */
duration?: number;
/** The sequence number of the cloned packet. */
sequenceNumber?: number;
/** The side data of the cloned packet. */
sideData?: EncodedPacketSideData;
}): EncodedPacket;
}
//# sourceMappingURL=packet.d.ts.map