werift 0.15.7 → 0.15.10
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.
- package/lib/common/src/array.d.ts +1 -0
- package/lib/common/src/array.js +15 -0
- package/lib/common/src/array.js.map +1 -0
- package/lib/common/src/binary.d.ts +2 -0
- package/lib/common/src/binary.js +30 -1
- package/lib/common/src/binary.js.map +1 -1
- package/lib/common/src/index.d.ts +1 -0
- package/lib/common/src/index.js +1 -0
- package/lib/common/src/index.js.map +1 -1
- package/lib/dtls/src/context/cipher.d.ts +1 -1
- package/lib/dtls/src/transport.d.ts +1 -0
- package/lib/ice/src/stun/protocol.d.ts +1 -1
- package/lib/ice/src/transport.d.ts +2 -0
- package/lib/rtp/src/srtp/context/context.d.ts +1 -0
- package/lib/sctp/src/transport.d.ts +1 -0
- package/lib/webrtc/src/media/parameters.d.ts +1 -8
- package/lib/webrtc/src/media/parameters.js +4 -11
- package/lib/webrtc/src/media/parameters.js.map +1 -1
- package/lib/webrtc/src/nonstandard/userMedia.d.ts +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +11 -3
- package/lib/webrtc/src/peerConnection.js +48 -59
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/transport/dtls.d.ts +4 -2
- package/lib/webrtc/src/transport/dtls.js +26 -4
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +1 -1
- package/package.json +8 -7
- package/src/media/parameters.ts +4 -14
- package/src/peerConnection.ts +69 -70
- package/src/transport/dtls.ts +44 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const deepMerge: <T>(dst: T, src: T) => T;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deepMerge = void 0;
|
|
7
|
+
const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
|
|
8
|
+
const deepMerge = (dst, src) => (0, mergeWith_1.default)(dst, src, (obj, src) => {
|
|
9
|
+
if (!(src == undefined)) {
|
|
10
|
+
return src;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
});
|
|
14
|
+
exports.deepMerge = deepMerge;
|
|
15
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../common/src/array.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAyC;AAElC,MAAM,SAAS,GAAG,CAAI,GAAM,EAAE,GAAM,EAAE,EAAE,CAC7C,IAAA,mBAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE;QACvB,OAAO,GAAG,CAAC;KACZ;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,CAAC;AANQ,QAAA,SAAS,aAMjB","sourcesContent":["import mergeWith from \"lodash/mergeWith\";\n\nexport const deepMerge = <T>(dst: T, src: T) =>\n mergeWith(dst, src, (obj, src) => {\n if (!(src == undefined)) {\n return src;\n }\n return obj;\n });\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
export declare function random16(): number;
|
|
3
3
|
export declare function random32(): number;
|
|
4
|
+
export declare function bufferXor(a: Buffer, b: Buffer): Buffer;
|
|
5
|
+
export declare function bufferArrayXor(arr: Buffer[]): Buffer;
|
|
4
6
|
export declare class BitWriter {
|
|
5
7
|
private bitLength;
|
|
6
8
|
value: number;
|
package/lib/common/src/binary.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BitStream = exports.buffer2ArrayBuffer = exports.dumpBuffer = exports.BufferChain = exports.bufferReader = exports.bufferWriterLE = exports.bufferWriter = exports.paddingBits = exports.paddingByte = exports.getBit = exports.BitWriter2 = exports.BitWriter = exports.random32 = exports.random16 = void 0;
|
|
3
|
+
exports.BitStream = exports.buffer2ArrayBuffer = exports.dumpBuffer = exports.BufferChain = exports.bufferReader = exports.bufferWriterLE = exports.bufferWriter = exports.paddingBits = exports.paddingByte = exports.getBit = exports.BitWriter2 = exports.BitWriter = exports.bufferArrayXor = exports.bufferXor = exports.random32 = exports.random16 = void 0;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
5
|
const jspack_1 = require("jspack");
|
|
6
6
|
function random16() {
|
|
@@ -11,6 +11,32 @@ function random32() {
|
|
|
11
11
|
return jspack_1.jspack.Unpack("!L", (0, crypto_1.randomBytes)(4))[0];
|
|
12
12
|
}
|
|
13
13
|
exports.random32 = random32;
|
|
14
|
+
function bufferXor(a, b) {
|
|
15
|
+
if (a.length !== b.length) {
|
|
16
|
+
throw new TypeError("[webrtc-stun] You can not XOR buffers which length are different");
|
|
17
|
+
}
|
|
18
|
+
const length = a.length;
|
|
19
|
+
const buffer = Buffer.allocUnsafe(length);
|
|
20
|
+
for (let i = 0; i < length; i++) {
|
|
21
|
+
buffer[i] = a[i] ^ b[i];
|
|
22
|
+
}
|
|
23
|
+
return buffer;
|
|
24
|
+
}
|
|
25
|
+
exports.bufferXor = bufferXor;
|
|
26
|
+
function bufferArrayXor(arr) {
|
|
27
|
+
const length = [...arr]
|
|
28
|
+
.sort((a, b) => a.length - b.length)
|
|
29
|
+
.reverse()[0].length;
|
|
30
|
+
const xored = Buffer.allocUnsafe(length);
|
|
31
|
+
for (let i = 0; i < length; i++) {
|
|
32
|
+
xored[i] = 0;
|
|
33
|
+
arr.forEach((buffer) => {
|
|
34
|
+
xored[i] ^= buffer[i] ?? 0;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return xored;
|
|
38
|
+
}
|
|
39
|
+
exports.bufferArrayXor = bufferArrayXor;
|
|
14
40
|
class BitWriter {
|
|
15
41
|
constructor(bitLength) {
|
|
16
42
|
this.bitLength = bitLength;
|
|
@@ -39,6 +65,9 @@ class BitWriter2 {
|
|
|
39
65
|
this.bitLength = bitLength;
|
|
40
66
|
this._value = 0n;
|
|
41
67
|
this.offset = 0n;
|
|
68
|
+
if (bitLength > 32) {
|
|
69
|
+
throw new Error();
|
|
70
|
+
}
|
|
42
71
|
}
|
|
43
72
|
set(value, size = 1) {
|
|
44
73
|
let value_b = BigInt(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../common/src/binary.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport { jspack } from \"jspack\";\n\nexport function random16() {\n return jspack.Unpack(\"!H\", randomBytes(2))[0];\n}\n\nexport function random32() {\n return jspack.Unpack(\"!L\", randomBytes(4))[0];\n}\n\nexport class BitWriter {\n value = 0;\n\n constructor(private bitLength: number) {}\n\n set(size: number, startIndex: number, value: number) {\n value &= (1 << size) - 1;\n this.value |= value << (this.bitLength - size - startIndex);\n\n return this;\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport class BitWriter2 {\n private _value = 0n;\n offset = 0n;\n\n /**\n * 各valueがオクテットを跨いではならない\n */\n constructor(\n /**Max 32bit */\n private bitLength: number\n ) {}\n\n set(value: number, size: number = 1) {\n let value_b = BigInt(value);\n const size_b = BigInt(size);\n\n value_b &= (1n << size_b) - 1n;\n this._value |= value_b << (BigInt(this.bitLength) - size_b - this.offset);\n this.offset += size_b;\n return this;\n }\n\n get value() {\n return Number(this._value);\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport function getBit(bits: number, startIndex: number, length: number = 1) {\n let bin = bits.toString(2).split(\"\");\n bin = [...Array(8 - bin.length).fill(\"0\"), ...bin];\n const s = bin.slice(startIndex, startIndex + length).join(\"\");\n const v = parseInt(s, 2);\n return v;\n}\n\nexport function paddingByte(bits: number) {\n const dec = bits.toString(2).split(\"\");\n return [...[...Array(8 - dec.length)].map(() => \"0\"), ...dec].join(\"\");\n}\n\nexport function paddingBits(bits: number, expectLength: number) {\n const dec = bits.toString(2);\n return [...[...Array(expectLength - dec.length)].map(() => \"0\"), ...dec].join(\n \"\"\n );\n}\n\nexport function bufferWriter(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64BE(v as bigint, offset);\n else buf.writeUIntBE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferWriterLE(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64LE(v as bigint, offset);\n else buf.writeUIntLE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferReader(buf: Buffer, bytes: number[]) {\n let offset = 0;\n return bytes.map((v) => {\n let read: number | bigint;\n if (v === 8) {\n read = buf.readBigUInt64BE(offset);\n } else {\n read = buf.readUIntBE(offset, v);\n }\n\n offset += v;\n\n return read as any;\n });\n}\n\nexport class BufferChain {\n buffer: Buffer;\n\n constructor(size: number) {\n this.buffer = Buffer.alloc(size);\n }\n\n writeInt16BE(value: number, offset?: number | undefined) {\n this.buffer.writeInt16BE(value, offset);\n return this;\n }\n\n writeUInt8(value: number, offset?: number | undefined) {\n this.buffer.writeUInt8(value, offset);\n return this;\n }\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport function buffer2ArrayBuffer(buf: Buffer) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\nexport class BitStream {\n private position = 0;\n private bitsPending = 0;\n\n constructor(public uint8Array: Buffer) {}\n\n writeBits(bits: number, value: number): BitStream {\n if (bits == 0) {\n return this;\n }\n value &= 0xffffffff >>> (32 - bits);\n let bitsConsumed;\n if (this.bitsPending > 0) {\n if (this.bitsPending > bits) {\n this.uint8Array[this.position - 1] |=\n value << (this.bitsPending - bits);\n bitsConsumed = bits;\n this.bitsPending -= bits;\n } else if (this.bitsPending == bits) {\n this.uint8Array[this.position - 1] |= value;\n bitsConsumed = bits;\n this.bitsPending = 0;\n } else {\n this.uint8Array[this.position - 1] |=\n value >> (bits - this.bitsPending);\n // ???\n bitsConsumed = this.bitsPending;\n this.bitsPending = 0;\n }\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n this.uint8Array[this.position++] =\n (value >> (bits - bitsConsumed)) << this.bitsPending;\n }\n bits -= bitsConsumed;\n if (bits > 0) {\n this.writeBits(bits, value);\n }\n\n return this;\n }\n\n readBits(bits: number, bitBuffer?: number): any {\n if (typeof bitBuffer == \"undefined\") {\n bitBuffer = 0;\n }\n if (bits == 0) {\n return bitBuffer;\n }\n let partial: number;\n let bitsConsumed: number;\n if (this.bitsPending > 0) {\n const byte =\n this.uint8Array[this.position - 1] & (0xff >> (8 - this.bitsPending));\n bitsConsumed = Math.min(this.bitsPending, bits);\n this.bitsPending -= bitsConsumed;\n partial = byte >> this.bitsPending;\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n partial = this.uint8Array[this.position++] >> this.bitsPending;\n }\n bits -= bitsConsumed;\n bitBuffer = (bitBuffer << bitsConsumed) | partial;\n return bits > 0 ? this.readBits(bits, bitBuffer) : bitBuffer;\n }\n\n seekTo(bitPos: number) {\n this.position = (bitPos / 8) | 0;\n this.bitsPending = bitPos % 8;\n if (this.bitsPending > 0) {\n this.bitsPending = 8 - this.bitsPending;\n this.position++;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../common/src/binary.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport { jspack } from \"jspack\";\n\nexport function random16() {\n return jspack.Unpack(\"!H\", randomBytes(2))[0];\n}\n\nexport function random32() {\n return jspack.Unpack(\"!L\", randomBytes(4))[0];\n}\n\nexport function bufferXor(a: Buffer, b: Buffer): Buffer {\n if (a.length !== b.length) {\n throw new TypeError(\n \"[webrtc-stun] You can not XOR buffers which length are different\"\n );\n }\n\n const length = a.length;\n const buffer = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n buffer[i] = a[i] ^ b[i];\n }\n\n return buffer;\n}\n\nexport function bufferArrayXor(arr: Buffer[]): Buffer {\n const length = [...arr]\n .sort((a, b) => a.length - b.length)\n .reverse()[0].length;\n const xored = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n xored[i] = 0;\n arr.forEach((buffer) => {\n xored[i] ^= buffer[i] ?? 0;\n });\n }\n\n return xored;\n}\n\nexport class BitWriter {\n value = 0;\n\n constructor(private bitLength: number) {}\n\n set(size: number, startIndex: number, value: number) {\n value &= (1 << size) - 1;\n this.value |= value << (this.bitLength - size - startIndex);\n\n return this;\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport class BitWriter2 {\n private _value = 0n;\n offset = 0n;\n\n /**\n * 各valueがオクテットを跨いではならない\n */\n constructor(\n /**Max 32bit */\n private bitLength: number\n ) {\n if (bitLength > 32) {\n throw new Error();\n }\n }\n\n set(value: number, size: number = 1) {\n let value_b = BigInt(value);\n const size_b = BigInt(size);\n\n value_b &= (1n << size_b) - 1n;\n this._value |= value_b << (BigInt(this.bitLength) - size_b - this.offset);\n this.offset += size_b;\n return this;\n }\n\n get value() {\n return Number(this._value);\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport function getBit(bits: number, startIndex: number, length: number = 1) {\n let bin = bits.toString(2).split(\"\");\n bin = [...Array(8 - bin.length).fill(\"0\"), ...bin];\n const s = bin.slice(startIndex, startIndex + length).join(\"\");\n const v = parseInt(s, 2);\n return v;\n}\n\nexport function paddingByte(bits: number) {\n const dec = bits.toString(2).split(\"\");\n return [...[...Array(8 - dec.length)].map(() => \"0\"), ...dec].join(\"\");\n}\n\nexport function paddingBits(bits: number, expectLength: number) {\n const dec = bits.toString(2);\n return [...[...Array(expectLength - dec.length)].map(() => \"0\"), ...dec].join(\n \"\"\n );\n}\n\nexport function bufferWriter(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64BE(v as bigint, offset);\n else buf.writeUIntBE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferWriterLE(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64LE(v as bigint, offset);\n else buf.writeUIntLE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferReader(buf: Buffer, bytes: number[]) {\n let offset = 0;\n return bytes.map((v) => {\n let read: number | bigint;\n if (v === 8) {\n read = buf.readBigUInt64BE(offset);\n } else {\n read = buf.readUIntBE(offset, v);\n }\n\n offset += v;\n\n return read as any;\n });\n}\n\nexport class BufferChain {\n buffer: Buffer;\n\n constructor(size: number) {\n this.buffer = Buffer.alloc(size);\n }\n\n writeInt16BE(value: number, offset?: number | undefined) {\n this.buffer.writeInt16BE(value, offset);\n return this;\n }\n\n writeUInt8(value: number, offset?: number | undefined) {\n this.buffer.writeUInt8(value, offset);\n return this;\n }\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport function buffer2ArrayBuffer(buf: Buffer) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\nexport class BitStream {\n private position = 0;\n private bitsPending = 0;\n\n constructor(public uint8Array: Buffer) {}\n\n writeBits(bits: number, value: number): BitStream {\n if (bits == 0) {\n return this;\n }\n value &= 0xffffffff >>> (32 - bits);\n let bitsConsumed;\n if (this.bitsPending > 0) {\n if (this.bitsPending > bits) {\n this.uint8Array[this.position - 1] |=\n value << (this.bitsPending - bits);\n bitsConsumed = bits;\n this.bitsPending -= bits;\n } else if (this.bitsPending == bits) {\n this.uint8Array[this.position - 1] |= value;\n bitsConsumed = bits;\n this.bitsPending = 0;\n } else {\n this.uint8Array[this.position - 1] |=\n value >> (bits - this.bitsPending);\n // ???\n bitsConsumed = this.bitsPending;\n this.bitsPending = 0;\n }\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n this.uint8Array[this.position++] =\n (value >> (bits - bitsConsumed)) << this.bitsPending;\n }\n bits -= bitsConsumed;\n if (bits > 0) {\n this.writeBits(bits, value);\n }\n\n return this;\n }\n\n readBits(bits: number, bitBuffer?: number): any {\n if (typeof bitBuffer == \"undefined\") {\n bitBuffer = 0;\n }\n if (bits == 0) {\n return bitBuffer;\n }\n let partial: number;\n let bitsConsumed: number;\n if (this.bitsPending > 0) {\n const byte =\n this.uint8Array[this.position - 1] & (0xff >> (8 - this.bitsPending));\n bitsConsumed = Math.min(this.bitsPending, bits);\n this.bitsPending -= bitsConsumed;\n partial = byte >> this.bitsPending;\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n partial = this.uint8Array[this.position++] >> this.bitsPending;\n }\n bits -= bitsConsumed;\n bitBuffer = (bitBuffer << bitsConsumed) | partial;\n return bits > 0 ? this.readBits(bits, bitBuffer) : bitBuffer;\n }\n\n seekTo(bitPos: number) {\n this.position = (bitPos / 8) | 0;\n this.bitsPending = bitPos % 8;\n if (this.bitsPending > 0) {\n this.bitsPending = 8 - this.bitsPending;\n this.position++;\n }\n }\n}\n"]}
|
package/lib/common/src/index.js
CHANGED
|
@@ -18,4 +18,5 @@ __exportStar(require("./binary"), exports);
|
|
|
18
18
|
__exportStar(require("./number"), exports);
|
|
19
19
|
__exportStar(require("./promise"), exports);
|
|
20
20
|
__exportStar(require("./network"), exports);
|
|
21
|
+
__exportStar(require("./array"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../common/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,4CAA0B","sourcesContent":["export * from \"./binary\";\nexport * from \"./number\";\nexport * from \"./promise\";\nexport * from \"./network\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../common/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,4CAA0B;AAC1B,0CAAwB","sourcesContent":["export * from \"./binary\";\nexport * from \"./number\";\nexport * from \"./promise\";\nexport * from \"./network\";\nexport * from \"./array\";\n"]}
|
|
@@ -28,7 +28,7 @@ export declare class CipherContext {
|
|
|
28
28
|
* @param signatureHash
|
|
29
29
|
* @param namedCurveAlgorithm necessary when use ecdsa
|
|
30
30
|
*/
|
|
31
|
-
static createSelfSignedCertificateWithKey: (signatureHash: SignatureHash, namedCurveAlgorithm?: NamedCurveAlgorithms
|
|
31
|
+
static createSelfSignedCertificateWithKey: (signatureHash: SignatureHash, namedCurveAlgorithm?: NamedCurveAlgorithms) => Promise<{
|
|
32
32
|
certPem: string;
|
|
33
33
|
keyPem: string;
|
|
34
34
|
signatureHash: SignatureHash;
|
|
@@ -19,7 +19,7 @@ export declare class StunProtocol implements Protocol {
|
|
|
19
19
|
private readonly closed;
|
|
20
20
|
constructor(receiver: Connection);
|
|
21
21
|
connectionLost(): void;
|
|
22
|
-
connectionMade: (useIpv4: boolean, portRange?: [number, number]
|
|
22
|
+
connectionMade: (useIpv4: boolean, portRange?: [number, number]) => Promise<void>;
|
|
23
23
|
private datagramReceived;
|
|
24
24
|
getExtraInfo(): Address;
|
|
25
25
|
sendStun(message: Message, addr: Address): Promise<void>;
|
|
@@ -6,14 +6,6 @@ export interface RTCRtpParameters {
|
|
|
6
6
|
repairedRtpStreamId?: string;
|
|
7
7
|
rtcp?: RTCRtcpParameters;
|
|
8
8
|
}
|
|
9
|
-
export declare class RTCRtpCodecCapability {
|
|
10
|
-
mimeType: string;
|
|
11
|
-
clockRate: number;
|
|
12
|
-
channels?: number;
|
|
13
|
-
parameters: {};
|
|
14
|
-
constructor(parameters?: Partial<RTCRtpCodecCapability>);
|
|
15
|
-
get name(): string;
|
|
16
|
-
}
|
|
17
9
|
export declare type RTCPFB = {
|
|
18
10
|
type: string;
|
|
19
11
|
parameter?: string;
|
|
@@ -31,6 +23,7 @@ export declare class RTCRtpCodecParameters {
|
|
|
31
23
|
parameters?: string;
|
|
32
24
|
constructor(props: Pick<RTCRtpCodecParameters, "mimeType" | "clockRate"> & Partial<RTCRtpCodecParameters>);
|
|
33
25
|
get name(): string;
|
|
26
|
+
get contentType(): string;
|
|
34
27
|
get str(): string;
|
|
35
28
|
}
|
|
36
29
|
export declare class RTCRtpHeaderExtensionParameters {
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RTCRtpSimulcastParameters = exports.RTCRtpCodingParameters = exports.RTCRtpRtxParameters = exports.RTCRtcpFeedback = exports.RTCRtcpParameters = exports.RTCRtpHeaderExtensionParameters = exports.RTCRtpCodecParameters =
|
|
4
|
-
class RTCRtpCodecCapability {
|
|
5
|
-
constructor(parameters = {}) {
|
|
6
|
-
this.parameters = {};
|
|
7
|
-
Object.assign(this, parameters);
|
|
8
|
-
}
|
|
9
|
-
get name() {
|
|
10
|
-
return this.mimeType.split("/")[1];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.RTCRtpCodecCapability = RTCRtpCodecCapability;
|
|
3
|
+
exports.RTCRtpSimulcastParameters = exports.RTCRtpCodingParameters = exports.RTCRtpRtxParameters = exports.RTCRtcpFeedback = exports.RTCRtcpParameters = exports.RTCRtpHeaderExtensionParameters = exports.RTCRtpCodecParameters = void 0;
|
|
14
4
|
class RTCRtpCodecParameters {
|
|
15
5
|
constructor(props) {
|
|
16
6
|
this.rtcpFeedback = [];
|
|
@@ -19,6 +9,9 @@ class RTCRtpCodecParameters {
|
|
|
19
9
|
get name() {
|
|
20
10
|
return this.mimeType.split("/")[1];
|
|
21
11
|
}
|
|
12
|
+
get contentType() {
|
|
13
|
+
return this.mimeType.split("/")[0];
|
|
14
|
+
}
|
|
22
15
|
get str() {
|
|
23
16
|
let s = `${this.name}/${this.clockRate}`;
|
|
24
17
|
if (this.channels === 2)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../../../src/media/parameters.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../../../src/media/parameters.ts"],"names":[],"mappings":";;;AAWA,MAAa,qBAAqB;IAYhC,YACE,KACgC;QALlC,iBAAY,GAAa,EAAE,CAAC;QAO1B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,GAAG;QACL,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;YAAE,CAAC,IAAI,IAAI,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAhCD,sDAgCC;AAED,MAAa,+BAA+B;IAI1C,YACE,KAC8C;QAE9C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAVD,0EAUC;AAED,MAAa,iBAAiB;IAK5B,YAAY,QAAoC,EAAE;QAHlD,QAAG,GAAY,KAAK,CAAC;QAInB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AARD,8CAQC;AAED,MAAa,eAAe;IAI1B,YAAY,QAAkC,EAAE;QAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAPD,0CAOC;AACD,MAAa,mBAAmB;IAG9B,YAAY,QAAsC,EAAE;QAClD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAND,kDAMC;AAED,MAAa,sBAAsB;IAKjC,YACE,KACsD;QAEtD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAXD,wDAWC;AAQD,MAAa,yBAAyB;IAGpC,YAAY,KAAgC;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAND,8DAMC","sourcesContent":["export interface RTCRtpParameters {\n codecs: RTCRtpCodecParameters[];\n headerExtensions: RTCRtpHeaderExtensionParameters[];\n muxId?: string;\n rtpStreamId?: string;\n repairedRtpStreamId?: string;\n rtcp?: RTCRtcpParameters;\n}\n\nexport type RTCPFB = { type: string; parameter?: string };\n\nexport class RTCRtpCodecParameters {\n /**\n * When specifying a codec with a fixed payloadType such as PCMU,\n * it is necessary to set the correct PayloadType in RTCRtpCodecParameters in advance.\n */\n payloadType!: number;\n mimeType!: string;\n clockRate!: number;\n channels?: number;\n rtcpFeedback: RTCPFB[] = [];\n parameters?: string;\n\n constructor(\n props: Pick<RTCRtpCodecParameters, \"mimeType\" | \"clockRate\"> &\n Partial<RTCRtpCodecParameters>\n ) {\n Object.assign(this, props);\n }\n\n get name() {\n return this.mimeType.split(\"/\")[1];\n }\n\n get contentType() {\n return this.mimeType.split(\"/\")[0];\n }\n\n get str() {\n let s = `${this.name}/${this.clockRate}`;\n if (this.channels === 2) s += \"/2\";\n return s;\n }\n}\n\nexport class RTCRtpHeaderExtensionParameters {\n id!: number;\n uri!: string;\n\n constructor(\n props: Partial<RTCRtpHeaderExtensionParameters> &\n Pick<RTCRtpHeaderExtensionParameters, \"uri\">\n ) {\n Object.assign(this, props);\n }\n}\n\nexport class RTCRtcpParameters {\n cname?: string;\n mux: boolean = false;\n ssrc?: number;\n\n constructor(props: Partial<RTCRtcpParameters> = {}) {\n Object.assign(this, props);\n }\n}\n\nexport class RTCRtcpFeedback {\n type!: string;\n parameter?: string;\n\n constructor(props: Partial<RTCRtcpFeedback> = {}) {\n Object.assign(this, props);\n }\n}\nexport class RTCRtpRtxParameters {\n ssrc!: number;\n\n constructor(props: Partial<RTCRtpRtxParameters> = {}) {\n Object.assign(this, props);\n }\n}\n\nexport class RTCRtpCodingParameters {\n ssrc!: number;\n payloadType!: number;\n rtx?: RTCRtpRtxParameters;\n\n constructor(\n props: Partial<RTCRtpCodingParameters> &\n Pick<RTCRtpCodingParameters, \"ssrc\" | \"payloadType\">\n ) {\n Object.assign(this, props);\n }\n}\n\nexport interface RTCRtpReceiveParameters extends RTCRtpParameters {\n encodings: RTCRtpCodingParameters[];\n}\n\nexport interface RTCRtpSendParameters extends RTCRtpParameters {}\n\nexport class RTCRtpSimulcastParameters {\n rid!: string;\n direction!: \"send\" | \"recv\";\n constructor(props: RTCRtpSimulcastParameters) {\n Object.assign(this, props);\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MediaStreamTrack } from "../media/track";
|
|
2
|
-
export declare const getUserMp4: (path: string, loop?: boolean
|
|
2
|
+
export declare const getUserMp4: (path: string, loop?: boolean) => Promise<MediaMp4>;
|
|
3
3
|
declare class MediaMp4 {
|
|
4
4
|
private videoPort;
|
|
5
5
|
private audioPort;
|
|
@@ -17,7 +17,7 @@ export declare class RTCPeerConnection extends EventTarget {
|
|
|
17
17
|
readonly cname: string;
|
|
18
18
|
sctpTransport?: RTCSctpTransport;
|
|
19
19
|
masterTransportEstablished: boolean;
|
|
20
|
-
|
|
20
|
+
config: Required<PeerConfig>;
|
|
21
21
|
connectionState: ConnectionState;
|
|
22
22
|
iceConnectionState: RTCIceConnectionState;
|
|
23
23
|
iceGatheringState: IceGathererState;
|
|
@@ -51,7 +51,7 @@ export declare class RTCPeerConnection extends EventTarget {
|
|
|
51
51
|
private shouldNegotiationneeded;
|
|
52
52
|
get dtlsTransports(): RTCDtlsTransport[];
|
|
53
53
|
get iceTransports(): RTCIceTransport[];
|
|
54
|
-
constructor(
|
|
54
|
+
constructor(config?: Partial<PeerConfig>);
|
|
55
55
|
get localDescription(): import("./sdp").RTCSessionDescription | undefined;
|
|
56
56
|
get remoteDescription(): import("./sdp").RTCSessionDescription | undefined;
|
|
57
57
|
private get _localDescription();
|
|
@@ -113,7 +113,7 @@ export declare class RTCPeerConnection extends EventTarget {
|
|
|
113
113
|
export declare function createMediaDescriptionForTransceiver(transceiver: RTCRtpTransceiver, cname: string, direction: Direction): MediaDescription;
|
|
114
114
|
export declare function createMediaDescriptionForSctp(sctp: RTCSctpTransport): MediaDescription;
|
|
115
115
|
export declare function addTransportDescription(media: MediaDescription, dtlsTransport: RTCDtlsTransport): void;
|
|
116
|
-
export declare function allocateMid(mids: Set<string
|
|
116
|
+
export declare function allocateMid(mids: Set<string>, type: "dc" | "av"): string;
|
|
117
117
|
export declare type BundlePolicy = "max-compat" | "max-bundle" | "disable";
|
|
118
118
|
export interface PeerConfig {
|
|
119
119
|
codecs: Partial<{
|
|
@@ -136,6 +136,14 @@ export interface PeerConfig {
|
|
|
136
136
|
keys: DtlsKeys;
|
|
137
137
|
}>;
|
|
138
138
|
bundlePolicy: BundlePolicy;
|
|
139
|
+
debug: Partial<{
|
|
140
|
+
/**% */
|
|
141
|
+
inboundPacketLoss: number;
|
|
142
|
+
/**% */
|
|
143
|
+
outboundPacketLoss: number;
|
|
144
|
+
/**ms */
|
|
145
|
+
receiverReportDelay: number;
|
|
146
|
+
}>;
|
|
139
147
|
}
|
|
140
148
|
export declare const findCodecByMimeType: (codecs: RTCRtpCodecParameters[], target: RTCRtpCodecParameters) => RTCRtpCodecParameters | undefined;
|
|
141
149
|
export declare type RTCIceServer = {
|
|
@@ -33,6 +33,7 @@ const isEqual_1 = __importDefault(require("lodash/isEqual"));
|
|
|
33
33
|
const rx_mini_1 = __importDefault(require("rx.mini"));
|
|
34
34
|
const uuid = __importStar(require("uuid"));
|
|
35
35
|
const _1 = require(".");
|
|
36
|
+
const _2 = require(".");
|
|
36
37
|
const const_1 = require("./const");
|
|
37
38
|
const dataChannel_1 = require("./dataChannel");
|
|
38
39
|
const helper_1 = require("./helper");
|
|
@@ -49,11 +50,11 @@ const sctp_1 = require("./transport/sctp");
|
|
|
49
50
|
const utils_1 = require("./utils");
|
|
50
51
|
const log = (0, debug_1.default)("werift:packages/webrtc/src/peerConnection.ts");
|
|
51
52
|
class RTCPeerConnection extends helper_1.EventTarget {
|
|
52
|
-
constructor(
|
|
53
|
+
constructor(config = {}) {
|
|
53
54
|
super();
|
|
54
55
|
this.cname = uuid.v4();
|
|
55
56
|
this.masterTransportEstablished = false;
|
|
56
|
-
this.
|
|
57
|
+
this.config = (0, cloneDeep_1.default)(exports.defaultPeerConfig);
|
|
57
58
|
this.connectionState = "new";
|
|
58
59
|
this.iceConnectionState = "new";
|
|
59
60
|
this.iceGatheringState = "new";
|
|
@@ -86,25 +87,17 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
86
87
|
this.onnegotiationneeded({});
|
|
87
88
|
});
|
|
88
89
|
};
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
this.configuration.iceTransportPolicy = iceTransportPolicy;
|
|
93
|
-
if (icePortRange) {
|
|
94
|
-
const [min, max] = icePortRange;
|
|
90
|
+
(0, _1.deepMerge)(this.config, config);
|
|
91
|
+
if (this.config.icePortRange) {
|
|
92
|
+
const [min, max] = this.config.icePortRange;
|
|
95
93
|
if (min === max)
|
|
96
94
|
throw new Error("should not be same value");
|
|
97
95
|
if (min >= max)
|
|
98
96
|
throw new Error("The min must be less than max");
|
|
99
|
-
this.configuration.icePortRange = icePortRange;
|
|
100
97
|
}
|
|
101
|
-
if (codecs?.audio)
|
|
102
|
-
this.configuration.codecs.audio = codecs.audio;
|
|
103
|
-
if (codecs?.video)
|
|
104
|
-
this.configuration.codecs.video = codecs.video;
|
|
105
98
|
for (const [i, codecParams] of (0, helper_1.enumerate)([
|
|
106
|
-
...(this.
|
|
107
|
-
...(this.
|
|
99
|
+
...(this.config.codecs.audio || []),
|
|
100
|
+
...(this.config.codecs.video || []),
|
|
108
101
|
])) {
|
|
109
102
|
if (codecParams.payloadType != undefined) {
|
|
110
103
|
continue;
|
|
@@ -118,25 +111,23 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
118
111
|
break;
|
|
119
112
|
case "red":
|
|
120
113
|
{
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
114
|
+
if (codecParams.contentType === "audio") {
|
|
115
|
+
const redundant = codecParams.payloadType + 1;
|
|
116
|
+
codecParams.parameters = `${redundant}/${redundant}`;
|
|
117
|
+
codecParams.payloadType = 63;
|
|
118
|
+
}
|
|
124
119
|
}
|
|
125
120
|
break;
|
|
126
121
|
}
|
|
127
122
|
}
|
|
128
|
-
if (headerExtensions?.audio)
|
|
129
|
-
this.configuration.headerExtensions.audio = headerExtensions.audio;
|
|
130
|
-
if (headerExtensions?.video)
|
|
131
|
-
this.configuration.headerExtensions.video = headerExtensions.video;
|
|
132
123
|
[
|
|
133
|
-
...(this.
|
|
134
|
-
...(this.
|
|
124
|
+
...(this.config.headerExtensions.audio || []),
|
|
125
|
+
...(this.config.headerExtensions.video || []),
|
|
135
126
|
].forEach((v, i) => {
|
|
136
127
|
v.id = 1 + i;
|
|
137
128
|
});
|
|
138
|
-
if (dtls) {
|
|
139
|
-
const { keys } = dtls;
|
|
129
|
+
if (this.config.dtls) {
|
|
130
|
+
const { keys } = this.config.dtls;
|
|
140
131
|
if (keys) {
|
|
141
132
|
this.certificates.push(new dtls_1.RTCCertificate(keys.keyPem, keys.certPem, keys.signatureHash));
|
|
142
133
|
}
|
|
@@ -151,9 +142,6 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
151
142
|
break;
|
|
152
143
|
}
|
|
153
144
|
});
|
|
154
|
-
if (bundlePolicy) {
|
|
155
|
-
this.configuration.bundlePolicy = bundlePolicy;
|
|
156
|
-
}
|
|
157
145
|
}
|
|
158
146
|
get dtlsTransports() {
|
|
159
147
|
const transports = this.transceivers.map((t) => t.dtlsTransport);
|
|
@@ -200,11 +188,11 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
200
188
|
buildOfferSdp() {
|
|
201
189
|
this.transceivers.forEach((transceiver) => {
|
|
202
190
|
if (transceiver.codecs.length === 0) {
|
|
203
|
-
transceiver.codecs = this.
|
|
191
|
+
transceiver.codecs = this.config.codecs[transceiver.kind];
|
|
204
192
|
}
|
|
205
193
|
if (transceiver.headerExtensions.length === 0) {
|
|
206
194
|
transceiver.headerExtensions =
|
|
207
|
-
this.
|
|
195
|
+
this.config.headerExtensions[transceiver.kind];
|
|
208
196
|
}
|
|
209
197
|
});
|
|
210
198
|
const description = new sdp_1.SessionDescription();
|
|
@@ -241,7 +229,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
241
229
|
.forEach((transceiver) => {
|
|
242
230
|
transceiver.mLineIndex = description.media.length;
|
|
243
231
|
if (transceiver.mid == undefined) {
|
|
244
|
-
transceiver.mid = allocateMid(this.seenMid
|
|
232
|
+
transceiver.mid = allocateMid(this.seenMid, "av");
|
|
245
233
|
}
|
|
246
234
|
description.media.push(createMediaDescriptionForTransceiver(transceiver, this.cname, transceiver.direction));
|
|
247
235
|
});
|
|
@@ -249,11 +237,11 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
249
237
|
!description.media.find((m) => m.kind === "application")) {
|
|
250
238
|
this.sctpTransport.mLineIndex = description.media.length;
|
|
251
239
|
if (this.sctpTransport.mid == undefined) {
|
|
252
|
-
this.sctpTransport.mid = allocateMid(this.seenMid
|
|
240
|
+
this.sctpTransport.mid = allocateMid(this.seenMid, "dc");
|
|
253
241
|
}
|
|
254
242
|
description.media.push(createMediaDescriptionForSctp(this.sctpTransport));
|
|
255
243
|
}
|
|
256
|
-
if (this.
|
|
244
|
+
if (this.config.bundlePolicy !== "disable") {
|
|
257
245
|
const mids = description.media
|
|
258
246
|
.map((m) => m.rtp.muxId)
|
|
259
247
|
.filter((v) => v);
|
|
@@ -314,15 +302,15 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
314
302
|
const [existing] = this.iceTransports;
|
|
315
303
|
// Gather ICE candidates for only one track. If the remote endpoint is not bundle-aware, negotiate only one media track.
|
|
316
304
|
// https://w3c.github.io/webrtc-pc/#rtcbundlepolicy-enum
|
|
317
|
-
if (this.
|
|
305
|
+
if (this.config.bundlePolicy === "max-bundle") {
|
|
318
306
|
if (existing) {
|
|
319
307
|
return this.dtlsTransports[0];
|
|
320
308
|
}
|
|
321
309
|
}
|
|
322
310
|
const iceGatherer = new ice_1.RTCIceGatherer({
|
|
323
|
-
...(0, utils_1.parseIceServers)(this.
|
|
324
|
-
forceTurn: this.
|
|
325
|
-
portRange: this.
|
|
311
|
+
...(0, utils_1.parseIceServers)(this.config.iceServers),
|
|
312
|
+
forceTurn: this.config.iceTransportPolicy === "relay",
|
|
313
|
+
portRange: this.config.icePortRange,
|
|
326
314
|
});
|
|
327
315
|
if (existing) {
|
|
328
316
|
iceGatherer.connection.localUserName = existing.connection.localUserName;
|
|
@@ -339,8 +327,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
339
327
|
iceTransport.iceGather.onIceCandidate = (candidate) => {
|
|
340
328
|
if (!this.localDescription)
|
|
341
329
|
return;
|
|
342
|
-
if (this.
|
|
343
|
-
this.remoteIsBundled) {
|
|
330
|
+
if (this.config.bundlePolicy === "max-bundle" || this.remoteIsBundled) {
|
|
344
331
|
candidate.sdpMLineIndex = 0;
|
|
345
332
|
const media = this._localDescription?.media[0];
|
|
346
333
|
if (media) {
|
|
@@ -365,7 +352,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
365
352
|
}
|
|
366
353
|
this.emit("icecandidate", { candidate });
|
|
367
354
|
};
|
|
368
|
-
const dtlsTransport = new dtls_1.RTCDtlsTransport(iceTransport, this.router, this.certificates, srtpProfiles);
|
|
355
|
+
const dtlsTransport = new dtls_1.RTCDtlsTransport(this.config, iceTransport, this.router, this.certificates, srtpProfiles);
|
|
369
356
|
return dtlsTransport;
|
|
370
357
|
}
|
|
371
358
|
createSctpTransport() {
|
|
@@ -566,7 +553,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
566
553
|
headerExtensions: transceiver.headerExtensions,
|
|
567
554
|
encodings: Object.values(transceiver.codecs.reduce((acc, codec) => {
|
|
568
555
|
if (codec.name.toLowerCase() === "rtx") {
|
|
569
|
-
const params = (0,
|
|
556
|
+
const params = (0, _2.codecParametersFromString)(codec.parameters ?? "");
|
|
570
557
|
const apt = acc[params["apt"]];
|
|
571
558
|
if (apt && media.ssrc.length === 2) {
|
|
572
559
|
apt.rtx = new parameters_1.RTCRtpRtxParameters({ ssrc: media.ssrc[1].ssrc });
|
|
@@ -586,7 +573,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
586
573
|
const remoteSdp = this._remoteDescription;
|
|
587
574
|
if (!remoteSdp)
|
|
588
575
|
return;
|
|
589
|
-
const bundle = remoteSdp.group.find((g) => g.semantic === "BUNDLE" && this.
|
|
576
|
+
const bundle = remoteSdp.group.find((g) => g.semantic === "BUNDLE" && this.config.bundlePolicy !== "disable");
|
|
590
577
|
return bundle;
|
|
591
578
|
}
|
|
592
579
|
async setRemoteDescription(sessionDescription) {
|
|
@@ -697,12 +684,12 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
697
684
|
}
|
|
698
685
|
// # negotiate codecs
|
|
699
686
|
transceiver.codecs = remoteMedia.rtp.codecs.filter((remoteCodec) => {
|
|
700
|
-
const localCodecs = this.
|
|
687
|
+
const localCodecs = this.config.codecs[remoteMedia.kind] || [];
|
|
701
688
|
const existCodec = (0, exports.findCodecByMimeType)(localCodecs, remoteCodec);
|
|
702
689
|
if (!existCodec)
|
|
703
690
|
return false;
|
|
704
691
|
if (existCodec?.name.toLowerCase() === "rtx") {
|
|
705
|
-
const params = (0,
|
|
692
|
+
const params = (0, _2.codecParametersFromString)(existCodec.parameters ?? "");
|
|
706
693
|
const pt = params["apt"];
|
|
707
694
|
const origin = remoteMedia.rtp.codecs.find((c) => c.payloadType === pt);
|
|
708
695
|
if (!origin)
|
|
@@ -715,7 +702,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
715
702
|
if (transceiver.codecs.length === 0) {
|
|
716
703
|
throw new Error("negotiate codecs failed.");
|
|
717
704
|
}
|
|
718
|
-
transceiver.headerExtensions = remoteMedia.rtp.headerExtensions.filter((extension) => (this.
|
|
705
|
+
transceiver.headerExtensions = remoteMedia.rtp.headerExtensions.filter((extension) => (this.config.headerExtensions[remoteMedia.kind] || []).find((v) => v.uri === extension.uri));
|
|
719
706
|
// # configure direction
|
|
720
707
|
const mediaDirection = remoteMedia.direction || "inactive";
|
|
721
708
|
const direction = (0, utils_1.reverseDirection)(mediaDirection);
|
|
@@ -799,10 +786,11 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
799
786
|
const offer = isLocal ? this._remoteDescription : this._localDescription;
|
|
800
787
|
if (!offer)
|
|
801
788
|
throw new Error();
|
|
802
|
-
const
|
|
803
|
-
const
|
|
804
|
-
if (!(0, isEqual_1.default)(offerMedia, answerMedia))
|
|
789
|
+
const answerMedia = description.media.map((v, i) => [v.kind, i]);
|
|
790
|
+
const offerMedia = offer.media.map((v, i) => [v.kind, i]);
|
|
791
|
+
if (!(0, isEqual_1.default)(offerMedia, answerMedia)) {
|
|
805
792
|
throw new Error("Media sections in answer do not match offer");
|
|
793
|
+
}
|
|
806
794
|
}
|
|
807
795
|
}
|
|
808
796
|
fireOnTrack(track, transceiver, stream) {
|
|
@@ -948,7 +936,7 @@ class RTCPeerConnection extends helper_1.EventTarget {
|
|
|
948
936
|
}));
|
|
949
937
|
description.media.push(media);
|
|
950
938
|
});
|
|
951
|
-
if (this.
|
|
939
|
+
if (this.config.bundlePolicy !== "disable") {
|
|
952
940
|
const bundle = new sdp_1.GroupDescription("BUNDLE", []);
|
|
953
941
|
description.media.forEach((media) => {
|
|
954
942
|
bundle.items.push(media.rtp.muxId);
|
|
@@ -1142,10 +1130,12 @@ function addTransportDescription(media, dtlsTransport) {
|
|
|
1142
1130
|
}
|
|
1143
1131
|
}
|
|
1144
1132
|
exports.addTransportDescription = addTransportDescription;
|
|
1145
|
-
function allocateMid(mids) {
|
|
1133
|
+
function allocateMid(mids, type) {
|
|
1146
1134
|
let mid = "";
|
|
1147
1135
|
for (let i = 0;;) {
|
|
1148
|
-
|
|
1136
|
+
// rfc9143.html#name-security-considerations
|
|
1137
|
+
// SHOULD be 3 bytes or fewer to allow them to efficiently fit into the MID RTP header extension
|
|
1138
|
+
mid = (i++).toString() + type;
|
|
1149
1139
|
if (!mids.has(mid))
|
|
1150
1140
|
break;
|
|
1151
1141
|
}
|
|
@@ -1176,20 +1166,19 @@ exports.defaultPeerConfig = {
|
|
|
1176
1166
|
new parameters_1.RTCRtpCodecParameters({
|
|
1177
1167
|
mimeType: "video/VP8",
|
|
1178
1168
|
clockRate: 90000,
|
|
1179
|
-
rtcpFeedback: [
|
|
1180
|
-
{ type: "ccm", parameter: "fir" },
|
|
1181
|
-
{ type: "nack" },
|
|
1182
|
-
{ type: "nack", parameter: "pli" },
|
|
1183
|
-
{ type: "goog-remb" },
|
|
1184
|
-
],
|
|
1169
|
+
rtcpFeedback: [(0, _2.useNACK)(), (0, _2.usePLI)(), (0, _2.useREMB)()],
|
|
1185
1170
|
}),
|
|
1186
1171
|
],
|
|
1187
1172
|
},
|
|
1188
|
-
headerExtensions: {
|
|
1173
|
+
headerExtensions: {
|
|
1174
|
+
audio: [],
|
|
1175
|
+
video: [],
|
|
1176
|
+
},
|
|
1189
1177
|
iceTransportPolicy: "all",
|
|
1190
1178
|
iceServers: [{ urls: "stun:stun.l.google.com:19302" }],
|
|
1191
1179
|
icePortRange: undefined,
|
|
1192
1180
|
dtls: {},
|
|
1193
1181
|
bundlePolicy: "max-compat",
|
|
1182
|
+
debug: {},
|
|
1194
1183
|
};
|
|
1195
1184
|
//# sourceMappingURL=peerConnection.js.map
|