werift 0.15.2 → 0.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/lib/common/src/index.js +5 -1
  2. package/lib/common/src/index.js.map +1 -1
  3. package/lib/dtls/src/cipher/namedCurve.js +5 -1
  4. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  5. package/lib/dtls/src/cipher/prf.js +5 -1
  6. package/lib/dtls/src/cipher/prf.js.map +1 -1
  7. package/lib/dtls/src/cipher/suites/aead.js +5 -1
  8. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  9. package/lib/dtls/src/context/cipher.js +5 -1
  10. package/lib/dtls/src/context/cipher.js.map +1 -1
  11. package/lib/ice/src/ice.js +8 -3
  12. package/lib/ice/src/ice.js.map +1 -1
  13. package/lib/ice/src/index.js +5 -1
  14. package/lib/ice/src/index.js.map +1 -1
  15. package/lib/ice/src/stun/attributes.js +5 -1
  16. package/lib/ice/src/stun/attributes.js.map +1 -1
  17. package/lib/rtp/src/container/webm.js +5 -1
  18. package/lib/rtp/src/container/webm.js.map +1 -1
  19. package/lib/rtp/src/index.js +5 -1
  20. package/lib/rtp/src/index.js.map +1 -1
  21. package/lib/webrtc/src/index.js +5 -1
  22. package/lib/webrtc/src/index.js.map +1 -1
  23. package/lib/webrtc/src/media/rtpSender.js +5 -1
  24. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  25. package/lib/webrtc/src/media/rtpTransceiver.js +5 -1
  26. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  27. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +5 -1
  28. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  29. package/lib/webrtc/src/peerConnection.js +5 -1
  30. package/lib/webrtc/src/peerConnection.js.map +1 -1
  31. package/lib/webrtc/src/transport/sctp.js +5 -1
  32. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  33. package/package.json +9 -19
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../../../ice/src/stun/attributes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Int64BE } from \"int64-buffer\";\nimport * as nodeIp from \"ip\";\nimport { jspack } from \"jspack\";\nimport range from \"lodash/range\";\n\nimport { Address } from \"../types/model\";\nimport { AttributeKeys, COOKIE, IPV4_PROTOCOL, IPV6_PROTOCOL } from \"./const\";\n\nfunction packAddress(value: Address) {\n const [address] = value;\n\n const protocol = nodeIp.isV4Format(address) ? IPV4_PROTOCOL : IPV6_PROTOCOL;\n\n return Buffer.concat([\n Buffer.from(jspack.Pack(\"!BBH\", [0, protocol, value[1]])),\n nodeIp.toBuffer(address),\n ]);\n}\n\nexport function unpackErrorCode(data: Buffer): [number, string] {\n if (data.length < 4) throw new Error(\"STUN error code is less than 4 bytes\");\n const [, codeHigh, codeLow] = jspack.Unpack(\"!HBB\", data.slice(0, 4));\n const reason = data.slice(4).toString(\"utf8\");\n return [codeHigh * 100 + codeLow, reason];\n}\n\nfunction unpackAddress(data: Buffer): Address {\n if (data.length < 4)\n throw new Error(\"STUN address length is less than 4 bytes\");\n const [, protocol, port] = jspack.Unpack(\"!BBH\", data.slice(0, 4));\n const address = data.slice(4);\n switch (protocol) {\n case IPV4_PROTOCOL:\n if (address.length != 4)\n throw new Error(`STUN address has invalid length for IPv4`);\n return [nodeIp.toString(address), port];\n case IPV6_PROTOCOL:\n if (address.length != 16)\n throw new Error(\"STUN address has invalid length for IPv6\");\n return [nodeIp.toString(address), port];\n default:\n throw new Error(\"STUN address has unknown protocol\");\n }\n}\n\nfunction xorAddress(data: Buffer, transactionId: Buffer) {\n const xPad = [\n ...jspack.Pack(\"!HI\", [COOKIE >> 16, COOKIE]),\n ...transactionId,\n ];\n let xData = data.slice(0, 2);\n\n for (const i of range(2, data.length)) {\n const num = data[i] ^ xPad[i - 2];\n const buf = Buffer.alloc(1);\n buf.writeUIntBE(num, 0, 1);\n xData = Buffer.concat([xData, buf]);\n }\n return xData;\n}\n\nexport function unpackXorAddress(data: Buffer, transactionId: Buffer): Address {\n return unpackAddress(xorAddress(data, transactionId));\n}\n\nexport function packErrorCode(value: [number, string]) {\n const pack = Buffer.from(\n jspack.Pack(\"!HBB\", [0, Math.floor(value[0] / 100), value[0] % 100])\n );\n const encode = Buffer.from(value[1], \"utf8\");\n return Buffer.concat([pack, encode]);\n}\n\nexport function packXorAddress(value: Address, transactionId: Buffer) {\n return xorAddress(packAddress(value), transactionId);\n}\n\nconst packUnsigned = (value: number) => Buffer.from(jspack.Pack(\"!I\", [value]));\nconst unpackUnsigned = (data: Buffer) => jspack.Unpack(\"!I\", data)[0];\n\nconst packUnsignedShort = (value: number) =>\n Buffer.concat([\n Buffer.from(jspack.Pack(\"!H\", [value])),\n Buffer.from(\"\\x00\\x00\"),\n ]);\nconst unpackUnsignedShort = (data: Buffer) =>\n jspack.Unpack(\"!H\", data.slice(0, 2))[0];\n\nconst packUnsigned64 = (value: BigInt) => {\n return new Int64BE(value.toString()).toBuffer();\n};\nconst unpackUnsigned64 = (data: Buffer) => {\n const int = new Int64BE(data);\n return BigInt(int.toString());\n};\n\nconst packString = (value: string) => Buffer.from(value, \"utf8\");\nconst unpackString = (data: Buffer) => data.toString(\"utf8\");\n\nconst packBytes = (value: Buffer) => value;\nconst unpackBytes = (data: Buffer) => data;\n\nconst packNone = (value: Buffer) => Buffer.from([]);\nconst unpackNone = (data: Buffer) => null;\n\nexport type ATTRIBUTE = [\n number,\n AttributeKey,\n (...args: any) => Buffer,\n (...args: any) => any\n];\n\nconst ATTRIBUTES: ATTRIBUTE[] = [\n [0x0001, \"MAPPED-ADDRESS\", packAddress, unpackAddress],\n [0x0003, \"CHANGE-REQUEST\", packUnsigned, unpackUnsigned],\n [0x0004, \"SOURCE-ADDRESS\", packAddress, unpackAddress],\n [0x0005, \"CHANGED-ADDRESS\", packAddress, unpackAddress],\n [0x0006, \"USERNAME\", packString, unpackString],\n [0x0008, \"MESSAGE-INTEGRITY\", packBytes, unpackBytes],\n [0x0009, \"ERROR-CODE\", packErrorCode, unpackErrorCode],\n [0x000c, \"CHANNEL-NUMBER\", packUnsignedShort, unpackUnsignedShort],\n [0x000d, \"LIFETIME\", packUnsigned, unpackUnsigned],\n [0x0012, \"XOR-PEER-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0013, \"DATA\", packBytes, unpackBytes],\n [0x0014, \"REALM\", packString, unpackString],\n [0x0015, \"NONCE\", packBytes, unpackBytes],\n [0x0016, \"XOR-RELAYED-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0019, \"REQUESTED-TRANSPORT\", packUnsigned, unpackUnsigned],\n [0x0020, \"XOR-MAPPED-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0024, \"PRIORITY\", packUnsigned, unpackUnsigned],\n [0x0025, \"USE-CANDIDATE\", packNone, unpackNone],\n [0x8022, \"SOFTWARE\", packString, unpackString],\n [0x8028, \"FINGERPRINT\", packUnsigned, unpackUnsigned],\n [0x8029, \"ICE-CONTROLLED\", packUnsigned64, unpackUnsigned64],\n [0x802a, \"ICE-CONTROLLING\", packUnsigned64, unpackUnsigned64],\n [0x802b, \"RESPONSE-ORIGIN\", packAddress, unpackAddress],\n [0x802c, \"OTHER-ADDRESS\", packAddress, unpackAddress],\n];\n\nexport class AttributeRepository {\n constructor(protected attributes: AttributePair[] = []) {}\n\n getAttributes() {\n return this.attributes;\n }\n\n setAttribute(key: typeof AttributeKeys[number], value: any) {\n const exist = this.attributes.find((a) => a[0] === key);\n if (exist) {\n exist[1] = value;\n } else {\n this.attributes.push([key, value]);\n }\n return this;\n }\n\n getAttributeValue(key: AttributeKey) {\n const attribute = this.attributes.find((a) => a[0] === key);\n if (!attribute) {\n return undefined;\n }\n return attribute[1];\n }\n\n get attributesKeys(): typeof AttributeKeys[number][] {\n return this.attributes.map((a) => a[0]);\n }\n\n clear() {\n this.attributes = [];\n }\n}\n\nexport type AttributeKey = typeof AttributeKeys[number];\n\nexport type AttributePair = [AttributeKey, any];\n\nexport const ATTRIBUTES_BY_TYPE = ATTRIBUTES.reduce((acc, cur) => {\n acc[cur[0]] = cur;\n return acc;\n}, {} as { [key: string]: ATTRIBUTE });\n\nexport const ATTRIBUTES_BY_NAME = ATTRIBUTES.reduce((acc, cur) => {\n acc[cur[1]] = cur;\n return acc;\n}, {} as { [key: string]: ATTRIBUTE });\n"]}
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../../../ice/src/stun/attributes.ts"],"names":[],"mappings":"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","sourcesContent":["import { Int64BE } from \"int64-buffer\";\nimport * as nodeIp from \"ip\";\nimport { jspack } from \"jspack\";\nimport range from \"lodash/range\";\n\nimport { Address } from \"../types/model\";\nimport { AttributeKeys, COOKIE, IPV4_PROTOCOL, IPV6_PROTOCOL } from \"./const\";\n\nfunction packAddress(value: Address) {\n const [address] = value;\n\n const protocol = nodeIp.isV4Format(address) ? IPV4_PROTOCOL : IPV6_PROTOCOL;\n\n return Buffer.concat([\n Buffer.from(jspack.Pack(\"!BBH\", [0, protocol, value[1]])),\n nodeIp.toBuffer(address),\n ]);\n}\n\nexport function unpackErrorCode(data: Buffer): [number, string] {\n if (data.length < 4) throw new Error(\"STUN error code is less than 4 bytes\");\n const [, codeHigh, codeLow] = jspack.Unpack(\"!HBB\", data.slice(0, 4));\n const reason = data.slice(4).toString(\"utf8\");\n return [codeHigh * 100 + codeLow, reason];\n}\n\nfunction unpackAddress(data: Buffer): Address {\n if (data.length < 4)\n throw new Error(\"STUN address length is less than 4 bytes\");\n const [, protocol, port] = jspack.Unpack(\"!BBH\", data.slice(0, 4));\n const address = data.slice(4);\n switch (protocol) {\n case IPV4_PROTOCOL:\n if (address.length != 4)\n throw new Error(`STUN address has invalid length for IPv4`);\n return [nodeIp.toString(address), port];\n case IPV6_PROTOCOL:\n if (address.length != 16)\n throw new Error(\"STUN address has invalid length for IPv6\");\n return [nodeIp.toString(address), port];\n default:\n throw new Error(\"STUN address has unknown protocol\");\n }\n}\n\nfunction xorAddress(data: Buffer, transactionId: Buffer) {\n const xPad = [\n ...jspack.Pack(\"!HI\", [COOKIE >> 16, COOKIE]),\n ...transactionId,\n ];\n let xData = data.slice(0, 2);\n\n for (const i of range(2, data.length)) {\n const num = data[i] ^ xPad[i - 2];\n const buf = Buffer.alloc(1);\n buf.writeUIntBE(num, 0, 1);\n xData = Buffer.concat([xData, buf]);\n }\n return xData;\n}\n\nexport function unpackXorAddress(data: Buffer, transactionId: Buffer): Address {\n return unpackAddress(xorAddress(data, transactionId));\n}\n\nexport function packErrorCode(value: [number, string]) {\n const pack = Buffer.from(\n jspack.Pack(\"!HBB\", [0, Math.floor(value[0] / 100), value[0] % 100])\n );\n const encode = Buffer.from(value[1], \"utf8\");\n return Buffer.concat([pack, encode]);\n}\n\nexport function packXorAddress(value: Address, transactionId: Buffer) {\n return xorAddress(packAddress(value), transactionId);\n}\n\nconst packUnsigned = (value: number) => Buffer.from(jspack.Pack(\"!I\", [value]));\nconst unpackUnsigned = (data: Buffer) => jspack.Unpack(\"!I\", data)[0];\n\nconst packUnsignedShort = (value: number) =>\n Buffer.concat([\n Buffer.from(jspack.Pack(\"!H\", [value])),\n Buffer.from(\"\\x00\\x00\"),\n ]);\nconst unpackUnsignedShort = (data: Buffer) =>\n jspack.Unpack(\"!H\", data.slice(0, 2))[0];\n\nconst packUnsigned64 = (value: BigInt) => {\n return new Int64BE(value.toString()).toBuffer();\n};\nconst unpackUnsigned64 = (data: Buffer) => {\n const int = new Int64BE(data);\n return BigInt(int.toString());\n};\n\nconst packString = (value: string) => Buffer.from(value, \"utf8\");\nconst unpackString = (data: Buffer) => data.toString(\"utf8\");\n\nconst packBytes = (value: Buffer) => value;\nconst unpackBytes = (data: Buffer) => data;\n\nconst packNone = (value: Buffer) => Buffer.from([]);\nconst unpackNone = (data: Buffer) => null;\n\nexport type ATTRIBUTE = [\n number,\n AttributeKey,\n (...args: any) => Buffer,\n (...args: any) => any\n];\n\nconst ATTRIBUTES: ATTRIBUTE[] = [\n [0x0001, \"MAPPED-ADDRESS\", packAddress, unpackAddress],\n [0x0003, \"CHANGE-REQUEST\", packUnsigned, unpackUnsigned],\n [0x0004, \"SOURCE-ADDRESS\", packAddress, unpackAddress],\n [0x0005, \"CHANGED-ADDRESS\", packAddress, unpackAddress],\n [0x0006, \"USERNAME\", packString, unpackString],\n [0x0008, \"MESSAGE-INTEGRITY\", packBytes, unpackBytes],\n [0x0009, \"ERROR-CODE\", packErrorCode, unpackErrorCode],\n [0x000c, \"CHANNEL-NUMBER\", packUnsignedShort, unpackUnsignedShort],\n [0x000d, \"LIFETIME\", packUnsigned, unpackUnsigned],\n [0x0012, \"XOR-PEER-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0013, \"DATA\", packBytes, unpackBytes],\n [0x0014, \"REALM\", packString, unpackString],\n [0x0015, \"NONCE\", packBytes, unpackBytes],\n [0x0016, \"XOR-RELAYED-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0019, \"REQUESTED-TRANSPORT\", packUnsigned, unpackUnsigned],\n [0x0020, \"XOR-MAPPED-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0024, \"PRIORITY\", packUnsigned, unpackUnsigned],\n [0x0025, \"USE-CANDIDATE\", packNone, unpackNone],\n [0x8022, \"SOFTWARE\", packString, unpackString],\n [0x8028, \"FINGERPRINT\", packUnsigned, unpackUnsigned],\n [0x8029, \"ICE-CONTROLLED\", packUnsigned64, unpackUnsigned64],\n [0x802a, \"ICE-CONTROLLING\", packUnsigned64, unpackUnsigned64],\n [0x802b, \"RESPONSE-ORIGIN\", packAddress, unpackAddress],\n [0x802c, \"OTHER-ADDRESS\", packAddress, unpackAddress],\n];\n\nexport class AttributeRepository {\n constructor(protected attributes: AttributePair[] = []) {}\n\n getAttributes() {\n return this.attributes;\n }\n\n setAttribute(key: typeof AttributeKeys[number], value: any) {\n const exist = this.attributes.find((a) => a[0] === key);\n if (exist) {\n exist[1] = value;\n } else {\n this.attributes.push([key, value]);\n }\n return this;\n }\n\n getAttributeValue(key: AttributeKey) {\n const attribute = this.attributes.find((a) => a[0] === key);\n if (!attribute) {\n return undefined;\n }\n return attribute[1];\n }\n\n get attributesKeys(): typeof AttributeKeys[number][] {\n return this.attributes.map((a) => a[0]);\n }\n\n clear() {\n this.attributes = [];\n }\n}\n\nexport type AttributeKey = typeof AttributeKeys[number];\n\nexport type AttributePair = [AttributeKey, any];\n\nexport const ATTRIBUTES_BY_TYPE = ATTRIBUTES.reduce((acc, cur) => {\n acc[cur[0]] = cur;\n return acc;\n}, {} as { [key: string]: ATTRIBUTE });\n\nexport const ATTRIBUTES_BY_NAME = ATTRIBUTES.reduce((acc, cur) => {\n acc[cur[1]] = cur;\n return acc;\n}, {} as { [key: string]: ATTRIBUTE });\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../rtp/src/container/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import * as EBML from \"@shinyoshiaki/ebml-builder\";\n\nimport { BitWriter2, BufferChain } from \"../../../common/src\";\nimport { OpusRtpPayload } from \"..\";\n\nexport class WEBMBuilder {\n readonly ebmlHeader = EBML.build(\n EBML.element(EBML.ID.EBML, [\n EBML.element(EBML.ID.EBMLVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLReadVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLMaxIDLength, EBML.number(4)),\n EBML.element(EBML.ID.EBMLMaxSizeLength, EBML.number(8)),\n EBML.element(EBML.ID.DocType, EBML.string(\"webm\")),\n EBML.element(EBML.ID.DocTypeVersion, EBML.number(2)),\n EBML.element(EBML.ID.DocTypeReadVersion, EBML.number(2)),\n ])\n );\n trackEntries: EBML.EBMLData[] = [];\n\n constructor(\n tracks: {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n trackNumber: number;\n }[]\n ) {\n this.trackEntries = tracks.map(\n ({ width, height, kind, codec, trackNumber }) => {\n return this.createTrackEntry(kind, trackNumber, codec, {\n width,\n height,\n });\n }\n );\n }\n\n createTrackEntry(\n kind: string,\n trackNumber: number,\n codec: string,\n { width, height }: Partial<{ kind: string; width: number; height: number }>\n ) {\n const trackElements: EBML.EBMLData[] = [];\n if (kind === \"video\") {\n trackElements.push(\n EBML.element(EBML.ID.Video, [\n EBML.element(EBML.ID.PixelWidth, EBML.number(width)),\n EBML.element(EBML.ID.PixelHeight, EBML.number(height)),\n ])\n );\n } else {\n trackElements.push(\n EBML.element(EBML.ID.Audio, [\n EBML.element(EBML.ID.SamplingFrequency, EBML.float(48000.0)),\n EBML.element(EBML.ID.Channels, EBML.number(2)),\n ])\n );\n // only support OPUS\n trackElements.push(\n EBML.element(\n EBML.ID.CodecPrivate,\n EBML.bytes(OpusRtpPayload.createCodecPrivate())\n )\n );\n }\n\n const trackEntry = EBML.element(EBML.ID.TrackEntry, [\n EBML.element(EBML.ID.TrackNumber, EBML.number(trackNumber)),\n EBML.element(EBML.ID.TrackUID, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CodecName, EBML.string(codec)),\n EBML.element(EBML.ID.TrackType, EBML.number(kind === \"video\" ? 1 : 2)),\n EBML.element(\n EBML.ID.CodecID,\n EBML.string(`${kind === \"video\" ? \"V\" : \"A\"}_${codec}`)\n ),\n ...trackElements,\n ]);\n return trackEntry;\n }\n\n createSegment(duration?: number) {\n const elements = [\n EBML.element(EBML.ID.TimecodeScale, EBML.number(millisecond)),\n EBML.element(EBML.ID.MuxingApp, EBML.string(\"webrtc\")),\n EBML.element(EBML.ID.WritingApp, EBML.string(\"webrtc\")),\n ];\n if (duration) {\n elements.push(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Segment, [\n EBML.element(EBML.ID.SeekHead, []),\n EBML.element(EBML.ID.Info, elements),\n EBML.element(EBML.ID.Tracks, this.trackEntries),\n ])\n );\n }\n\n createCuePoint(\n relativeTimestamp: number,\n trackNumber: number,\n clusterPosition: number,\n blockNumber: number\n ) {\n return EBML.element(EBML.ID.CuePoint, [\n EBML.element(EBML.ID.CueTime, EBML.number(relativeTimestamp)),\n EBML.element(EBML.ID.CueTrackPositions, [\n EBML.element(EBML.ID.CueTrack, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CueClusterPosition, EBML.number(clusterPosition)),\n EBML.element(EBML.ID.CueBlockNumber, EBML.number(blockNumber)),\n ]),\n ]);\n }\n\n createCues(cuePoints: EBML.EBMLData[]) {\n return EBML.build(EBML.element(EBML.ID.Cues, cuePoints));\n }\n\n createCluster(timecode: number) {\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Cluster, [\n EBML.element(EBML.ID.Timecode, EBML.number(timecode)),\n ])\n );\n }\n\n createSimpleBlock(\n data: Buffer,\n isKeyframe: boolean,\n trackNumber: number,\n relativeTimestamp: number\n ) {\n const elementId = Buffer.from([0xa3]);\n const contentSize: Uint8Array = EBML.vintEncodedNumber(\n 1 + 2 + 1 + data.length\n ).bytes;\n\n const keyframe = isKeyframe ? 1 : 0;\n const flags = new BitWriter2(8)\n .set(keyframe)\n .set(0, 3)\n .set(0)\n .set(0, 2)\n .set(0);\n\n const simpleBlock = Buffer.concat([\n elementId,\n contentSize,\n EBML.vintEncodedNumber(trackNumber).bytes,\n new BufferChain(2).writeInt16BE(relativeTimestamp).buffer,\n new BufferChain(1).writeUInt8(flags.value).buffer,\n data,\n ]);\n return simpleBlock;\n }\n}\n\nconst supportedCodecs = [\"MPEG4/ISO/AVC\", \"VP8\", \"VP9\", \"AV1\", \"OPUS\"] as const;\nexport type SupportedCodec = typeof supportedCodecs[number];\nconst millisecond = 1000000;\n"]}
1
+ {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../rtp/src/container/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import * as EBML from \"@shinyoshiaki/ebml-builder\";\n\nimport { BitWriter2, BufferChain } from \"../../../common/src\";\nimport { OpusRtpPayload } from \"..\";\n\nexport class WEBMBuilder {\n readonly ebmlHeader = EBML.build(\n EBML.element(EBML.ID.EBML, [\n EBML.element(EBML.ID.EBMLVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLReadVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLMaxIDLength, EBML.number(4)),\n EBML.element(EBML.ID.EBMLMaxSizeLength, EBML.number(8)),\n EBML.element(EBML.ID.DocType, EBML.string(\"webm\")),\n EBML.element(EBML.ID.DocTypeVersion, EBML.number(2)),\n EBML.element(EBML.ID.DocTypeReadVersion, EBML.number(2)),\n ])\n );\n trackEntries: EBML.EBMLData[] = [];\n\n constructor(\n tracks: {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n trackNumber: number;\n }[]\n ) {\n this.trackEntries = tracks.map(\n ({ width, height, kind, codec, trackNumber }) => {\n return this.createTrackEntry(kind, trackNumber, codec, {\n width,\n height,\n });\n }\n );\n }\n\n createTrackEntry(\n kind: string,\n trackNumber: number,\n codec: string,\n { width, height }: Partial<{ kind: string; width: number; height: number }>\n ) {\n const trackElements: EBML.EBMLData[] = [];\n if (kind === \"video\") {\n trackElements.push(\n EBML.element(EBML.ID.Video, [\n EBML.element(EBML.ID.PixelWidth, EBML.number(width)),\n EBML.element(EBML.ID.PixelHeight, EBML.number(height)),\n ])\n );\n } else {\n trackElements.push(\n EBML.element(EBML.ID.Audio, [\n EBML.element(EBML.ID.SamplingFrequency, EBML.float(48000.0)),\n EBML.element(EBML.ID.Channels, EBML.number(2)),\n ])\n );\n // only support OPUS\n trackElements.push(\n EBML.element(\n EBML.ID.CodecPrivate,\n EBML.bytes(OpusRtpPayload.createCodecPrivate())\n )\n );\n }\n\n const trackEntry = EBML.element(EBML.ID.TrackEntry, [\n EBML.element(EBML.ID.TrackNumber, EBML.number(trackNumber)),\n EBML.element(EBML.ID.TrackUID, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CodecName, EBML.string(codec)),\n EBML.element(EBML.ID.TrackType, EBML.number(kind === \"video\" ? 1 : 2)),\n EBML.element(\n EBML.ID.CodecID,\n EBML.string(`${kind === \"video\" ? \"V\" : \"A\"}_${codec}`)\n ),\n ...trackElements,\n ]);\n return trackEntry;\n }\n\n createSegment(duration?: number) {\n const elements = [\n EBML.element(EBML.ID.TimecodeScale, EBML.number(millisecond)),\n EBML.element(EBML.ID.MuxingApp, EBML.string(\"webrtc\")),\n EBML.element(EBML.ID.WritingApp, EBML.string(\"webrtc\")),\n ];\n if (duration) {\n elements.push(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Segment, [\n EBML.element(EBML.ID.SeekHead, []),\n EBML.element(EBML.ID.Info, elements),\n EBML.element(EBML.ID.Tracks, this.trackEntries),\n ])\n );\n }\n\n createCuePoint(\n relativeTimestamp: number,\n trackNumber: number,\n clusterPosition: number,\n blockNumber: number\n ) {\n return EBML.element(EBML.ID.CuePoint, [\n EBML.element(EBML.ID.CueTime, EBML.number(relativeTimestamp)),\n EBML.element(EBML.ID.CueTrackPositions, [\n EBML.element(EBML.ID.CueTrack, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CueClusterPosition, EBML.number(clusterPosition)),\n EBML.element(EBML.ID.CueBlockNumber, EBML.number(blockNumber)),\n ]),\n ]);\n }\n\n createCues(cuePoints: EBML.EBMLData[]) {\n return EBML.build(EBML.element(EBML.ID.Cues, cuePoints));\n }\n\n createCluster(timecode: number) {\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Cluster, [\n EBML.element(EBML.ID.Timecode, EBML.number(timecode)),\n ])\n );\n }\n\n createSimpleBlock(\n data: Buffer,\n isKeyframe: boolean,\n trackNumber: number,\n relativeTimestamp: number\n ) {\n const elementId = Buffer.from([0xa3]);\n const contentSize: Uint8Array = EBML.vintEncodedNumber(\n 1 + 2 + 1 + data.length\n ).bytes;\n\n const keyframe = isKeyframe ? 1 : 0;\n const flags = new BitWriter2(8)\n .set(keyframe)\n .set(0, 3)\n .set(0)\n .set(0, 2)\n .set(0);\n\n const simpleBlock = Buffer.concat([\n elementId,\n contentSize,\n EBML.vintEncodedNumber(trackNumber).bytes,\n new BufferChain(2).writeInt16BE(relativeTimestamp).buffer,\n new BufferChain(1).writeUInt8(flags.value).buffer,\n data,\n ]);\n return simpleBlock;\n }\n}\n\nconst supportedCodecs = [\"MPEG4/ISO/AVC\", \"VP8\", \"VP9\", \"AV1\", \"OPUS\"] as const;\nexport type SupportedCodec = typeof supportedCodecs[number];\nconst millisecond = 1000000;\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../rtp/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kBAAgB;AAChB,mDAAiC;AACjC,8CAA4B;AAC5B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,mDAAiC;AACjC,2DAAyC;AACzC,sDAAoC;AACpC,4DAA0C;AAC1C,mDAAiC;AACjC,gDAA8B;AAC9B,8CAA4B;AAC5B,oEAAkD;AAClD,mDAAiC;AACjC,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B;AAC7B,oDAAkC;AAClC,oDAAkC;AAClC,8CAA4B;AAC5B,4CAA0B;AAC1B,oDAAkC;AAClC,mDAAiC;AACjC,4CAA0B;AAC1B,+CAA6B;AAC7B,8CAA4B","sourcesContent":["import \"buffer\";\nexport * from \"../../common/src\";\nexport * from \"./codec/av1\";\nexport * from \"./codec/base\";\nexport * from \"./codec/h264\";\nexport * from \"./codec/opus\";\nexport * from \"./codec/vp8\";\nexport * from \"./codec/vp9\";\nexport * from \"./processor/base\";\nexport * from \"./processor/jitterBuffer\";\nexport * from \"./processor/lipsync\";\nexport * from \"./processor/sampleBuilder\";\nexport * from \"./processor/webm\";\nexport * from \"./rtcp/header\";\nexport * from \"./rtcp/psfb\";\nexport * from \"./rtcp/psfb/pictureLossIndication\";\nexport * from \"./rtcp/psfb/remb\";\nexport * from \"./rtcp/rr\";\nexport * from \"./rtcp/rtcp\";\nexport * from \"./rtcp/rtpfb\";\nexport * from \"./rtcp/rtpfb/nack\";\nexport * from \"./rtcp/rtpfb/twcc\";\nexport * from \"./rtcp/sdes\";\nexport * from \"./rtcp/sr\";\nexport * from \"./rtp/red/encoder\";\nexport * from \"./rtp/red/packet\";\nexport * from \"./rtp/rtp\";\nexport * from \"./srtp/srtcp\";\nexport * from \"./srtp/srtp\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../rtp/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kBAAgB;AAChB,mDAAiC;AACjC,8CAA4B;AAC5B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,mDAAiC;AACjC,2DAAyC;AACzC,sDAAoC;AACpC,4DAA0C;AAC1C,mDAAiC;AACjC,gDAA8B;AAC9B,8CAA4B;AAC5B,oEAAkD;AAClD,mDAAiC;AACjC,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B;AAC7B,oDAAkC;AAClC,oDAAkC;AAClC,8CAA4B;AAC5B,4CAA0B;AAC1B,oDAAkC;AAClC,mDAAiC;AACjC,4CAA0B;AAC1B,+CAA6B;AAC7B,8CAA4B","sourcesContent":["import \"buffer\";\nexport * from \"../../common/src\";\nexport * from \"./codec/av1\";\nexport * from \"./codec/base\";\nexport * from \"./codec/h264\";\nexport * from \"./codec/opus\";\nexport * from \"./codec/vp8\";\nexport * from \"./codec/vp9\";\nexport * from \"./processor/base\";\nexport * from \"./processor/jitterBuffer\";\nexport * from \"./processor/lipsync\";\nexport * from \"./processor/sampleBuilder\";\nexport * from \"./processor/webm\";\nexport * from \"./rtcp/header\";\nexport * from \"./rtcp/psfb\";\nexport * from \"./rtcp/psfb/pictureLossIndication\";\nexport * from \"./rtcp/psfb/remb\";\nexport * from \"./rtcp/rr\";\nexport * from \"./rtcp/rtcp\";\nexport * from \"./rtcp/rtpfb\";\nexport * from \"./rtcp/rtpfb/nack\";\nexport * from \"./rtcp/rtpfb/twcc\";\nexport * from \"./rtcp/sdes\";\nexport * from \"./rtcp/sr\";\nexport * from \"./rtp/red/encoder\";\nexport * from \"./rtp/red/packet\";\nexport * from \"./rtp/rtp\";\nexport * from \"./srtp/srtcp\";\nexport * from \"./srtp/srtp\";\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,8DAA4C;AAC5C,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,iEAA+C;AAC/C,iEAA+C;AAC/C,qDAAmC;AACnC,yDAAuC;AACvC,gDAA8B;AAC9B,yDAAuC;AACvC,0DAAwC;AACxC,mDAAiC;AACjC,wCAAsB;AACtB,mDAAiC;AACjC,kDAAgC;AAChC,mDAAiC;AACjC,iDAA+B;AAC/B,0CAAwB","sourcesContent":["export * from \"../../common/src\";\nexport * from \"../../dtls/src/cipher/const\";\nexport * from \"../../ice/src\";\nexport * from \"../../rtp/src\";\nexport * from \"./dataChannel\";\nexport * from \"./media/extension/rtcpFeedback\";\nexport * from \"./media/extension/rtpExtension\";\nexport * from \"./media/parameters\";\nexport * from \"./media/rtpTransceiver\";\nexport * from \"./media/track\";\nexport * from \"./nonstandard/recorder\";\nexport * from \"./nonstandard/userMedia\";\nexport * from \"./peerConnection\";\nexport * from \"./sdp\";\nexport * from \"./transport/dtls\";\nexport * from \"./transport/ice\";\nexport * from \"./transport/sctp\";\nexport * from \"./types/domain\";\nexport * from \"./utils\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,8DAA4C;AAC5C,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,iEAA+C;AAC/C,iEAA+C;AAC/C,qDAAmC;AACnC,yDAAuC;AACvC,gDAA8B;AAC9B,yDAAuC;AACvC,0DAAwC;AACxC,mDAAiC;AACjC,wCAAsB;AACtB,mDAAiC;AACjC,kDAAgC;AAChC,mDAAiC;AACjC,iDAA+B;AAC/B,0CAAwB","sourcesContent":["export * from \"../../common/src\";\nexport * from \"../../dtls/src/cipher/const\";\nexport * from \"../../ice/src\";\nexport * from \"../../rtp/src\";\nexport * from \"./dataChannel\";\nexport * from \"./media/extension/rtcpFeedback\";\nexport * from \"./media/extension/rtpExtension\";\nexport * from \"./media/parameters\";\nexport * from \"./media/rtpTransceiver\";\nexport * from \"./media/track\";\nexport * from \"./nonstandard/recorder\";\nexport * from \"./nonstandard/userMedia\";\nexport * from \"./peerConnection\";\nexport * from \"./sdp\";\nexport * from \"./transport/dtls\";\nexport * from \"./transport/ice\";\nexport * from \"./transport/sctp\";\nexport * from \"./types/domain\";\nexport * from \"./utils\";\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"rtpSender.js","sourceRoot":"","sources":["../../../../src/media/rtpSender.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport debug from \"debug\";\nimport { jspack } from \"jspack\";\nimport Event from \"rx.mini\";\nimport { setTimeout } from \"timers/promises\";\nimport * as uuid from \"uuid\";\n\nimport {\n bufferWriter,\n random16,\n uint16Add,\n uint32Add,\n} from \"../../../common/src\";\nimport {\n Extension,\n GenericNack,\n PictureLossIndication,\n ReceiverEstimatedMaxBitrate,\n RedEncoder,\n RtcpPacket,\n RtcpPayloadSpecificFeedback,\n RtcpRrPacket,\n RtcpSenderInfo,\n RtcpSourceDescriptionPacket,\n RtcpSrPacket,\n RtcpTransportLayerFeedback,\n RtpHeader,\n RtpPacket,\n SourceDescriptionChunk,\n SourceDescriptionItem,\n TransportWideCC,\n} from \"../../../rtp/src\";\nimport { codecParametersFromString } from \"..\";\nimport { RTCDtlsTransport } from \"../transport/dtls\";\nimport { Kind } from \"../types/domain\";\nimport { compactNtp, milliTime, ntpTime } from \"../utils\";\nimport { RTP_EXTENSION_URI } from \"./extension/rtpExtension\";\nimport {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n RTCRtpSendParameters,\n} from \"./parameters\";\nimport { SenderBandwidthEstimator, SentInfo } from \"./sender/senderBWE\";\nimport { MediaStreamTrack } from \"./track\";\n\nconst log = debug(\"werift:packages/webrtc/src/media/rtpSender.ts\");\n\nconst RTP_HISTORY_SIZE = 128;\nconst RTT_ALPHA = 0.85;\n\nexport class RTCRtpSender {\n readonly type = \"sender\";\n readonly kind =\n typeof this.trackOrKind === \"string\"\n ? this.trackOrKind\n : this.trackOrKind.kind;\n readonly ssrc = jspack.Unpack(\"!L\", randomBytes(4))[0];\n readonly rtxSsrc = jspack.Unpack(\"!L\", randomBytes(4))[0];\n streamId = uuid.v4();\n readonly trackId = uuid.v4();\n readonly onReady = new Event();\n readonly onRtcp = new Event<[RtcpPacket]>();\n readonly onPictureLossIndication = new Event<[]>();\n readonly onGenericNack = new Event<[GenericNack]>();\n readonly senderBWE = new SenderBandwidthEstimator();\n\n private cname?: string;\n private mid?: string;\n private rtpStreamId?: string;\n private repairedRtpStreamId?: string;\n private rtxPayloadType?: number;\n private rtxSequenceNumber = random16();\n redRedundantPayloadType?: number;\n private _redDistance = 2;\n redEncoder = new RedEncoder(this._redDistance);\n private headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n private disposeTrack?: () => void;\n\n // # stats\n private lsr?: number;\n private lsrTime: number = Date.now() / 1000;\n private ntpTimestamp = 0n;\n private rtpTimestamp = 0;\n private octetCount = 0;\n private packetCount = 0;\n private rtt?: number;\n receiverEstimatedMaxBitrate: bigint = 0n;\n\n // rtp\n private sequenceNumber?: number;\n private timestamp?: number;\n private timestampOffset = 0;\n private seqOffset = 0;\n private rtpCache: RtpPacket[] = [];\n codec?: RTCRtpCodecParameters;\n public dtlsTransport!: RTCDtlsTransport;\n private dtlsDisposer: (() => void)[] = [];\n\n track?: MediaStreamTrack;\n stopped = false;\n rtcpRunning = false;\n private rtcpCancel = new AbortController();\n\n constructor(public trackOrKind: Kind | MediaStreamTrack) {\n if (trackOrKind instanceof MediaStreamTrack) {\n if (trackOrKind.streamId) {\n this.streamId = trackOrKind.streamId;\n }\n this.registerTrack(trackOrKind);\n }\n }\n\n setDtlsTransport(dtlsTransport: RTCDtlsTransport) {\n if (this.dtlsTransport) {\n this.dtlsDisposer.forEach((dispose) => dispose());\n }\n\n this.dtlsTransport = dtlsTransport;\n this.dtlsDisposer = [\n this.dtlsTransport.onStateChange.subscribe((state) => {\n if (state === \"connected\") {\n this.onReady.execute();\n }\n }).unSubscribe,\n ];\n }\n\n get redDistance() {\n return this._redDistance;\n }\n set redDistance(n: number) {\n this._redDistance = n;\n this.redEncoder.distance = n;\n }\n\n prepareSend(params: RTCRtpSendParameters) {\n this.cname = params.rtcp?.cname;\n this.mid = params.muxId;\n this.headerExtensions = params.headerExtensions;\n this.rtpStreamId = params.rtpStreamId;\n this.repairedRtpStreamId = params.repairedRtpStreamId;\n\n this.codec = params.codecs[0];\n if (this.track) {\n this.track.codec = this.codec;\n }\n\n params.codecs.forEach((codec) => {\n const codecParams = codecParametersFromString(codec.parameters ?? \"\");\n if (\n codec.name.toLowerCase() === \"rtx\" &&\n codecParams[\"apt\"] === this.codec?.payloadType\n ) {\n this.rtxPayloadType = codec.payloadType;\n }\n if (codec.name.toLowerCase() === \"red\") {\n this.redRedundantPayloadType = Number(\n (codec.parameters ?? \"\").split(\"/\")[0]\n );\n }\n });\n }\n\n registerTrack(track: MediaStreamTrack) {\n if (track.stopped) throw new Error(\"track is ended\");\n\n if (this.disposeTrack) {\n this.disposeTrack();\n }\n\n track.id = this.trackId;\n\n const { unSubscribe } = track.onReceiveRtp.subscribe(async (rtp) => {\n await this.sendRtp(rtp);\n });\n this.track = track;\n this.disposeTrack = unSubscribe;\n\n if (this.codec) {\n track.codec = this.codec;\n }\n\n track.onSourceChanged.subscribe((header) => {\n this.replaceRTP(header);\n });\n }\n\n async replaceTrack(track: MediaStreamTrack | null) {\n if (track === null) {\n // todo impl\n return;\n }\n\n if (track.stopped) throw new Error(\"track is ended\");\n\n if (this.sequenceNumber != undefined) {\n const header =\n track.header || (await track.onReceiveRtp.asPromise())[0].header;\n\n this.replaceRTP(header);\n }\n\n this.registerTrack(track);\n log(\"replaceTrack\", \"ssrc\", track.ssrc, \"rid\", track.rid);\n }\n\n stop() {\n this.stopped = true;\n this.rtcpRunning = false;\n this.rtcpCancel.abort();\n\n this.track = undefined;\n }\n\n async runRtcp() {\n if (this.rtcpRunning || this.stopped) return;\n this.rtcpRunning = true;\n\n try {\n while (this.rtcpRunning) {\n await setTimeout(500 + Math.random() * 1000, undefined, {\n signal: this.rtcpCancel.signal,\n });\n\n const packets: RtcpPacket[] = [\n new RtcpSrPacket({\n ssrc: this.ssrc,\n senderInfo: new RtcpSenderInfo({\n ntpTimestamp: this.ntpTimestamp,\n rtpTimestamp: this.rtpTimestamp,\n packetCount: this.packetCount,\n octetCount: this.octetCount,\n }),\n }),\n ];\n this.lsr = compactNtp(this.ntpTimestamp);\n this.lsrTime = Date.now() / 1000;\n\n if (this.cname) {\n packets.push(\n new RtcpSourceDescriptionPacket({\n chunks: [\n new SourceDescriptionChunk({\n source: this.ssrc,\n items: [\n new SourceDescriptionItem({ type: 1, text: this.cname }),\n ],\n }),\n ],\n })\n );\n }\n\n try {\n await this.dtlsTransport.sendRtcp(packets);\n } catch (error) {\n log(\"sendRtcp failed\", error);\n await setTimeout(500 + Math.random() * 1000);\n }\n }\n } catch (error) {}\n }\n\n replaceRTP({\n sequenceNumber,\n timestamp,\n }: Pick<RtpHeader, \"sequenceNumber\" | \"timestamp\">) {\n if (this.sequenceNumber != undefined) {\n this.seqOffset = uint16Add(this.sequenceNumber, -sequenceNumber);\n }\n if (this.timestamp != undefined) {\n this.timestampOffset = uint32Add(this.timestamp, -timestamp);\n }\n this.rtpCache = [];\n log(\"replaceRTP\", this.sequenceNumber, sequenceNumber, this.seqOffset);\n }\n\n async sendRtp(rtp: Buffer | RtpPacket) {\n if (this.dtlsTransport.state !== \"connected\" || !this.codec) {\n return;\n }\n\n rtp = Buffer.isBuffer(rtp) ? RtpPacket.deSerialize(rtp) : rtp;\n\n const header = rtp.header;\n header.ssrc = this.ssrc;\n header.payloadType = this.codec.payloadType;\n header.timestamp = uint32Add(header.timestamp, this.timestampOffset);\n header.sequenceNumber = uint16Add(header.sequenceNumber, this.seqOffset);\n this.timestamp = header.timestamp;\n this.sequenceNumber = header.sequenceNumber;\n\n header.extensions = this.headerExtensions\n .map((extension) => {\n const payload = (() => {\n switch (extension.uri) {\n case RTP_EXTENSION_URI.sdesMid:\n if (this.mid) {\n return Buffer.from(this.mid);\n }\n return;\n // todo : sender simulcast unsupported now\n case RTP_EXTENSION_URI.sdesRTPStreamID:\n if (this.rtpStreamId) {\n return Buffer.from(this.rtpStreamId);\n }\n return;\n // todo : sender simulcast unsupported now\n case RTP_EXTENSION_URI.repairedRtpStreamId:\n if (this.repairedRtpStreamId) {\n return Buffer.from(this.repairedRtpStreamId);\n }\n return;\n case RTP_EXTENSION_URI.transportWideCC:\n this.dtlsTransport.transportSequenceNumber = uint16Add(\n this.dtlsTransport.transportSequenceNumber,\n 1\n );\n return bufferWriter(\n [2],\n [this.dtlsTransport.transportSequenceNumber]\n );\n case RTP_EXTENSION_URI.absSendTime:\n const buf = Buffer.alloc(3);\n const time = (ntpTime() >> 14n) & 0x00ffffffn;\n buf.writeUIntBE(Number(time), 0, 3);\n return buf;\n }\n })();\n\n if (payload) return { id: extension.id, payload };\n })\n .filter((v) => v) as Extension[];\n\n this.ntpTimestamp = ntpTime();\n this.rtpTimestamp = rtp.header.timestamp;\n this.octetCount += rtp.payload.length;\n this.packetCount = uint32Add(this.packetCount, 1);\n\n rtp.header = header;\n\n this.rtpCache.push(rtp);\n this.rtpCache = this.rtpCache.slice(-RTP_HISTORY_SIZE);\n\n let rtpPayload = rtp.payload;\n\n if (this.redRedundantPayloadType) {\n this.redEncoder.push({\n block: rtpPayload,\n timestamp: header.timestamp,\n blockPT: this.redRedundantPayloadType,\n });\n const red = this.redEncoder.build();\n rtpPayload = red.serialize();\n }\n\n const size = await this.dtlsTransport.sendRtp(rtpPayload, header);\n\n this.runRtcp();\n const sentInfo: SentInfo = {\n wideSeq: this.dtlsTransport.transportSequenceNumber,\n size,\n sendingAtMs: milliTime(),\n sentAtMs: milliTime(),\n };\n this.senderBWE.rtpPacketSent(sentInfo);\n }\n\n handleRtcpPacket(rtcpPacket: RtcpPacket) {\n switch (rtcpPacket.type) {\n case RtcpSrPacket.type:\n case RtcpRrPacket.type:\n {\n const packet = rtcpPacket as RtcpSrPacket | RtcpRrPacket;\n packet.reports\n .filter((report) => report.ssrc === this.ssrc)\n .forEach((report) => {\n if (this.lsr === report.lsr && report.dlsr) {\n const rtt =\n Date.now() / 1000 - this.lsrTime - report.dlsr / 65536;\n if (this.rtt === undefined) {\n this.rtt = rtt;\n } else {\n this.rtt = RTT_ALPHA * this.rtt + (1 - RTT_ALPHA) * rtt;\n }\n }\n });\n }\n break;\n case RtcpTransportLayerFeedback.type:\n {\n const packet = rtcpPacket as RtcpTransportLayerFeedback;\n switch (packet.feedback.count) {\n case TransportWideCC.count:\n {\n const feedback = packet.feedback as TransportWideCC;\n this.senderBWE.receiveTWCC(feedback);\n }\n break;\n case GenericNack.count:\n {\n const feedback = packet.feedback as GenericNack;\n feedback.lost.forEach(async (seqNum) => {\n let packet = this.rtpCache.find(\n (rtp) => rtp.header.sequenceNumber === seqNum\n );\n if (packet) {\n if (this.rtxPayloadType != undefined) {\n packet = wrapRtx(\n packet,\n this.rtxPayloadType,\n this.rtxSequenceNumber,\n this.rtxSsrc\n );\n this.rtxSequenceNumber = uint16Add(\n this.rtxSequenceNumber,\n 1\n );\n }\n await this.dtlsTransport.sendRtp(\n packet.payload,\n packet.header\n );\n }\n });\n this.onGenericNack.execute(feedback);\n }\n break;\n }\n }\n break;\n case RtcpPayloadSpecificFeedback.type:\n {\n const packet = rtcpPacket as RtcpPayloadSpecificFeedback;\n switch (packet.feedback.count) {\n case ReceiverEstimatedMaxBitrate.count:\n {\n const feedback = packet.feedback as ReceiverEstimatedMaxBitrate;\n this.receiverEstimatedMaxBitrate = feedback.bitrate;\n }\n break;\n case PictureLossIndication.count:\n {\n this.onPictureLossIndication.execute();\n }\n break;\n }\n }\n break;\n }\n this.onRtcp.execute(rtcpPacket);\n }\n}\n\nexport function wrapRtx(\n packet: RtpPacket,\n payloadType: number,\n sequenceNumber: number,\n ssrc: number\n) {\n const rtx = new RtpPacket(\n new RtpHeader({\n payloadType,\n marker: packet.header.marker,\n sequenceNumber,\n timestamp: packet.header.timestamp,\n ssrc,\n csrc: packet.header.csrc,\n extensions: packet.header.extensions,\n }),\n Buffer.concat([\n Buffer.from(jspack.Pack(\"!H\", [packet.header.sequenceNumber])),\n packet.payload,\n ])\n );\n return rtx;\n}\n"]}
1
+ {"version":3,"file":"rtpSender.js","sourceRoot":"","sources":["../../../../src/media/rtpSender.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport debug from \"debug\";\nimport { jspack } from \"jspack\";\nimport Event from \"rx.mini\";\nimport { setTimeout } from \"timers/promises\";\nimport * as uuid from \"uuid\";\n\nimport {\n bufferWriter,\n random16,\n uint16Add,\n uint32Add,\n} from \"../../../common/src\";\nimport {\n Extension,\n GenericNack,\n PictureLossIndication,\n ReceiverEstimatedMaxBitrate,\n RedEncoder,\n RtcpPacket,\n RtcpPayloadSpecificFeedback,\n RtcpRrPacket,\n RtcpSenderInfo,\n RtcpSourceDescriptionPacket,\n RtcpSrPacket,\n RtcpTransportLayerFeedback,\n RtpHeader,\n RtpPacket,\n SourceDescriptionChunk,\n SourceDescriptionItem,\n TransportWideCC,\n} from \"../../../rtp/src\";\nimport { codecParametersFromString } from \"..\";\nimport { RTCDtlsTransport } from \"../transport/dtls\";\nimport { Kind } from \"../types/domain\";\nimport { compactNtp, milliTime, ntpTime } from \"../utils\";\nimport { RTP_EXTENSION_URI } from \"./extension/rtpExtension\";\nimport {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n RTCRtpSendParameters,\n} from \"./parameters\";\nimport { SenderBandwidthEstimator, SentInfo } from \"./sender/senderBWE\";\nimport { MediaStreamTrack } from \"./track\";\n\nconst log = debug(\"werift:packages/webrtc/src/media/rtpSender.ts\");\n\nconst RTP_HISTORY_SIZE = 128;\nconst RTT_ALPHA = 0.85;\n\nexport class RTCRtpSender {\n readonly type = \"sender\";\n readonly kind =\n typeof this.trackOrKind === \"string\"\n ? this.trackOrKind\n : this.trackOrKind.kind;\n readonly ssrc = jspack.Unpack(\"!L\", randomBytes(4))[0];\n readonly rtxSsrc = jspack.Unpack(\"!L\", randomBytes(4))[0];\n streamId = uuid.v4();\n readonly trackId = uuid.v4();\n readonly onReady = new Event();\n readonly onRtcp = new Event<[RtcpPacket]>();\n readonly onPictureLossIndication = new Event<[]>();\n readonly onGenericNack = new Event<[GenericNack]>();\n readonly senderBWE = new SenderBandwidthEstimator();\n\n private cname?: string;\n private mid?: string;\n private rtpStreamId?: string;\n private repairedRtpStreamId?: string;\n private rtxPayloadType?: number;\n private rtxSequenceNumber = random16();\n redRedundantPayloadType?: number;\n private _redDistance = 2;\n redEncoder = new RedEncoder(this._redDistance);\n private headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n private disposeTrack?: () => void;\n\n // # stats\n private lsr?: number;\n private lsrTime: number = Date.now() / 1000;\n private ntpTimestamp = 0n;\n private rtpTimestamp = 0;\n private octetCount = 0;\n private packetCount = 0;\n private rtt?: number;\n receiverEstimatedMaxBitrate: bigint = 0n;\n\n // rtp\n private sequenceNumber?: number;\n private timestamp?: number;\n private timestampOffset = 0;\n private seqOffset = 0;\n private rtpCache: RtpPacket[] = [];\n codec?: RTCRtpCodecParameters;\n public dtlsTransport!: RTCDtlsTransport;\n private dtlsDisposer: (() => void)[] = [];\n\n track?: MediaStreamTrack;\n stopped = false;\n rtcpRunning = false;\n private rtcpCancel = new AbortController();\n\n constructor(public trackOrKind: Kind | MediaStreamTrack) {\n if (trackOrKind instanceof MediaStreamTrack) {\n if (trackOrKind.streamId) {\n this.streamId = trackOrKind.streamId;\n }\n this.registerTrack(trackOrKind);\n }\n }\n\n setDtlsTransport(dtlsTransport: RTCDtlsTransport) {\n if (this.dtlsTransport) {\n this.dtlsDisposer.forEach((dispose) => dispose());\n }\n\n this.dtlsTransport = dtlsTransport;\n this.dtlsDisposer = [\n this.dtlsTransport.onStateChange.subscribe((state) => {\n if (state === \"connected\") {\n this.onReady.execute();\n }\n }).unSubscribe,\n ];\n }\n\n get redDistance() {\n return this._redDistance;\n }\n set redDistance(n: number) {\n this._redDistance = n;\n this.redEncoder.distance = n;\n }\n\n prepareSend(params: RTCRtpSendParameters) {\n this.cname = params.rtcp?.cname;\n this.mid = params.muxId;\n this.headerExtensions = params.headerExtensions;\n this.rtpStreamId = params.rtpStreamId;\n this.repairedRtpStreamId = params.repairedRtpStreamId;\n\n this.codec = params.codecs[0];\n if (this.track) {\n this.track.codec = this.codec;\n }\n\n params.codecs.forEach((codec) => {\n const codecParams = codecParametersFromString(codec.parameters ?? \"\");\n if (\n codec.name.toLowerCase() === \"rtx\" &&\n codecParams[\"apt\"] === this.codec?.payloadType\n ) {\n this.rtxPayloadType = codec.payloadType;\n }\n if (codec.name.toLowerCase() === \"red\") {\n this.redRedundantPayloadType = Number(\n (codec.parameters ?? \"\").split(\"/\")[0]\n );\n }\n });\n }\n\n registerTrack(track: MediaStreamTrack) {\n if (track.stopped) throw new Error(\"track is ended\");\n\n if (this.disposeTrack) {\n this.disposeTrack();\n }\n\n track.id = this.trackId;\n\n const { unSubscribe } = track.onReceiveRtp.subscribe(async (rtp) => {\n await this.sendRtp(rtp);\n });\n this.track = track;\n this.disposeTrack = unSubscribe;\n\n if (this.codec) {\n track.codec = this.codec;\n }\n\n track.onSourceChanged.subscribe((header) => {\n this.replaceRTP(header);\n });\n }\n\n async replaceTrack(track: MediaStreamTrack | null) {\n if (track === null) {\n // todo impl\n return;\n }\n\n if (track.stopped) throw new Error(\"track is ended\");\n\n if (this.sequenceNumber != undefined) {\n const header =\n track.header || (await track.onReceiveRtp.asPromise())[0].header;\n\n this.replaceRTP(header);\n }\n\n this.registerTrack(track);\n log(\"replaceTrack\", \"ssrc\", track.ssrc, \"rid\", track.rid);\n }\n\n stop() {\n this.stopped = true;\n this.rtcpRunning = false;\n this.rtcpCancel.abort();\n\n this.track = undefined;\n }\n\n async runRtcp() {\n if (this.rtcpRunning || this.stopped) return;\n this.rtcpRunning = true;\n\n try {\n while (this.rtcpRunning) {\n await setTimeout(500 + Math.random() * 1000, undefined, {\n signal: this.rtcpCancel.signal,\n });\n\n const packets: RtcpPacket[] = [\n new RtcpSrPacket({\n ssrc: this.ssrc,\n senderInfo: new RtcpSenderInfo({\n ntpTimestamp: this.ntpTimestamp,\n rtpTimestamp: this.rtpTimestamp,\n packetCount: this.packetCount,\n octetCount: this.octetCount,\n }),\n }),\n ];\n this.lsr = compactNtp(this.ntpTimestamp);\n this.lsrTime = Date.now() / 1000;\n\n if (this.cname) {\n packets.push(\n new RtcpSourceDescriptionPacket({\n chunks: [\n new SourceDescriptionChunk({\n source: this.ssrc,\n items: [\n new SourceDescriptionItem({ type: 1, text: this.cname }),\n ],\n }),\n ],\n })\n );\n }\n\n try {\n await this.dtlsTransport.sendRtcp(packets);\n } catch (error) {\n log(\"sendRtcp failed\", error);\n await setTimeout(500 + Math.random() * 1000);\n }\n }\n } catch (error) {}\n }\n\n replaceRTP({\n sequenceNumber,\n timestamp,\n }: Pick<RtpHeader, \"sequenceNumber\" | \"timestamp\">) {\n if (this.sequenceNumber != undefined) {\n this.seqOffset = uint16Add(this.sequenceNumber, -sequenceNumber);\n }\n if (this.timestamp != undefined) {\n this.timestampOffset = uint32Add(this.timestamp, -timestamp);\n }\n this.rtpCache = [];\n log(\"replaceRTP\", this.sequenceNumber, sequenceNumber, this.seqOffset);\n }\n\n async sendRtp(rtp: Buffer | RtpPacket) {\n if (this.dtlsTransport.state !== \"connected\" || !this.codec) {\n return;\n }\n\n rtp = Buffer.isBuffer(rtp) ? RtpPacket.deSerialize(rtp) : rtp;\n\n const header = rtp.header;\n header.ssrc = this.ssrc;\n header.payloadType = this.codec.payloadType;\n header.timestamp = uint32Add(header.timestamp, this.timestampOffset);\n header.sequenceNumber = uint16Add(header.sequenceNumber, this.seqOffset);\n this.timestamp = header.timestamp;\n this.sequenceNumber = header.sequenceNumber;\n\n header.extensions = this.headerExtensions\n .map((extension) => {\n const payload = (() => {\n switch (extension.uri) {\n case RTP_EXTENSION_URI.sdesMid:\n if (this.mid) {\n return Buffer.from(this.mid);\n }\n return;\n // todo : sender simulcast unsupported now\n case RTP_EXTENSION_URI.sdesRTPStreamID:\n if (this.rtpStreamId) {\n return Buffer.from(this.rtpStreamId);\n }\n return;\n // todo : sender simulcast unsupported now\n case RTP_EXTENSION_URI.repairedRtpStreamId:\n if (this.repairedRtpStreamId) {\n return Buffer.from(this.repairedRtpStreamId);\n }\n return;\n case RTP_EXTENSION_URI.transportWideCC:\n this.dtlsTransport.transportSequenceNumber = uint16Add(\n this.dtlsTransport.transportSequenceNumber,\n 1\n );\n return bufferWriter(\n [2],\n [this.dtlsTransport.transportSequenceNumber]\n );\n case RTP_EXTENSION_URI.absSendTime:\n const buf = Buffer.alloc(3);\n const time = (ntpTime() >> 14n) & 0x00ffffffn;\n buf.writeUIntBE(Number(time), 0, 3);\n return buf;\n }\n })();\n\n if (payload) return { id: extension.id, payload };\n })\n .filter((v) => v) as Extension[];\n\n this.ntpTimestamp = ntpTime();\n this.rtpTimestamp = rtp.header.timestamp;\n this.octetCount += rtp.payload.length;\n this.packetCount = uint32Add(this.packetCount, 1);\n\n rtp.header = header;\n\n this.rtpCache.push(rtp);\n this.rtpCache = this.rtpCache.slice(-RTP_HISTORY_SIZE);\n\n let rtpPayload = rtp.payload;\n\n if (this.redRedundantPayloadType) {\n this.redEncoder.push({\n block: rtpPayload,\n timestamp: header.timestamp,\n blockPT: this.redRedundantPayloadType,\n });\n const red = this.redEncoder.build();\n rtpPayload = red.serialize();\n }\n\n const size = await this.dtlsTransport.sendRtp(rtpPayload, header);\n\n this.runRtcp();\n const sentInfo: SentInfo = {\n wideSeq: this.dtlsTransport.transportSequenceNumber,\n size,\n sendingAtMs: milliTime(),\n sentAtMs: milliTime(),\n };\n this.senderBWE.rtpPacketSent(sentInfo);\n }\n\n handleRtcpPacket(rtcpPacket: RtcpPacket) {\n switch (rtcpPacket.type) {\n case RtcpSrPacket.type:\n case RtcpRrPacket.type:\n {\n const packet = rtcpPacket as RtcpSrPacket | RtcpRrPacket;\n packet.reports\n .filter((report) => report.ssrc === this.ssrc)\n .forEach((report) => {\n if (this.lsr === report.lsr && report.dlsr) {\n const rtt =\n Date.now() / 1000 - this.lsrTime - report.dlsr / 65536;\n if (this.rtt === undefined) {\n this.rtt = rtt;\n } else {\n this.rtt = RTT_ALPHA * this.rtt + (1 - RTT_ALPHA) * rtt;\n }\n }\n });\n }\n break;\n case RtcpTransportLayerFeedback.type:\n {\n const packet = rtcpPacket as RtcpTransportLayerFeedback;\n switch (packet.feedback.count) {\n case TransportWideCC.count:\n {\n const feedback = packet.feedback as TransportWideCC;\n this.senderBWE.receiveTWCC(feedback);\n }\n break;\n case GenericNack.count:\n {\n const feedback = packet.feedback as GenericNack;\n feedback.lost.forEach(async (seqNum) => {\n let packet = this.rtpCache.find(\n (rtp) => rtp.header.sequenceNumber === seqNum\n );\n if (packet) {\n if (this.rtxPayloadType != undefined) {\n packet = wrapRtx(\n packet,\n this.rtxPayloadType,\n this.rtxSequenceNumber,\n this.rtxSsrc\n );\n this.rtxSequenceNumber = uint16Add(\n this.rtxSequenceNumber,\n 1\n );\n }\n await this.dtlsTransport.sendRtp(\n packet.payload,\n packet.header\n );\n }\n });\n this.onGenericNack.execute(feedback);\n }\n break;\n }\n }\n break;\n case RtcpPayloadSpecificFeedback.type:\n {\n const packet = rtcpPacket as RtcpPayloadSpecificFeedback;\n switch (packet.feedback.count) {\n case ReceiverEstimatedMaxBitrate.count:\n {\n const feedback = packet.feedback as ReceiverEstimatedMaxBitrate;\n this.receiverEstimatedMaxBitrate = feedback.bitrate;\n }\n break;\n case PictureLossIndication.count:\n {\n this.onPictureLossIndication.execute();\n }\n break;\n }\n }\n break;\n }\n this.onRtcp.execute(rtcpPacket);\n }\n}\n\nexport function wrapRtx(\n packet: RtpPacket,\n payloadType: number,\n sequenceNumber: number,\n ssrc: number\n) {\n const rtx = new RtpPacket(\n new RtpHeader({\n payloadType,\n marker: packet.header.marker,\n sequenceNumber,\n timestamp: packet.header.timestamp,\n ssrc,\n csrc: packet.header.csrc,\n extensions: packet.header.extensions,\n }),\n Buffer.concat([\n Buffer.from(jspack.Pack(\"!H\", [packet.header.sequenceNumber])),\n packet.payload,\n ])\n );\n return rtx;\n}\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"rtpTransceiver.js","sourceRoot":"","sources":["../../../../src/media/rtpTransceiver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA4B;AAC5B,2CAA6B;AAG7B,oCAA4C;AAU5C,MAAa,iBAAiB;IAyB5B,YACkB,IAAU,EAC1B,aAA+B,EACxB,QAAwB,EACxB,MAAoB;IAC3B,qEAAqE;IAC9D,SAAoB;QALX,SAAI,GAAJ,IAAI,CAAM;QAEnB,aAAQ,GAAR,QAAQ,CAAgB;QACxB,WAAM,GAAN,MAAM,CAAc;QAEpB,cAAS,GAAT,SAAS,CAAW;QA9BpB,SAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjB,YAAO,GAAG,IAAI,iBAAK,EAAsB,CAAC;QAGnD,kBAAa,GAAG,KAAK,CAAC;QActB,WAAM,GAA4B,EAAE,CAAC;QACrC,qBAAgB,GAAsC,EAAE,CAAC;QACzD,YAAO,GAAgC,EAAE,CAAC;QAC1C,aAAQ,GAAG,KAAK,CAAC;QACjB,YAAO,GAAG,KAAK,CAAC;QAUd,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IA3BD,IAAI,gBAAgB,CAAC,SAA4C;QAC/D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,wBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE;YAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;IACH,CAAC;IACD,+CAA+C;IAC/C,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAoBD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrC,CAAC;IAED,gBAAgB,CAAC,IAAsB;QACrC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,KAAuB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,GAAG;YAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,YAAY;IACZ,0CAA0C;IAC1C,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,oDAAoD;QAEpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAChC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAC9D,EAAE,WAAW,CAAC;IACjB,CAAC;CACF;AArED,8CAqEC;AAEY,QAAA,UAAU,GAAG;IACxB,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC","sourcesContent":["import Event from \"rx.mini\";\nimport * as uuid from \"uuid\";\n\nimport { RTCDtlsTransport } from \"..\";\nimport { SenderDirections } from \"../const\";\nimport { Kind } from \"../types/domain\";\nimport {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n} from \"./parameters\";\nimport { RTCRtpReceiver } from \"./rtpReceiver\";\nimport { RTCRtpSender } from \"./rtpSender\";\nimport { MediaStreamTrack } from \"./track\";\n\nexport class RTCRtpTransceiver {\n readonly uuid = uuid.v4();\n readonly onTrack = new Event<[MediaStreamTrack]>();\n mid?: string;\n mLineIndex?: number;\n usedForSender = false;\n private _currentDirection?: Direction | \"stopped\";\n set currentDirection(direction: Direction | \"stopped\" | undefined) {\n this._currentDirection = direction;\n if (SenderDirections.includes(this._currentDirection || \"\")) {\n this.usedForSender = true;\n }\n }\n /**RFC 8829 4.2.5. last negotiated direction */\n get currentDirection(): Direction | \"stopped\" | undefined {\n return this._currentDirection;\n }\n\n offerDirection!: Direction;\n codecs: RTCRtpCodecParameters[] = [];\n headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n options: Partial<TransceiverOptions> = {};\n stopping = false;\n stopped = false;\n\n constructor(\n public readonly kind: Kind,\n dtlsTransport: RTCDtlsTransport,\n public receiver: RTCRtpReceiver,\n public sender: RTCRtpSender,\n /**RFC 8829 4.2.4. direction the transceiver was initialized with */\n public direction: Direction\n ) {\n this.setDtlsTransport(dtlsTransport);\n }\n\n get dtlsTransport() {\n return this.receiver.dtlsTransport;\n }\n\n setDtlsTransport(dtls: RTCDtlsTransport) {\n this.receiver.setDtlsTransport(dtls);\n this.sender.setDtlsTransport(dtls);\n }\n\n get msid() {\n return `${this.sender.streamId} ${this.sender.trackId}`;\n }\n\n addTrack(track: MediaStreamTrack) {\n const res = this.receiver.addTrack(track);\n if (res) this.onTrack.execute(track);\n }\n\n // todo impl\n // https://www.w3.org/TR/webrtc/#methods-8\n stop() {\n if (this.stopping) return;\n\n // todo Stop sending and receiving with transceiver.\n\n this.stopping = true;\n }\n\n getPayloadType(mimeType: string) {\n return this.codecs.find((codec) =>\n codec.mimeType.toLowerCase().includes(mimeType.toLowerCase())\n )?.payloadType;\n }\n}\n\nexport const Directions = [\n \"inactive\",\n \"sendonly\",\n \"recvonly\",\n \"sendrecv\",\n] as const;\n\nexport type Direction = typeof Directions[number];\n\ntype SimulcastDirection = \"send\" | \"recv\";\n\nexport interface TransceiverOptions {\n direction: Direction;\n simulcast: { direction: SimulcastDirection; rid: string }[];\n}\n"]}
1
+ {"version":3,"file":"rtpTransceiver.js","sourceRoot":"","sources":["../../../../src/media/rtpTransceiver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA4B;AAC5B,2CAA6B;AAG7B,oCAA4C;AAU5C,MAAa,iBAAiB;IAyB5B,YACkB,IAAU,EAC1B,aAA+B,EACxB,QAAwB,EACxB,MAAoB;IAC3B,qEAAqE;IAC9D,SAAoB;QALX,SAAI,GAAJ,IAAI,CAAM;QAEnB,aAAQ,GAAR,QAAQ,CAAgB;QACxB,WAAM,GAAN,MAAM,CAAc;QAEpB,cAAS,GAAT,SAAS,CAAW;QA9BpB,SAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjB,YAAO,GAAG,IAAI,iBAAK,EAAsB,CAAC;QAGnD,kBAAa,GAAG,KAAK,CAAC;QActB,WAAM,GAA4B,EAAE,CAAC;QACrC,qBAAgB,GAAsC,EAAE,CAAC;QACzD,YAAO,GAAgC,EAAE,CAAC;QAC1C,aAAQ,GAAG,KAAK,CAAC;QACjB,YAAO,GAAG,KAAK,CAAC;QAUd,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IA3BD,IAAI,gBAAgB,CAAC,SAA4C;QAC/D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,wBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE;YAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;IACH,CAAC;IACD,+CAA+C;IAC/C,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAoBD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrC,CAAC;IAED,gBAAgB,CAAC,IAAsB;QACrC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,KAAuB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,GAAG;YAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,YAAY;IACZ,0CAA0C;IAC1C,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,oDAAoD;QAEpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAChC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAC9D,EAAE,WAAW,CAAC;IACjB,CAAC;CACF;AArED,8CAqEC;AAEY,QAAA,UAAU,GAAG;IACxB,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC","sourcesContent":["import Event from \"rx.mini\";\nimport * as uuid from \"uuid\";\n\nimport { RTCDtlsTransport } from \"..\";\nimport { SenderDirections } from \"../const\";\nimport { Kind } from \"../types/domain\";\nimport {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n} from \"./parameters\";\nimport { RTCRtpReceiver } from \"./rtpReceiver\";\nimport { RTCRtpSender } from \"./rtpSender\";\nimport { MediaStreamTrack } from \"./track\";\n\nexport class RTCRtpTransceiver {\n readonly uuid = uuid.v4();\n readonly onTrack = new Event<[MediaStreamTrack]>();\n mid?: string;\n mLineIndex?: number;\n usedForSender = false;\n private _currentDirection?: Direction | \"stopped\";\n set currentDirection(direction: Direction | \"stopped\" | undefined) {\n this._currentDirection = direction;\n if (SenderDirections.includes(this._currentDirection || \"\")) {\n this.usedForSender = true;\n }\n }\n /**RFC 8829 4.2.5. last negotiated direction */\n get currentDirection(): Direction | \"stopped\" | undefined {\n return this._currentDirection;\n }\n\n offerDirection!: Direction;\n codecs: RTCRtpCodecParameters[] = [];\n headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n options: Partial<TransceiverOptions> = {};\n stopping = false;\n stopped = false;\n\n constructor(\n public readonly kind: Kind,\n dtlsTransport: RTCDtlsTransport,\n public receiver: RTCRtpReceiver,\n public sender: RTCRtpSender,\n /**RFC 8829 4.2.4. direction the transceiver was initialized with */\n public direction: Direction\n ) {\n this.setDtlsTransport(dtlsTransport);\n }\n\n get dtlsTransport() {\n return this.receiver.dtlsTransport;\n }\n\n setDtlsTransport(dtls: RTCDtlsTransport) {\n this.receiver.setDtlsTransport(dtls);\n this.sender.setDtlsTransport(dtls);\n }\n\n get msid() {\n return `${this.sender.streamId} ${this.sender.trackId}`;\n }\n\n addTrack(track: MediaStreamTrack) {\n const res = this.receiver.addTrack(track);\n if (res) this.onTrack.execute(track);\n }\n\n // todo impl\n // https://www.w3.org/TR/webrtc/#methods-8\n stop() {\n if (this.stopping) return;\n\n // todo Stop sending and receiving with transceiver.\n\n this.stopping = true;\n }\n\n getPayloadType(mimeType: string) {\n return this.codecs.find((codec) =>\n codec.mimeType.toLowerCase().includes(mimeType.toLowerCase())\n )?.payloadType;\n }\n}\n\nexport const Directions = [\n \"inactive\",\n \"sendonly\",\n \"recvonly\",\n \"sendrecv\",\n] as const;\n\nexport type Direction = typeof Directions[number];\n\ntype SimulcastDirection = \"send\" | \"recv\";\n\nexport interface TransceiverOptions {\n direction: Direction;\n simulcast: { direction: SimulcastDirection; rid: string }[];\n}\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../../src/nonstandard/recorder/writer/webm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAGlC,gCAKkB;AAClB,wBAAgC;AAEhC,MAAa,WAAY,SAAQ,cAAW;IAG1C,KAAK,CAAC,MAA0B;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,cAAU,CACxB,EAAE,EACF,IAAI,CAAC,IAAI,EACT,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAM,CAAC,WAAW,CAAC;YAE7C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC1B,MAAM,KAAK,GAAG,CAAC,GAAmB,EAAE;oBAClC,QAAQ,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAyB,EAAE;wBAC9D,KAAK,KAAK;4BACR,OAAO,KAAK,CAAC;wBACf,KAAK,KAAK;4BACR,OAAO,KAAK,CAAC;wBACf,KAAK,MAAM;4BACT,OAAO,eAAe,CAAC;wBACzB,KAAK,MAAM;4BACT,OAAO,KAAK,CAAC;wBACf;4BACE,MAAM,IAAI,KAAK,EAAE,CAAC;qBACrB;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK;oBAChB,WAAW;oBACX,WAAW;oBACX,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;oBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;iBAC5B,CAAC;aACH;iBAAM;gBACL,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK;oBAChB,WAAW;oBACX,WAAW;oBACX,KAAK,EAAE,MAAM;iBACd,CAAC;aACH;QACH,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,aAAa,GACjB,KAAK,CAAC,IAAI,KAAK,OAAO;gBACpB,CAAC,CAAC,IAAI,iBAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC;gBACvD,CAAC,CAAC,IAAI,iBAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;YACrD,IAAI,gBAAY,CAAC;gBACf,SAAS,EAAE,KAAK,CAAC,YAAY;gBAC7B,UAAU,EAAE,KAAK,CAAC,aAAa;aAChC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AA9DD,kCA8DC;AAED,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC","sourcesContent":["import * as fs from \"fs/promises\";\n\nimport { SupportedCodec } from \"../../../../../rtp/src/container/webm\";\nimport {\n JitterBuffer,\n MediaStreamTrack,\n SampleBuilder,\n WebmOutput,\n} from \"../../..\";\nimport { MediaWriter } from \".\";\n\nexport class WebmFactory extends MediaWriter {\n webm?: WebmOutput;\n\n start(tracks: MediaStreamTrack[]) {\n this.webm = new WebmOutput(\n fs,\n this.path,\n tracks.map((track, i) => {\n const trackNumber = i + 1;\n const payloadType = track.codec!.payloadType;\n\n if (track.kind === \"video\") {\n const codec = ((): SupportedCodec => {\n switch (track.codec?.name.toLowerCase() as SupportedVideoCodec) {\n case \"vp8\":\n return \"VP8\";\n case \"vp9\":\n return \"VP9\";\n case \"h264\":\n return \"MPEG4/ISO/AVC\";\n case \"av1x\":\n return \"AV1\";\n default:\n throw new Error();\n }\n })();\n return {\n kind: \"video\",\n clockRate: 90000,\n payloadType,\n trackNumber,\n codec,\n width: this.options.width,\n height: this.options.height,\n };\n } else {\n return {\n kind: \"audio\",\n clockRate: 48000,\n payloadType,\n trackNumber,\n codec: \"OPUS\",\n };\n }\n })\n );\n\n tracks.forEach((track) => {\n const sampleBuilder =\n track.kind === \"video\"\n ? new SampleBuilder((h) => !!h.marker).pipe(this.webm!)\n : new SampleBuilder(() => true).pipe(this.webm!);\n new JitterBuffer({\n rtpStream: track.onReceiveRtp,\n rtcpStream: track.onReceiveRtcp,\n }).pipe(sampleBuilder);\n });\n }\n\n async stop() {\n await this.webm!.stop();\n }\n}\n\nconst supportedVideoCodecs = [\"h264\", \"vp8\", \"vp9\", \"av1x\"] as const;\ntype SupportedVideoCodec = typeof supportedVideoCodecs[number];\n"]}
1
+ {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../../src/nonstandard/recorder/writer/webm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAGlC,gCAKkB;AAClB,wBAAgC;AAEhC,MAAa,WAAY,SAAQ,cAAW;IAG1C,KAAK,CAAC,MAA0B;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,cAAU,CACxB,EAAE,EACF,IAAI,CAAC,IAAI,EACT,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAM,CAAC,WAAW,CAAC;YAE7C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC1B,MAAM,KAAK,GAAG,CAAC,GAAmB,EAAE;oBAClC,QAAQ,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAyB,EAAE;wBAC9D,KAAK,KAAK;4BACR,OAAO,KAAK,CAAC;wBACf,KAAK,KAAK;4BACR,OAAO,KAAK,CAAC;wBACf,KAAK,MAAM;4BACT,OAAO,eAAe,CAAC;wBACzB,KAAK,MAAM;4BACT,OAAO,KAAK,CAAC;wBACf;4BACE,MAAM,IAAI,KAAK,EAAE,CAAC;qBACrB;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK;oBAChB,WAAW;oBACX,WAAW;oBACX,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;oBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;iBAC5B,CAAC;aACH;iBAAM;gBACL,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK;oBAChB,WAAW;oBACX,WAAW;oBACX,KAAK,EAAE,MAAM;iBACd,CAAC;aACH;QACH,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,aAAa,GACjB,KAAK,CAAC,IAAI,KAAK,OAAO;gBACpB,CAAC,CAAC,IAAI,iBAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC;gBACvD,CAAC,CAAC,IAAI,iBAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;YACrD,IAAI,gBAAY,CAAC;gBACf,SAAS,EAAE,KAAK,CAAC,YAAY;gBAC7B,UAAU,EAAE,KAAK,CAAC,aAAa;aAChC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AA9DD,kCA8DC;AAED,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC","sourcesContent":["import * as fs from \"fs/promises\";\n\nimport { SupportedCodec } from \"../../../../../rtp/src/container/webm\";\nimport {\n JitterBuffer,\n MediaStreamTrack,\n SampleBuilder,\n WebmOutput,\n} from \"../../..\";\nimport { MediaWriter } from \".\";\n\nexport class WebmFactory extends MediaWriter {\n webm?: WebmOutput;\n\n start(tracks: MediaStreamTrack[]) {\n this.webm = new WebmOutput(\n fs,\n this.path,\n tracks.map((track, i) => {\n const trackNumber = i + 1;\n const payloadType = track.codec!.payloadType;\n\n if (track.kind === \"video\") {\n const codec = ((): SupportedCodec => {\n switch (track.codec?.name.toLowerCase() as SupportedVideoCodec) {\n case \"vp8\":\n return \"VP8\";\n case \"vp9\":\n return \"VP9\";\n case \"h264\":\n return \"MPEG4/ISO/AVC\";\n case \"av1x\":\n return \"AV1\";\n default:\n throw new Error();\n }\n })();\n return {\n kind: \"video\",\n clockRate: 90000,\n payloadType,\n trackNumber,\n codec,\n width: this.options.width,\n height: this.options.height,\n };\n } else {\n return {\n kind: \"audio\",\n clockRate: 48000,\n payloadType,\n trackNumber,\n codec: \"OPUS\",\n };\n }\n })\n );\n\n tracks.forEach((track) => {\n const sampleBuilder =\n track.kind === \"video\"\n ? new SampleBuilder((h) => !!h.marker).pipe(this.webm!)\n : new SampleBuilder(() => true).pipe(this.webm!);\n new JitterBuffer({\n rtpStream: track.onReceiveRtp,\n rtcpStream: track.onReceiveRtcp,\n }).pipe(sampleBuilder);\n });\n }\n\n async stop() {\n await this.webm!.stop();\n }\n}\n\nconst supportedVideoCodecs = [\"h264\", \"vp8\", \"vp9\", \"av1x\"] as const;\ntype SupportedVideoCodec = typeof supportedVideoCodecs[number];\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];