@ntrip/caster
Version:
NTRIP caster
129 lines (128 loc) • 4.25 kB
TypeScript
/// <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;
}