UNPKG

@ntrip/caster

Version:
129 lines (128 loc) 4.25 kB
/// <reference types="node" /> import dgram = require('dgram'); import stream = require('stream'); export interface RtpPacketData { padding?: boolean; marker?: boolean; extension?: { header: number; length: number; content: Buffer; }; payloadType: number; sequenceNumber: number; timestamp: number; ssrc: number; csrc?: number[]; payload?: Buffer; } /** * RTP packet * * Read only class representing an RTP packet, with helper functions for parsing/serialization. */ export declare class RtpPacket { static readonly RTP_VERSION = 2; static readonly RTP_PACKET_MIN_HEADER_SIZE = 12; readonly padding: boolean; readonly marker: boolean; readonly payloadType: number; readonly sequenceNumber: number; readonly timestamp: number; readonly ssrc: number; readonly csrc: number[]; readonly extension?: { header: number; length: number; content: Buffer; }; readonly payload?: Buffer; constructor({ payloadType, padding, marker, sequenceNumber, timestamp, ssrc, csrc, extension, payload }: RtpPacketData); get length(): number; /** * Reads an RtpPacket from the provided buffer * * @param buffer Buffer to read packet from */ static fromBuffer(buffer: Buffer): RtpPacket; private static fromBufferAssertLength; /** * Writes an RtpPacket to a (provided) buffer * * @param packet Packet to write to buffer * @param buffer Optional buffer to write packet to * * If a buffer is not provided, a new buffer is allocated with the appropriate length. */ static toBuffer(packet: RtpPacket, buffer?: Buffer): Buffer; } /** * RTP Session * * Class representing a unique RTP stream, with a single SSRC. Manages sequence number and timestamp. */ export declare class RtpSession extends stream.Duplex { private readonly socket; static readonly DEFAULT_TIMESTAMP_PERIOD_NS = 125000; static readonly DEFAULT_BUFFER_SIZE = 1446; private readonly buffer; sequenceNumber: number; timestamp: number; ssrc: number; private time; private readonly timestampPeriod; constructor(socket: dgram.Socket, { timestampPeriod, bufferSize }: { timestampPeriod?: number; bufferSize?: number; }); newSequenceNumber(): number; newTimestamp(): number; regenerateSsrc(): void; private receive; _read(size: number): void; _write(packet: any, encoding: string, callback: (error?: (Error | null)) => void): void; _destroy(error: Error | null, callback: (error: (Error | null)) => void): void; } /** * RTP Packet Payload Data Stream * * Helper stream for reading/writing raw data to/from a specific payload type in an RTP session. */ export declare class RtpPacketPayloadStream extends stream.Duplex { private session; private readonly payloadType; private readonly buffer?; private bufferOffset?; private get bufferRemaining(); private readonly bufferHighWaterMark?; private readonly bufferTimeoutMs?; private bufferTimeout; constructor(session: RtpSession, payloadType: number, bufferOptions?: { bufferSize: number; bufferHighWaterMark: number; bufferTimeout: number; }); private send; private writeBuffer; private flushBuffer; _read(size: number): void; _write(chunk: any, encoding: string, callback: (error?: (Error | null)) => void): void; _final(callback: (error?: (Error | null)) => void): void; } export declare enum NtripRtpMessageType { DATA_STREAM = 96, HTTP = 97, CONNECTION_END = 98 } export declare class NtripRtpSession extends RtpSession { static readonly PACKET_MAX_SIZE = 1526; static readonly TIMESTAMP_PERIOD_NS = 125000; static readonly DATA_PACKET_MAX_CONTENT_SIZE = 1514; static readonly DATA_PACKET_HIGH_WATER_MARK: number; static readonly DATA_PACKET_TIMEOUT_MS = 50; constructor(socket: dgram.Socket); push(packet: RtpPacket, encoding?: BufferEncoding): boolean; _final(callback: (error?: (Error | null)) => void): void; readonly dataStream: RtpPacketPayloadStream; readonly httpStream: RtpPacketPayloadStream; }