UNPKG

rtp.js

Version:

RTP stack for Node.js and browser written in TypeScript

106 lines (105 loc) 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const EcnPacket_1 = require("../../../packets/RTCP/EcnPacket"); const FeedbackPacket_1 = require("../../../packets/RTCP/FeedbackPacket"); const RtcpPacket_1 = require("../../../packets/RTCP/RtcpPacket"); const helpers_1 = require("../../../utils/helpers"); const ecnPacketDump = { byteLength: 32, padding: 0, packetType: RtcpPacket_1.RtcpPacketType.RTPFB, count: 8, // Used to indicate FMT, so 8 for ECN. messageType: FeedbackPacket_1.RtpFeedbackMessageType.ECN, senderSsrc: 0x11223344, mediaSsrc: 0x55667788, extendedHighestSequenceNumber: 0x00110011, ect0Counter: 0x23324555, ect1Counter: 0x55441100, ecnCeCounter: 0x2222, nonEctCounter: 0x3333, lostPacketsCounter: 0xffaa, duplicationCounter: 0xbbcc, }; const array = new Uint8Array([ 0x88, 0xcd, 0x00, 0x07, // FMT: 8 (ECN), Type: 205 (RTPFB), Length: 7 0x11, 0x22, 0x33, 0x44, // Sender SSRC: 0x11223344 0x55, 0x66, 0x77, 0x88, // Media SSRC: 0x55667788 0x00, 0x11, 0x00, 0x11, // Extended Highest Sequence Number 0x23, 0x32, 0x45, 0x55, // ECT (0) Counter 0x55, 0x44, 0x11, 0x00, // ECT (1) Counter 0x22, 0x22, 0x33, 0x33, // ECN-CE Counter, not-ECT Counter 0xff, 0xaa, 0xbb, 0xcc, // Lost Packets Counter, Duplication Counter ]); const view = new DataView(array.buffer, array.byteOffset, array.byteLength); describe('parse RTCP ECN packet', () => { test('buffer view is RTCP', () => { expect((0, RtcpPacket_1.isRtcp)(view)).toBe(true); }); test('packet processing succeeds', () => { const packet = new EcnPacket_1.EcnPacket(view); expect(packet.needsSerialization()).toBe(false); expect(packet.dump()).toEqual(ecnPacketDump); expect((0, helpers_1.areDataViewsEqual)(packet.getView(), view)).toBe(true); packet.serialize(); expect(packet.needsSerialization()).toBe(false); expect(packet.dump()).toEqual(ecnPacketDump); expect((0, helpers_1.areDataViewsEqual)(packet.getView(), view)).toBe(true); const clonedPacket = packet.clone(); expect(clonedPacket.needsSerialization()).toBe(false); expect(clonedPacket.dump()).toEqual(ecnPacketDump); expect((0, helpers_1.areDataViewsEqual)(clonedPacket.getView(), view)).toBe(true); }); }); describe('create RTCP ECN packet', () => { const packet = new EcnPacket_1.EcnPacket(); test('packet view is RTCP', () => { expect((0, RtcpPacket_1.isRtcp)(packet.getView())).toBe(true); }); test('packet processing succeeds', () => { // No optional fields in this packet so serialization is never needed. packet.setSenderSsrc(ecnPacketDump.senderSsrc); packet.setMediaSsrc(ecnPacketDump.mediaSsrc); packet.setExtendedHighestSequenceNumber(ecnPacketDump.extendedHighestSequenceNumber); packet.setEct0Counter(ecnPacketDump.ect0Counter); packet.setEct1Counter(ecnPacketDump.ect1Counter); packet.setEcnCeCounter(ecnPacketDump.ecnCeCounter); packet.setNonEctCounter(ecnPacketDump.nonEctCounter); packet.setLostPacketsCounter(ecnPacketDump.lostPacketsCounter); packet.setDuplicationCounter(ecnPacketDump.duplicationCounter); expect(packet.needsSerialization()).toBe(false); expect(packet.dump()).toEqual(ecnPacketDump); expect((0, helpers_1.areDataViewsEqual)(packet.getView(), view)).toBe(true); packet.serialize(); expect(packet.needsSerialization()).toBe(false); expect(packet.dump()).toEqual(ecnPacketDump); expect((0, helpers_1.areDataViewsEqual)(packet.getView(), view)).toBe(true); const clonedPacket = packet.clone(); expect(clonedPacket.needsSerialization()).toBe(false); expect(clonedPacket.dump()).toEqual(ecnPacketDump); expect((0, helpers_1.areDataViewsEqual)(clonedPacket.getView(), view)).toBe(true); }); });