rtp.js
Version:
RTP stack for Node.js and browser written in TypeScript
332 lines • 10.4 kB
TypeScript
import { Packet, type PacketDump } from '../Packet';
import { type RtpExtensionMapping, type SsrcAudioLevelExtension, type VideoOrientationExtension } from './rtpExtensions';
/**
* RTP packet info dump.
*
* @category RTP
*/
export type RtpPacketDump = PacketDump & {
payloadType: number;
sequenceNumber: number;
timestamp: number;
ssrc: number;
csrcs: number[];
marker: boolean;
headerExtensionId?: number;
extensions: {
id: number;
length: number;
}[];
midExt?: string;
ridExt?: string;
repairedRidExt?: string;
absSendTimeExt?: number;
transportWideSeqNumberExt?: number;
ssrcAudioLevelExt?: SsrcAudioLevelExtension;
videoOrientationExt?: VideoOrientationExtension;
transmissionOffsetExt?: number;
payloadLength: number;
};
/**
* Whether the given buffer view could be a valid RTP packet or not.
*
* @category RTP
*/
export declare function isRtp(view: DataView): boolean;
/**
* RTP packet.
*
* ```text
* 0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* |V=2|P|X| CC |M| PT | sequence number |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | timestamp |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | synchronization source (SSRC) identifier |
* +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
* | contributing source (CSRC) identifiers |
* | .... |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | defined by profile | length |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | header extension |
* | .... |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* ```
*
* @category RTP
*
* @see
* - [RFC 3550 section 5.1](https://datatracker.ietf.org/doc/html/rfc3550#section-5.1)
* - [RFC 5285 section 4](https://datatracker.ietf.org/doc/html/rfc5285#section-4)
*/
export declare class RtpPacket extends Packet {
#private;
/**
* @param view - If given it will be parsed. Otherwise an empty RTP packet
* (with just the minimal fixed header) will be created.
*
* @throws
* - If `view` is given and it does not contain a valid RTP packet.
*/
constructor(view?: DataView);
/**
* Dump RTP packet info.
*/
dump(): RtpPacketDump;
/**
* @inheritDoc
*/
getByteLength(): number;
/**
* @inheritDoc
*/
serialize(buffer?: ArrayBufferLike, byteOffset?: number): void;
/**
* @inheritDoc
*/
clone(buffer?: ArrayBufferLike, byteOffset?: number, serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number): RtpPacket;
/**
* Get the RTP payload type.
*/
getPayloadType(): number;
/**
* Set the RTP payload type.
*/
setPayloadType(payloadType: number): void;
/**
* Get the RTP sequence number.
*/
getSequenceNumber(): number;
/**
* Set the RTP sequence number.
*/
setSequenceNumber(sequenceNumber: number): void;
/**
* Get the RTP timestamp.
*/
getTimestamp(): number;
/**
* Set the RTP timestamp.
*/
setTimestamp(timestamp: number): void;
/**
* Get the RTP SSRC.
*/
getSsrc(): number;
/**
* Set the RTP SSRC.
*/
setSsrc(ssrc: number): void;
/**
* Get the RTP CSRC values.
*/
getCsrcs(): number[];
/**
* Set the RTP CSRC values. If `csrcs` is not given (or if it's an empty
* array) CSRC field will be removed from the RTP packet.
*
* @remarks
* - Serialization is needed after calling this method.
*/
setCsrcs(csrcs?: number[]): void;
/**
* Get the RTP marker flag.
*/
getMarker(): boolean;
/**
* Set the RTP marker flag.
*/
setMarker(flag: boolean): void;
/**
* Whether One-Byte extensions (as per RFC 5285) are enabled.
*/
hasOneByteExtensions(): boolean;
/**
* Whether Two-Bytes extensions (as per RFC 5285) are enabled.
*/
hasTwoBytesExtensions(): boolean;
/**
* Enable One-Byte extensions (RFC 5285).
*
* @remarks
* - Serialization maybe needed after calling this method.
*/
enableOneByteExtensions(): void;
/**
* Enable Two-Bytes extensions (RFC 5285).
*
* @remarks
* - Serialization maybe needed after calling this method.
*/
enableTwoBytesExtensions(): void;
/**
* Get a map with all the extensions indexed by their extension id (RFC 5285).
*/
getExtensions(): Map<number, DataView>;
/**
* Get the value of the extension with given id (RFC 5285).
*/
getExtension(id: number): DataView | undefined;
/**
* Set the value of the extension with given id (RFC 5285).
*
* @remarks
* - Serialization is needed after calling this method.
*/
setExtension(id: number, value: DataView): void;
/**
* Delete the extension with given id (RFC 5285).
*
* @remarks
* - Serialization maybe needed after calling this method.
*/
deleteExtension(id: number): void;
/**
* Clear all extensions (RFC 5285).
*
* @remarks
* - Serialization maybe needed after calling this method.
*/
clearExtensions(): void;
/**
* Get RTP extension mapping (association of RTP extension types and their
* numeric ids in this RTP packet).
*/
getExtensionMapping(): RtpExtensionMapping;
/**
* Set RTP extension mapping (association of RTP extension types and their
* numeric ids in this RTP packet).
*
* @remarks
* - Calling this method is needed before using other methods that read or
* write specific RTP extensions.
*/
setExtensionMapping(extensionMapping: RtpExtensionMapping): void;
/**
* Read the value of the {@link RtpExtensionType.MID} RTP extension.
*/
getMidExtension(): string | undefined;
/**
* Set the value of the {@link RtpExtensionType.MID} RTP extension.
*/
setMidExtension(mid?: string): void;
/**
* Read the value of the {@link RtpExtensionType.RTP_STREAM_ID} RTP
* extension.
*/
getRidExtension(): string | undefined;
/**
* Set the value of the {@link RtpExtensionType.RTP_STREAM_ID} RTP
* extension.
*/
setRidExtension(rid?: string): void;
/**
* Read the value of the {@link RtpExtensionType.RTP_REPAIRED_STREAM_ID} RTP
* extension.
*/
getRepairedRidExtension(): string | undefined;
/**
* Set the value of the {@link RtpExtensionType.RTP_REPAIRED_STREAM_ID} RTP
* extension.
*/
setRepairedRidExtension(rrid?: string): void;
/**
* Read the value of the {@link RtpExtensionType.ABS_SEND_TIME} RTP
* extension.
*
* @remarks
* - Returned value is "Absolute Send Time" format. See
* {@link timeMsToAbsSendTime}.
*/
getAbsSendTimeExtension(): number | undefined;
/**
* Set the value of the {@link RtpExtensionType.ABS_SEND_TIME} RTP
* extension.
*
* @remarks
* - Given `absSendTime` must be in "Absolute Send Time" format. See
* {@link timeMsToAbsSendTime}.
*/
setAbsSendTimeExtension(absSendTime?: number): void;
/**
* Read the value of the {@link RtpExtensionType.TRANSPORT_WIDE_SEQ_NUMBER}
* RTP extension.
*/
getTransportWideSeqNumberExtension(): number | undefined;
/**
* Set the value of the {@link RtpExtensionType.TRANSPORT_WIDE_SEQ_NUMBER}
* RTP extension.
*/
setTransportWideSeqNumberExtension(sequenceNumber?: number): void;
/**
* Read the value of the {@link RtpExtensionType.SSRC_AUDIO_LEVEL} RTP
* extension.
*/
getSsrcAudioLevelExtension(): SsrcAudioLevelExtension | undefined;
/**
* Set the value of the {@link RtpExtensionType.SSRC_AUDIO_LEVEL} RTP
* extension.
*/
setSsrcAudioLevelExtension(ssrcAudioLevel?: SsrcAudioLevelExtension): void;
/**
* Read the value of the {@link RtpExtensionType.VIDEO_ORIENTATION} RTP
* extension.
*/
getVideoOrientationExtension(): VideoOrientationExtension | undefined;
/**
* Set the value of the {@link RtpExtensionType.VIDEO_ORIENTATION} RTP
* extension.
*/
setVideoOrientationExtension(videoOrientation?: VideoOrientationExtension): void;
/**
* Read the value of the {@link RtpExtensionType.TOFFSET} RTP extension.
*/
getTransmissionOffsetExtension(): number | undefined;
/**
* Set the value of the {@link RtpExtensionType.TOFFSET} RTP extension.
*/
setTransmissionOffsetExtension(offset?: number): void;
/**
* Get the packet payload.
*/
getPayload(): DataView;
/**
* Set the packet payload.
*
* @remarks
* - Serialization is needed after calling this method.
*/
setPayload(view: DataView): void;
/**
* Encode the packet using RTX procedures (as per RFC 4588).
*
* @param payloadType - The RTX payload type.
* @param ssrc - The RTX SSRC.
* @param sequenceNumber - The RTX sequence number.
*
* @remarks
* - Serialization is needed after calling this method.
*/
rtxEncode(payloadType: number, ssrc: number, sequenceNumber: number): void;
/**
* Decode the packet using RTX procedures (as per RFC 4588).
*
* @param payloadType - The original payload type.
* @param ssrc - The original SSRC.
*
* @remarks
* - Serialization is needed after calling this method.
*
* @throws
* - If payload length is less than 2 bytes, so RTX decode is not possible.
*/
rtxDecode(payloadType: number, ssrc: number): void;
private hasHeaderExtensionBit;
private setHeaderExtensionBit;
private getCsrcCount;
private setCsrcCount;
}
//# sourceMappingURL=RtpPacket.d.ts.map