///
import { IGetToken, ITokenizer } from 'strtok3/lib/core';
import { IPicture, ITag } from '../type';
import GUID from './GUID';
/**
* Data Type: Specifies the type of information being stored. The following values are recognized.
*/
export declare enum DataType {
/**
* Unicode string. The data consists of a sequence of Unicode characters.
*/
UnicodeString = 0,
/**
* BYTE array. The type of data is implementation-specific.
*/
ByteArray = 1,
/**
* BOOL. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values.
*/
Bool = 2,
/**
* DWORD. The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer.
*/
DWord = 3,
/**
* QWORD. The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer.
*/
QWord = 4,
/**
* WORD. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer.
*/
Word = 5
}
/**
* Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575
*/
export interface IAsfObjectHeader {
/**
* A GUID that identifies the object. 128 bits
*/
objectId: GUID;
/**
* The size of the object (64-bits)
*/
objectSize: number;
}
/**
* Interface for: 3. ASF top-level Header Object
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3
*/
export interface IAsfTopLevelObjectHeader extends IAsfObjectHeader {
numberOfHeaderObjects: number;
}
/**
* Token for: 3. ASF top-level Header Object
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3
*/
export declare const TopLevelHeaderObjectToken: IGetToken;
/**
* Token for: 3.1 Header Object (mandatory, one only)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_1
*/
export declare const HeaderObjectToken: IGetToken;
export declare abstract class State implements IGetToken {
len: number;
constructor(header: IAsfObjectHeader);
abstract get(buf: Buffer, off: number): T;
protected postProcessTag(tags: ITag[], name: string, valueType: number, data: any): void;
}
export declare class IgnoreObjectState extends State {
constructor(header: IAsfObjectHeader);
get(buf: Buffer, off: number): null;
}
/**
* Interface for: 3.2: File Properties Object (mandatory, one only)
*
* The File Properties Object defines the global characteristics of the combined digital media streams found within the Data Object.
*/
export interface IFilePropertiesObject {
/**
* Specifies the unique identifier for this file.
* The value of this field shall be regenerated every time the file is modified in any way.
* The value of this field shall be identical to the value of the File ID field of the Data Object.
*/
fileId: GUID;
/**
* Specifies the size, in bytes, of the entire file.
* The value of this field is invalid if the Broadcast Flag bit in the Flags field is set to 1.
*/
fileSize: bigint;
/**
* Specifies the date and time of the initial creation of the file. The value is given as the number of 100-nanosecond
* intervals since January 1, 1601, according to Coordinated Universal Time (Greenwich Mean Time). The value of this
* field may be invalid if the Broadcast Flag bit in the Flags field is set to 1.
*/
creationDate: bigint;
/**
* Specifies the number of Data Packet entries that exist within the Data Object. The value of this field is invalid
* if the Broadcast Flag bit in the Flags field is set to 1.
*/
dataPacketsCount: bigint;
/**
* Specifies the time needed to play the file in 100-nanosecond units.
* This value should include the duration (estimated, if an exact value is unavailable) of the the last media object
* in the presentation. The value of this field is invalid if the Broadcast Flag bit in the Flags field is set to 1.
*/
playDuration: bigint;
/**
* Specifies the time needed to send the file in 100-nanosecond units.
* This value should include the duration of the last packet in the content.
* The value of this field is invalid if the Broadcast Flag bit in the Flags field is set to 1.
* Players can ignore this value.
*/
sendDuration: bigint;
/**
* Specifies the amount of time to buffer data before starting to play the file, in millisecond units.
* If this value is nonzero, the Play Duration field and all of the payload Presentation Time fields have been offset
* by this amount. Therefore, player software must subtract the value in the preroll field from the play duration and
* presentation times to calculate their actual values. It follows that all payload Presentation Time fields need to
* be at least this value.
*/
preroll: bigint;
/**
* The flags
*/
flags: {
/**
* Specifies, if set, that a file is in the process of being created (for example, for recording applications),
* and thus that various values stored in the header objects are invalid. It is highly recommended that
* post-processing be performed to remove this condition at the earliest opportunity.
*/
broadcast: boolean;
/**
* Specifies, if set, that a file is seekable.
* Note that for files containing a single audio stream and a Minimum Data Packet Size field equal to the Maximum
* Data Packet Size field, this flag shall always be set to 1.
* For files containing a single audio stream and a video stream or mutually exclusive video streams,
* this flag is only set to 1 if the file contains a matching Simple Index Object for each regular video stream
* (that is, video streams that are not hidden according to the method described in section 8.2.2).
*/
seekable: boolean;
};
/**
* Specifies the minimum Data Packet size in bytes. In general, the value of this field is invalid if the Broadcast
* Flag bit in the Flags field is set to 1.
* However, for the purposes of this specification, the values for the Minimum Data Packet Size and Maximum Data
* Packet Size fields shall be set to the same value, and this value should be set to the packet size, even when the
* Broadcast Flag in the Flags field is set to 1.
*/
minimumDataPacketSize: number;
/**
* Specifies the maximum Data Packet size in bytes.
* In general, the value of this field is invalid if the Broadcast Flag bit in the Flags field is set to 1.
* However, for the purposes of this specification, the values of the Minimum Data Packet Size and Maximum Data Packet
* Size fields shall be set to the same value,
* and this value should be set to the packet size, even when the Broadcast Flag field is set to 1.
*/
maximumDataPacketSize: number;
/**
* Specifies the maximum instantaneous bit rate in bits per second for the entire file.
* This shall equal the sum of the bit rates of the individual digital media streams.
* It shall be noted that the digital media stream includes ASF data packetization overhead as well as digital media
* data in payloads.
* Only those streams that have a free-standing Stream Properties Object in the header shall have their bit rates
* included in the sum;
* streams whose Stream Properties Object exists as part of an Extended Stream Properties Object in the Header
* Extension Object shall not have their bit rates included in this sum, except when this value would otherwise be 0.
*/
maximumBitrate: number;
}
/**
* Token for: 3.2: File Properties Object (mandatory, one only)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_2
*/
export declare class FilePropertiesObject extends State {
static guid: GUID;
constructor(header: IAsfObjectHeader);
get(buf: Buffer, off: number): IFilePropertiesObject;
}
/**
* Interface for: 3.3 Stream Properties Object (mandatory, one per stream)
*/
export interface IStreamPropertiesObject {
/**
* Stream Type
*/
streamType: string;
/**
* Error Correction Type
*/
errorCorrectionType: GUID;
}
/**
* Token for: 3.3 Stream Properties Object (mandatory, one per stream)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_3
*/
export declare class StreamPropertiesObject extends State {
static guid: GUID;
constructor(header: IAsfObjectHeader);
get(buf: Buffer, off: number): IStreamPropertiesObject;
}
export interface IHeaderExtensionObject {
reserved1: GUID;
reserved2: number;
extensionDataSize: number;
}
/**
* 3.4: Header Extension Object (mandatory, one only)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_4
*/
export declare class HeaderExtensionObject implements IGetToken {
static guid: GUID;
len: number;
constructor();
get(buf: Buffer, off: number): IHeaderExtensionObject;
}
export interface ICodecEntry {
type: {
videoCodec: boolean;
audioCodec: boolean;
};
codecName: string;
description: string;
information: Buffer;
}
/**
* 3.5: Read the Codec-List-Object, which provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5
*/
export declare function readCodecEntries(tokenizer: ITokenizer): Promise;
/**
* 3.10 Content Description Object (optional, one only)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_10
*/
export declare class ContentDescriptionObjectState extends State {
static guid: GUID;
private static contentDescTags;
constructor(header: IAsfObjectHeader);
get(buf: Buffer, off: number): ITag[];
}
/**
* 3.11 Extended Content Description Object (optional, one only)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_11
*/
export declare class ExtendedContentDescriptionObjectState extends State {
static guid: GUID;
constructor(header: IAsfObjectHeader);
get(buf: Buffer, off: number): ITag[];
}
export interface IStreamName {
streamLanguageId: number;
streamName: string;
}
/**
* 4.1 Extended Stream Properties Object (optional, 1 per media stream)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_1
*/
export interface IExtendedStreamPropertiesObject {
startTime: bigint;
endTime: bigint;
dataBitrate: number;
bufferSize: number;
initialBufferFullness: number;
alternateDataBitrate: number;
alternateBufferSize: number;
alternateInitialBufferFullness: number;
maximumObjectSize: number;
flags: {
reliableFlag: boolean;
seekableFlag: boolean;
resendLiveCleanpointsFlag: boolean;
};
streamNumber: number;
streamLanguageId: number;
averageTimePerFrame: number;
streamNameCount: number;
payloadExtensionSystems: number;
streamNames: IStreamName[];
streamPropertiesObject: number;
}
/**
* 4.1 Extended Stream Properties Object (optional, 1 per media stream)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_1
*/
export declare class ExtendedStreamPropertiesObjectState extends State {
static guid: GUID;
constructor(header: IAsfObjectHeader);
get(buf: Buffer, off: number): IExtendedStreamPropertiesObject;
}
/**
* 4.7 Metadata Object (optional, 0 or 1)
* Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_7
*/
export declare class MetadataObjectState extends State {
static guid: GUID;
constructor(header: IAsfObjectHeader);
get(uint8Array: Uint8Array, off: number): ITag[];
}
export declare class MetadataLibraryObjectState extends MetadataObjectState {
static guid: GUID;
constructor(header: IAsfObjectHeader);
}
export interface IWmPicture extends IPicture {
type: string;
format: string;
description: string;
size: number;
data: Buffer;
}
/**
* Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd757977(v=vs.85).aspx
*/
export declare class WmPictureToken implements IGetToken {
len: any;
static fromBase64(base64str: string): IPicture;
static fromBuffer(buffer: Buffer): IWmPicture;
constructor(len: any);
get(buffer: Buffer, offset: number): IWmPicture;
}