diff --git a/src/Packet.ts b/src/Packet.ts index 1405b8a..03985c4 100644 --- a/src/Packet.ts +++ b/src/Packet.ts @@ -22,7 +22,8 @@ export type PacketDump = SerializableDump & /** * Parent class of all RTP and RTCP packets. * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export abstract class Packet extends Serializable { diff --git a/src/RTCP/ByePacket.ts b/src/RTCP/ByePacket.ts index 37378fa..83b1302 100644 --- a/src/RTCP/ByePacket.ts +++ b/src/RTCP/ByePacket.ts @@ -11,6 +11,18 @@ import { } from '../utils'; /** + * RTCP BYE packet info dump. + */ +export type ByePacketDump = RtcpPacketDump & +{ + ssrcs: number[]; + reason?: string; +}; + +/** + * RTCP BYE 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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -22,21 +34,13 @@ import { * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ * (opt) | length | reason for leaving ... * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -/** - * RTCP BYE packet info dump. - */ -export type ByePacketDump = RtcpPacketDump & -{ - ssrcs: number[]; - reason?: string; -}; - -/** - * RTCP BYE packet. + * ``` + * + * @see + * - [RFC 3550 section 6.6](https://datatracker.ietf.org/doc/html/rfc3550#autoid-43) * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ByePacket extends RtcpPacket { diff --git a/src/RTCP/CompoundPacket.ts b/src/RTCP/CompoundPacket.ts index 53e9ef2..bcd3f7e 100644 --- a/src/RTCP/CompoundPacket.ts +++ b/src/RTCP/CompoundPacket.ts @@ -12,7 +12,7 @@ import { SenderReportPacket } from './SenderReportPacket'; import { ByePacket } from './ByePacket'; import { SdesPacket } from './SdesPacket'; import { XrPacket } from './XrPacket'; -import { UnknownPacket } from './UnknownPacket'; +import { GenericPacket } from './GenericPacket'; /** * RTCP Compound packet info dump. @@ -25,7 +25,11 @@ export type CompoundPacketDump = PacketDump & /** * RTCP Compound packet. * - * @emits will-serialize - {@link WillSerializeEvent} + * @see + * - [RFC 3550](https://datatracker.ietf.org/doc/html/rfc3550) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class CompoundPacket extends Packet { @@ -117,7 +121,7 @@ export class CompoundPacket extends Packet default: { - packet = new UnknownPacket(packetView); + packet = new GenericPacket(packetView); } } diff --git a/src/RTCP/ExtendedReports/ExtendedReport.ts b/src/RTCP/ExtendedReports/ExtendedReport.ts index 19b30f8..9a8d859 100644 --- a/src/RTCP/ExtendedReports/ExtendedReport.ts +++ b/src/RTCP/ExtendedReports/ExtendedReport.ts @@ -3,16 +3,6 @@ import { assertUnreachable } from '../../utils'; export const COMMON_HEADER_LENGTH = 4; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | BT | type-specific | block length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * : type-specific block contents : - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - /** * Extended Report types. */ @@ -153,9 +143,23 @@ export function reportTypeToString(reportType: ExtendedReportType): string } /** - * Parent class of all Extended Reports. + * Parent class of all {@link XrPacket} Extended Reports. + * + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | BT | type-specific | block length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * : type-specific block contents : + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3611 section 3](https://datatracker.ietf.org/doc/html/rfc3611#autoid-5) * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export abstract class ExtendedReport extends Serializable { diff --git a/src/RTCP/ExtendedReports/ExtendedReportDLRR.ts b/src/RTCP/ExtendedReports/ExtendedReportDLRR.ts index 9aad324..39dbe1a 100644 --- a/src/RTCP/ExtendedReports/ExtendedReportDLRR.ts +++ b/src/RTCP/ExtendedReports/ExtendedReportDLRR.ts @@ -5,24 +5,6 @@ import { COMMON_HEADER_LENGTH } from './ExtendedReport'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | BT=5 | reserved | block length | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * | SSRC_1 (SSRC of first receiver) | sub- - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block - * | last RR (LRR) | 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | delay since last RR (DLRR) | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * | SSRC_2 (SSRC of second receiver) | sub- - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block - * : ... : 2 - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - */ - /** * DLRR Extended Report dump. */ @@ -53,7 +35,29 @@ export type DLRRSubReport = /** * DLRR Extended Report. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | BT=5 | reserved | block length | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * | SSRC_1 (SSRC of first receiver) | sub- + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block + * | last RR (LRR) | 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | delay since last RR (DLRR) | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * | SSRC_2 (SSRC of second receiver) | sub- + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block + * : ... : 2 + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * ``` + * + * @see + * - [RFC 3611 section 4.5](https://datatracker.ietf.org/doc/html/rfc3611#autoid-14) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ExtendedReportDLRR extends ExtendedReport { diff --git a/src/RTCP/ExtendedReports/ExtendedReportDRLE.ts b/src/RTCP/ExtendedReports/ExtendedReportDRLE.ts index 1ae58ca..3fc0055 100644 --- a/src/RTCP/ExtendedReports/ExtendedReportDRLE.ts +++ b/src/RTCP/ExtendedReports/ExtendedReportDRLE.ts @@ -7,24 +7,6 @@ import { import { padTo4Bytes } from '../../utils'; import { readBitsInDataView, writeBitsInDataView } from '../../bitOps'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | BT=2 | rsvd. | T | block length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SSRC of source | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | begin_seq | end_seq | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | chunk 1 | chunk 2 | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * : ... : - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | chunk n-1 | chunk n | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - // Common header + SSRC of source + begin seq + end seq. const EXTENDED_REPORT_DRLE_MIN_LENGTH = COMMON_HEADER_LENGTH + 8; @@ -43,7 +25,29 @@ export type ExtendedReportDRLEDump = ExtendedReportDump & /** * Duplicate RLE Extended Report. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | BT=2 | rsvd. | T | block length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SSRC of source | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | begin_seq | end_seq | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | chunk 1 | chunk 2 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * : ... : + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | chunk n-1 | chunk n | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3611 section 4.2](https://datatracker.ietf.org/doc/html/rfc3611#autoid-11) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ExtendedReportDRLE extends ExtendedReport { diff --git a/src/RTCP/ExtendedReports/ExtendedReportLRLE.ts b/src/RTCP/ExtendedReports/ExtendedReportLRLE.ts index a912e61..843cb31 100644 --- a/src/RTCP/ExtendedReports/ExtendedReportLRLE.ts +++ b/src/RTCP/ExtendedReports/ExtendedReportLRLE.ts @@ -7,24 +7,6 @@ import { import { padTo4Bytes } from '../../utils'; import { readBitsInDataView, writeBitsInDataView } from '../../bitOps'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | BT=1 | rsvd. | T | block length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SSRC of source | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | begin_seq | end_seq | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | chunk 1 | chunk 2 | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * : ... : - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | chunk n-1 | chunk n | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - // Common header + SSRC of source + begin seq + end seq. const EXTENDED_REPORT_LRLE_MIN_LENGTH = COMMON_HEADER_LENGTH + 8; @@ -43,7 +25,29 @@ export type ExtendedReportLRLEDump = ExtendedReportDump & /** * Loss RLE Extended Report. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | BT=1 | rsvd. | T | block length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SSRC of source | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | begin_seq | end_seq | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | chunk 1 | chunk 2 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * : ... : + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | chunk n-1 | chunk n | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3611 section 4.1](https://datatracker.ietf.org/doc/html/rfc3611#autoid-7) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ExtendedReportLRLE extends ExtendedReport { diff --git a/src/RTCP/ExtendedReports/ExtendedReportPRT.ts b/src/RTCP/ExtendedReports/ExtendedReportPRT.ts index e4a2987..c8a725e 100644 --- a/src/RTCP/ExtendedReports/ExtendedReportPRT.ts +++ b/src/RTCP/ExtendedReports/ExtendedReportPRT.ts @@ -6,7 +6,25 @@ import { } from './ExtendedReport'; import { readBitsInDataView, writeBitsInDataView } from '../../bitOps'; +// Common header + SSRC of source + begin seq + end seq. +const EXTENDED_REPORT_PRT_MIN_LENGTH = COMMON_HEADER_LENGTH + 8; + /** + * Packet Receipt Times Extended Report dump. + */ +export type ExtendedReportPRTDump = ExtendedReportDump & +{ + thinning: number; + ssrc: number; + beginSeq: number; + endSeq: number; + receiptTimes: number[]; +}; + +/** + * Packet Receipt Times Extended Report. + * + * ```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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -24,27 +42,13 @@ import { readBitsInDataView, writeBitsInDataView } from '../../bitOps'; * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Receipt time of packet (end_seq - 1) mod 65536 | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -// Common header + SSRC of source + begin seq + end seq. -const EXTENDED_REPORT_PRT_MIN_LENGTH = COMMON_HEADER_LENGTH + 8; - -/** - * Packet Receipt Times Extended Report dump. - */ -export type ExtendedReportPRTDump = ExtendedReportDump & -{ - thinning: number; - ssrc: number; - beginSeq: number; - endSeq: number; - receiptTimes: number[]; -}; - -/** - * Packet Receipt Times Extended Report. + * ``` + * + * @see + * - [RFC 3611 section 4.3](https://datatracker.ietf.org/doc/html/rfc3611#autoid-12) * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ExtendedReportPRT extends ExtendedReport { diff --git a/src/RTCP/ExtendedReports/ExtendedReportRRT.ts b/src/RTCP/ExtendedReports/ExtendedReportRRT.ts index d604b0a..9b9a038 100644 --- a/src/RTCP/ExtendedReports/ExtendedReportRRT.ts +++ b/src/RTCP/ExtendedReports/ExtendedReportRRT.ts @@ -5,18 +5,6 @@ import { COMMON_HEADER_LENGTH } from './ExtendedReport'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | BT=4 | reserved | block length = 2 | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | NTP timestamp, most significant word | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | NTP timestamp, least significant word | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - // Common header + NTP timestamp. const EXTENDED_REPORT_RRT_LENGTH = COMMON_HEADER_LENGTH + 8; @@ -32,7 +20,23 @@ export type ExtendedReportRRTDump = ExtendedReportDump & /** * Receiver Reference Time Extended Report. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | BT=4 | reserved | block length = 2 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | NTP timestamp, most significant word | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | NTP timestamp, least significant word | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3611 section 4.4](https://datatracker.ietf.org/doc/html/rfc3611#autoid-13) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ExtendedReportRRT extends ExtendedReport { diff --git a/src/RTCP/ExtendedReports/ExtendedReportSS.ts b/src/RTCP/ExtendedReports/ExtendedReportSS.ts index e172b16..6c64673 100644 --- a/src/RTCP/ExtendedReports/ExtendedReportSS.ts +++ b/src/RTCP/ExtendedReports/ExtendedReportSS.ts @@ -11,32 +11,6 @@ import { writeBitsInDataView } from '../../bitOps'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | BT=6 |L|D|J|ToH|rsvd.| block length = 9 | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SSRC of source | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | begin_seq | end_seq | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | lost_packets | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | dup_packets | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | min_jitter | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | max_jitter | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | mean_jitter | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | dev_jitter | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | min_ttl_or_hl | max_ttl_or_hl |mean_ttl_or_hl | dev_ttl_or_hl | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - const EXTENDED_REPORT_SS_LENGTH = COMMON_HEADER_LENGTH + 36; /** @@ -63,7 +37,37 @@ export type ExtendedReportSSDump = ExtendedReportDump & /** * Statistics Summary Extended Report. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | BT=6 |L|D|J|ToH|rsvd.| block length = 9 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SSRC of source | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | begin_seq | end_seq | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | lost_packets | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | dup_packets | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | min_jitter | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | max_jitter | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | mean_jitter | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | dev_jitter | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | min_ttl_or_hl | max_ttl_or_hl |mean_ttl_or_hl | dev_ttl_or_hl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3611 section 4.6](https://datatracker.ietf.org/doc/html/rfc3611#autoid-15) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ExtendedReportSS extends ExtendedReport { diff --git a/src/RTCP/ExtendedReports/UnknownExtendedReport.ts b/src/RTCP/ExtendedReports/GenericExtendedReport.ts similarity index 87% rename from src/RTCP/ExtendedReports/UnknownExtendedReport.ts rename to src/RTCP/ExtendedReports/GenericExtendedReport.ts index e34a039..34815a7 100644 --- a/src/RTCP/ExtendedReports/UnknownExtendedReport.ts +++ b/src/RTCP/ExtendedReports/GenericExtendedReport.ts @@ -7,6 +7,14 @@ import { } from './ExtendedReport'; /** + * Generic Extended Report dump. + */ +export type GenericExtendedReportDump = ExtendedReportDump; + +/** + * Generic Extended Report. + * + * ```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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -16,30 +24,26 @@ import { * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * : ... : * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -/** - * Unknown Extended Report dump. - */ -export type UnknownExtendedReportDump = ExtendedReportDump; - -/** - * Unknown Extended Report. + * ``` + * + * @see + * - [RFC 3611 section 3](https://datatracker.ietf.org/doc/html/rfc3611#autoid-5) * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ -export class UnknownExtendedReport extends ExtendedReport +export class GenericExtendedReport extends ExtendedReport { // Buffer view holding the report body. #bodyView: DataView; /** - * @param view - If given it will be parsed. Otherwise an empty unknown + * @param view - If given it will be parsed. Otherwise an empty generic * Extended Report will be created. * @param reportType - If `view` is not given, this parameter must be given. * * @throws - * - If given `view` does not contain a valid unknown Extended Report. + * - If given `view` does not contain a valid generic Extended Report. */ constructor(view?: DataView, reportType?: ExtendedReportType | number) { @@ -96,9 +100,9 @@ export class UnknownExtendedReport extends ExtendedReport } /** - * Dump unknown Extended Report info. + * Dump generic Extended Report info. */ - dump(): UnknownExtendedReportDump + dump(): GenericExtendedReportDump { return super.dump(); } @@ -174,11 +178,11 @@ export class UnknownExtendedReport extends ExtendedReport /** * @inheritDoc */ - clone(buffer?: ArrayBuffer, byteOffset?: number): UnknownExtendedReport + clone(buffer?: ArrayBuffer, byteOffset?: number): GenericExtendedReport { const view = this.cloneInternal(buffer, byteOffset); - return new UnknownExtendedReport(view); + return new GenericExtendedReport(view); } /** diff --git a/src/RTCP/ExtendedReports/chunks.ts b/src/RTCP/ExtendedReports/chunks.ts index ddf6fa9..78036dc 100644 --- a/src/RTCP/ExtendedReports/chunks.ts +++ b/src/RTCP/ExtendedReports/chunks.ts @@ -2,6 +2,9 @@ import { readBit, writeBit } from '../../bitOps'; /** * Loss RLE and Duplicate RLE Extended Report chunk info. + * + * @see + * - [RFC 3611 section 4.1](https://datatracker.ietf.org/doc/html/rfc3611#autoid-7) */ export type ExtendedReportChunk = { @@ -25,6 +28,9 @@ export type ExtendedReportChunk = /** * Parse given 2 bytes number as a Extended Report chunk. + * + * @see + * - [RFC 3611 section 4.1](https://datatracker.ietf.org/doc/html/rfc3611#autoid-7) */ export function parseExtendedReportChunk(chunk: number): ExtendedReportChunk { @@ -59,6 +65,9 @@ export function parseExtendedReportChunk(chunk: number): ExtendedReportChunk /** * Create a Run Length Chunk and return a 2 bytes number representing it. + * + * @see + * - [RFC 3611 section 4.1.1](https://datatracker.ietf.org/doc/html/rfc3611#autoid-8) */ export function createExtendedReportRunLengthChunk( runType: 'zeros' | 'ones', @@ -82,6 +91,9 @@ export function createExtendedReportRunLengthChunk( /** * Create a Bit Vector Chunk and return a 2 bytes number representing it. + * + * @see + * - [RFC 3611 section 4.1.2](https://datatracker.ietf.org/doc/html/rfc3611#autoid-9) */ export function createExtendedReportBitVectorChunk(bitVector: number): number { diff --git a/src/RTCP/UnknownPacket.ts b/src/RTCP/GenericPacket.ts similarity index 90% rename from src/RTCP/UnknownPacket.ts rename to src/RTCP/GenericPacket.ts index b8bee05..398af71 100644 --- a/src/RTCP/UnknownPacket.ts +++ b/src/RTCP/GenericPacket.ts @@ -7,6 +7,17 @@ import { } from './RtcpPacket'; /** + * RTCP generic packet info dump. + */ +export type GenericPacketDump = RtcpPacketDump & +{ + bodyLength: number; +}; + +/** + * RTCP generic 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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -16,33 +27,26 @@ import { * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * : ... : * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -/** - * RTCP unknown packet info dump. - */ -export type UnknownPacketDump = RtcpPacketDump & -{ - bodyLength: number; -}; - -/** - * RTCP unknown packet. + * ``` + * + * @see + * - [RFC 3550](https://datatracker.ietf.org/doc/html/rfc3550) * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ -export class UnknownPacket extends RtcpPacket +export class GenericPacket extends RtcpPacket { // Buffer view holding the packet body. #bodyView: DataView; /** - * @param view - If given it will be parsed. Otherwise an empty RTCP unknown + * @param view - If given it will be parsed. Otherwise an empty RTCP generic * packet will be created. * @param packetType - If `view` is not given, this parameter must be given. * * @throws - * - If given `view` does not contain a valid RTCP unknown packet. + * - If given `view` does not contain a valid RTCP generic packet. */ constructor(view?: DataView, packetType?: RtcpPacketType | number) { @@ -104,9 +108,9 @@ export class UnknownPacket extends RtcpPacket } /** - * Dump RTCP unknown packet info. + * Dump RTCP generic packet info. */ - dump(): UnknownPacketDump + dump(): GenericPacketDump { return { ...super.dump(), @@ -191,11 +195,11 @@ export class UnknownPacket extends RtcpPacket /** * @inheritDoc */ - clone(buffer?: ArrayBuffer, byteOffset?: number): UnknownPacket + clone(buffer?: ArrayBuffer, byteOffset?: number): GenericPacket { const view = this.cloneInternal(buffer, byteOffset); - return new UnknownPacket(view); + return new GenericPacket(view); } /** diff --git a/src/RTCP/ReceiverReportPacket.ts b/src/RTCP/ReceiverReportPacket.ts index ea3a39c..470526c 100644 --- a/src/RTCP/ReceiverReportPacket.ts +++ b/src/RTCP/ReceiverReportPacket.ts @@ -6,34 +6,6 @@ import { } from './RtcpPacket'; import { Serializable, SerializableDump } from '../Serializable'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * header |V=2|P| RC | PT=RR=201 | length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SSRC of packet sender | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * report | SSRC_1 (SSRC of first source) | - * block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * 1 | fraction lost | cumulative number of packets lost | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | extended highest sequence number received | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | interarrival jitter | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | last SR (LSR) | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | delay since last SR (DLSR) | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * report | SSRC_2 (SSRC of second source) | - * block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * 2 : ... : - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * | profile-specific extensions | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - // Common RTCP header length + 4 (SSRC of packet sender). const FIXED_HEADER_LENGTH = COMMON_HEADER_LENGTH + 4; @@ -65,7 +37,39 @@ export type ReceptionReportDump = SerializableDump & /** * RTCP Receiver Report packet. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * header |V=2|P| RC | PT=RR=201 | length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SSRC of packet sender | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * report | SSRC_1 (SSRC of first source) | + * block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 1 | fraction lost | cumulative number of packets lost | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | extended highest sequence number received | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | interarrival jitter | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | last SR (LSR) | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | delay since last SR (DLSR) | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * report | SSRC_2 (SSRC of second source) | + * block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 2 : ... : + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * | profile-specific extensions | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3550 section 6.4.2](https://datatracker.ietf.org/doc/html/rfc3550#autoid-31) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class ReceiverReportPacket extends RtcpPacket { diff --git a/src/RTCP/RtcpPacket.ts b/src/RTCP/RtcpPacket.ts index de5d35f..3b6222b 100644 --- a/src/RTCP/RtcpPacket.ts +++ b/src/RTCP/RtcpPacket.ts @@ -182,9 +182,21 @@ function packetTypeToString(packetType: RtcpPacketType): string } /** - * Parent class of all RTCP packets. + * RTCP packet. Parent class of all RTCP packets. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * header |V=2|P| SC | PT | length | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * ``` + * + * @see + * - [RFC 3550 section 6.1](https://datatracker.ietf.org/doc/html/rfc3550#autoid-16) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export abstract class RtcpPacket extends Packet { diff --git a/src/RTCP/SdesPacket.ts b/src/RTCP/SdesPacket.ts index fd56a0c..a26ad3a 100644 --- a/src/RTCP/SdesPacket.ts +++ b/src/RTCP/SdesPacket.ts @@ -12,24 +12,6 @@ import { getStringByteLength } from '../utils'; -/** - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * header |V=2|P| SC | PT=SDES=202 | length | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * chunk | SSRC/CSRC_1 | - * 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SDES items | - * | ... | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - * chunk | SSRC/CSRC_2 | - * 2 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SDES items | - * | ... | - * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ - */ - // SSRC (4 bytes) + null type (1 byte) + padding (3 bytes). const SDES_CHUNK_MIN_LENGTH = 8; @@ -95,7 +77,29 @@ export type SdesChunkDump = SerializableDump & /** * RTCP SDES packet. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * header |V=2|P| SC | PT=SDES=202 | length | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * chunk | SSRC/CSRC_1 | + * 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SDES items | + * | ... | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * chunk | SSRC/CSRC_2 | + * 2 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SDES items | + * | ... | + * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ + * ``` + * + * @see + * - [RFC 3550 section 6.5](https://datatracker.ietf.org/doc/html/rfc3550#autoid-31) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class SdesPacket extends RtcpPacket { @@ -348,7 +352,8 @@ export class SdesPacket extends RtcpPacket /** * SDES Chunk. * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class SdesChunk extends Serializable { diff --git a/src/RTCP/SenderReportPacket.ts b/src/RTCP/SenderReportPacket.ts index 669655e..2e4d350 100644 --- a/src/RTCP/SenderReportPacket.ts +++ b/src/RTCP/SenderReportPacket.ts @@ -10,7 +10,27 @@ import { RECEPTION_REPORT_LENGTH } from './ReceiverReportPacket'; +// Common RTCP header length + 24. +const FIXED_HEADER_LENGTH = COMMON_HEADER_LENGTH + 24; + /** + * RTCP Sender Report packet info dump. + */ +export type SenderReportPacketDump = RtcpPacketDump & +{ + ssrc: number; + ntpSeq: number; + ntpFraction: number; + rtpTimestamp: number; + packetCount: number; + octetCount: number; + reports: ReceptionReportDump[]; +}; + +/** + * RTCP Sender Report 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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -46,29 +66,13 @@ import { * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ * | profile-specific extensions | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -// Common RTCP header length + 24. -const FIXED_HEADER_LENGTH = COMMON_HEADER_LENGTH + 24; - -/** - * RTCP Sender Report packet info dump. - */ -export type SenderReportPacketDump = RtcpPacketDump & -{ - ssrc: number; - ntpSeq: number; - ntpFraction: number; - rtpTimestamp: number; - packetCount: number; - octetCount: number; - reports: ReceptionReportDump[]; -}; - -/** - * RTCP Sender Report packet. + * ``` + * + * @see + * - [RFC 3550 section 6.4.1](https://datatracker.ietf.org/doc/html/rfc3550#autoid-31) * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class SenderReportPacket extends RtcpPacket { diff --git a/src/RTCP/XrPacket.ts b/src/RTCP/XrPacket.ts index 55ebe75..3fa67a2 100644 --- a/src/RTCP/XrPacket.ts +++ b/src/RTCP/XrPacket.ts @@ -11,7 +11,7 @@ import { ExtendedReportPRT } from './ExtendedReports/ExtendedReportPRT'; import { ExtendedReportRRT } from './ExtendedReports/ExtendedReportRRT'; import { ExtendedReportDLRR } from './ExtendedReports/ExtendedReportDLRR'; import { ExtendedReportSS } from './ExtendedReports/ExtendedReportSS'; -import { UnknownExtendedReport } from './ExtendedReports/UnknownExtendedReport'; +import { GenericExtendedReport } from './ExtendedReports/GenericExtendedReport'; import { RtcpPacket, RtcpPacketType, @@ -19,20 +19,6 @@ import { COMMON_HEADER_LENGTH } from './RtcpPacket'; -/* - * https://tools.ietf.org/html/rfc3611 - * - * 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 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * header |V=2|P|reserved | PT=XR=207 | length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | SSRC | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * report : report blocks : - * blocks +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - // Common RTCP header length + 4 (SSRC of packet sender). const FIXED_HEADER_LENGTH = COMMON_HEADER_LENGTH + 4; @@ -48,7 +34,24 @@ export type XrPacketDump = RtcpPacketDump & /** * RTCP XR packet. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * header |V=2|P|reserved | PT=XR=207 | length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | SSRC | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * report : report blocks : + * blocks +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3611 section 2](https://datatracker.ietf.org/doc/html/rfc3611#autoid-4) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class XrPacket extends RtcpPacket { @@ -154,7 +157,7 @@ export class XrPacket extends RtcpPacket default: { - report = new UnknownExtendedReport(reportView); + report = new GenericExtendedReport(reportView); } } diff --git a/src/RtpPacket.ts b/src/RtpPacket.ts index d3323de..e23f26c 100644 --- a/src/RtpPacket.ts +++ b/src/RtpPacket.ts @@ -44,7 +44,27 @@ export function isRtp(view: DataView): boolean /** * RTP packet. * - * @emits will-serialize - {@link WillSerializeEvent} + * ```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 | + * | .... | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ``` + * + * @see + * - [RFC 3550 section 5.1](https://datatracker.ietf.org/doc/html/rfc3550#autoid-11) + * - [RFC 5285 section 4](https://datatracker.ietf.org/doc/html/rfc5285#autoid-4) + * + * @emits + * - will-serialize: {@link WillSerializeEvent} */ export class RtpPacket extends Packet { diff --git a/src/Serializable.ts b/src/Serializable.ts index f7f6109..3a8889d 100644 --- a/src/Serializable.ts +++ b/src/Serializable.ts @@ -49,7 +49,8 @@ type SerializableEvents = /** * Class holding a serializable buffer view. * - * @emits will-serialize - {@link WillSerializeEvent} + * @emits + * - will-serialize: {@link WillSerializeEvent} * */ export abstract class Serializable extends EnhancedEventEmitter diff --git a/src/index.ts b/src/index.ts index 6239f43..41cbeda 100644 --- a/src/index.ts +++ b/src/index.ts @@ -97,9 +97,9 @@ export { } from './RTCP/ExtendedReports/ExtendedReportSS'; export { - UnknownExtendedReport, - UnknownExtendedReportDump -} from './RTCP/ExtendedReports/UnknownExtendedReport'; + GenericExtendedReport, + GenericExtendedReportDump +} from './RTCP/ExtendedReports/GenericExtendedReport'; export { ExtendedReportChunk, @@ -109,9 +109,9 @@ export { } from './RTCP/ExtendedReports/chunks'; export { - UnknownPacket, - UnknownPacketDump -} from './RTCP/UnknownPacket'; + GenericPacket, + GenericPacketDump +} from './RTCP/GenericPacket'; import { nodeBufferToDataView, diff --git a/src/tests/RTCP/CompoundPacket.test.ts b/src/tests/RTCP/CompoundPacket.test.ts index 0aa35e4..46541a6 100644 --- a/src/tests/RTCP/CompoundPacket.test.ts +++ b/src/tests/RTCP/CompoundPacket.test.ts @@ -5,7 +5,7 @@ import { SenderReportPacket } from '../../RTCP/SenderReportPacket'; import { ByePacket } from '../../RTCP/ByePacket'; import { SdesPacket } from '../../RTCP/SdesPacket'; import { XrPacket } from '../../RTCP/XrPacket'; -import { UnknownPacket } from '../../RTCP/UnknownPacket'; +import { GenericPacket } from '../../RTCP/GenericPacket'; import { areDataViewsEqual, numericArrayToDataView } from '../../utils'; describe('parse RTCP Compound packet', () => @@ -53,7 +53,7 @@ describe('parse RTCP Compound packet', () => 0x61, 0x20, 0x76, 0x69, 0x73, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x04, // Padding (4 bytes) - /* (packet 4) Unknown packet */ + /* (packet 4) Generic packet */ 0xa2, 0xc1, 0x00, 0x03, // Padding, Type: 193 (unknown), Count: 2, length: 3 0x11, 0x22, 0x33, 0x44, // Body 0x55, 0x66, 0x77, 0x88, @@ -131,7 +131,7 @@ describe('parse RTCP Compound packet', () => expect(packet3.getSsrcs()).toEqual([ 0x624276e0, 0x2624670e ]); expect(packet3.getReason()).toBe('Hasta la vista'); - const packet4 = compoundPacket.getPackets()[3] as UnknownPacket; + const packet4 = compoundPacket.getPackets()[3] as GenericPacket; expect(packet4.needsSerialization()).toBe(false); expect(packet4.getByteLength()).toBe(16); @@ -218,7 +218,7 @@ describe('parse RTCP Compound packet', () => expect(packet3B.getSsrcs()).toEqual([ 0x624276e0, 0x2624670e ]); expect(packet3B.getReason()).toBe('Hasta la vista'); - const packet4B = compoundPacket.getPackets()[3] as UnknownPacket; + const packet4B = compoundPacket.getPackets()[3] as GenericPacket; expect(packet4B.needsSerialization()).toBe(false); expect(packet4B.getByteLength()).toBe(16); @@ -325,7 +325,7 @@ describe('create RTCP Compound packet', () => const compoundPacket = new CompoundPacket(); const packet1 = new ReceiverReportPacket(); - const packet2 = new UnknownPacket(undefined, 199); + const packet2 = new GenericPacket(undefined, 199); const packet3 = new SenderReportPacket(); compoundPacket.addPacket(packet1); diff --git a/src/tests/RTCP/UnknownPacket.test.ts b/src/tests/RTCP/GenericPacket.test.ts similarity index 90% rename from src/tests/RTCP/UnknownPacket.test.ts rename to src/tests/RTCP/GenericPacket.test.ts index 5609cda..0c4bc98 100644 --- a/src/tests/RTCP/UnknownPacket.test.ts +++ b/src/tests/RTCP/GenericPacket.test.ts @@ -1,8 +1,8 @@ -import { UnknownPacket } from '../../RTCP/UnknownPacket'; +import { GenericPacket } from '../../RTCP/GenericPacket'; import { isRtcp } from '../../RTCP/RtcpPacket'; import { areDataViewsEqual, numericArrayToDataView } from '../../utils'; -describe('parse RTCP unknown packet', () => +describe('parse RTCP generic packet', () => { const array = new Uint8Array( [ @@ -25,7 +25,7 @@ describe('parse RTCP unknown packet', () => test('packet processing succeeds', () => { - const packet = new UnknownPacket(view); + const packet = new GenericPacket(view); expect(packet.needsSerialization()).toBe(false); expect(packet.getByteLength()).toBe(12); @@ -55,7 +55,7 @@ describe('parse RTCP unknown packet', () => array2.byteLength ); - const packet = new UnknownPacket(view2); + const packet = new GenericPacket(view2); expect(packet.needsSerialization()).toBe(false); expect(packet.getByteLength()).toBe(16); @@ -92,22 +92,22 @@ describe('parse RTCP unknown packet', () => 8 ); - expect(() => (new UnknownPacket(view3))) + expect(() => (new GenericPacket(view3))) .toThrowError(RangeError); }); }); -describe('create RTCP unknown packet', () => +describe('create RTCP generic packet', () => { - test('creating a unknown packet without view and packet type throws', () => + test('creating a generic packet without view and packet type throws', () => { - expect(() => (new UnknownPacket())) + expect(() => (new GenericPacket())) .toThrowError(TypeError); }); - test('creating a unknown packet with padding succeeds', () => + test('creating a generic packet with padding succeeds', () => { - const packet = new UnknownPacket(undefined, 199); + const packet = new GenericPacket(undefined, 199); expect(isRtcp(packet.getView())).toBe(true); expect(packet.needsSerialization()).toBe(false); @@ -170,7 +170,7 @@ describe('create RTCP unknown packet', () => array.byteLength ); - const packet = new UnknownPacket(view); + const packet = new GenericPacket(view); const clonedPacket = packet.clone(); expect(clonedPacket.needsSerialization()).toBe(false); diff --git a/tsconfig.json b/tsconfig.json index 8db54dd..966cad1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,8 +21,6 @@ "excludeNotDocumented": true, "excludeInternal": true, "includeVersion": true, - "plugin": [ "sonicware-tdt" ], - "theme": "sonicware", "gitRemote": "origin", "hideGenerator": false, "titleLink": "https://versatica.github.io/rtp.js",