/// 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; }