UNPKG

mediasoup-client

Version:

mediasoup client side TypeScript library

728 lines (727 loc) 25.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.generateRouterRtpCapabilities = generateRouterRtpCapabilities; exports.generateNativeRtpCapabilities = generateNativeRtpCapabilities; exports.generateLocalDtlsParameters = generateLocalDtlsParameters; exports.generateTransportRemoteParameters = generateTransportRemoteParameters; exports.generateProducerRemoteParameters = generateProducerRemoteParameters; exports.generateConsumerRemoteParameters = generateConsumerRemoteParameters; exports.generateDataProducerRemoteParameters = generateDataProducerRemoteParameters; exports.generateDataConsumerRemoteParameters = generateDataConsumerRemoteParameters; const utils = __importStar(require("../utils")); function generateFakeUuid() { return String(utils.generateRandomNumber()); } function generateRouterRtpCapabilities() { return utils.deepFreeze({ codecs: [ { mimeType: 'audio/opus', kind: 'audio', preferredPayloadType: 100, clockRate: 48000, channels: 2, rtcpFeedback: [{ type: 'transport-cc' }], parameters: { useinbandfec: 1, foo: 'bar', }, }, { mimeType: 'video/VP8', kind: 'video', preferredPayloadType: 101, clockRate: 90000, rtcpFeedback: [ { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'ccm', parameter: 'fir' }, { type: 'goog-remb' }, { type: 'transport-cc' }, ], parameters: { 'x-google-start-bitrate': 1500, }, }, { mimeType: 'video/rtx', kind: 'video', preferredPayloadType: 102, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 101, }, }, { mimeType: 'video/H264', kind: 'video', preferredPayloadType: 103, clockRate: 90000, rtcpFeedback: [ { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'ccm', parameter: 'fir' }, { type: 'goog-remb' }, { type: 'transport-cc' }, ], parameters: { 'level-asymmetry-allowed': 1, 'packetization-mode': 1, 'profile-level-id': '42e01f', }, }, { mimeType: 'video/rtx', kind: 'video', preferredPayloadType: 104, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 103, }, }, { mimeType: 'video/VP9', kind: 'video', preferredPayloadType: 105, clockRate: 90000, rtcpFeedback: [ { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'ccm', parameter: 'fir' }, { type: 'goog-remb' }, { type: 'transport-cc' }, ], parameters: { 'profile-id': 0, 'x-google-start-bitrate': 1500, }, }, { mimeType: 'video/rtx', kind: 'video', preferredPayloadType: 106, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 105, }, }, ], headerExtensions: [ { kind: 'audio', uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', preferredId: 1, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'video', uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', preferredId: 1, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'video', uri: 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id', preferredId: 2, preferredEncrypt: false, direction: 'recvonly', }, { kind: 'video', uri: 'urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id', preferredId: 3, preferredEncrypt: false, direction: 'recvonly', }, { kind: 'audio', uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time', preferredId: 4, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'video', uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time', preferredId: 4, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'audio', uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', preferredId: 5, preferredEncrypt: false, direction: 'recvonly', }, { kind: 'video', uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', preferredId: 5, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'audio', uri: 'urn:ietf:params:rtp-hdrext:ssrc-audio-level', preferredId: 10, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'video', uri: 'urn:3gpp:video-orientation', preferredId: 11, preferredEncrypt: false, direction: 'sendrecv', }, { kind: 'video', uri: 'urn:ietf:params:rtp-hdrext:toffset', preferredId: 12, preferredEncrypt: false, direction: 'sendrecv', }, ], }); } // NOTE: We don't freeze these RTP capabilities because we do need to normalize // them as we do in real browser handlers (this is an object supposed to be // generated internally so it's ok). function generateNativeRtpCapabilities() { return { codecs: [ { mimeType: 'audio/opus', kind: 'audio', preferredPayloadType: 111, clockRate: 48000, channels: 2, rtcpFeedback: [{ type: 'transport-cc' }], parameters: { minptime: 10, useinbandfec: 1, }, }, { mimeType: 'audio/ISAC', kind: 'audio', preferredPayloadType: 103, clockRate: 16000, channels: 1, rtcpFeedback: [{ type: 'transport-cc' }], parameters: {}, }, { mimeType: 'audio/CN', kind: 'audio', preferredPayloadType: 106, clockRate: 32000, channels: 1, rtcpFeedback: [{ type: 'transport-cc' }], parameters: {}, }, { mimeType: 'audio/foo', kind: 'audio', preferredPayloadType: 107, clockRate: 90000, channels: 4, rtcpFeedback: [{ type: 'foo-qwe-qwe' }], parameters: { foo: 'lalala', }, }, { mimeType: 'video/BAZCODEC', kind: 'video', preferredPayloadType: 100, clockRate: 90000, rtcpFeedback: [ { type: 'foo' }, { type: 'transport-cc' }, { type: 'ccm', parameter: 'fir' }, { type: 'nack' }, { type: 'nack', parameter: 'pli' }, ], parameters: { baz: '1234abcd', }, }, { mimeType: 'video/rtx', kind: 'video', preferredPayloadType: 101, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 100, }, }, { mimeType: 'video/VP8', kind: 'video', preferredPayloadType: 96, clockRate: 90000, rtcpFeedback: [ { type: 'goog-remb' }, { type: 'transport-cc' }, { type: 'ccm', parameter: 'fir' }, { type: 'nack' }, { type: 'nack', parameter: 'pli' }, ], parameters: { baz: '1234abcd', }, }, { mimeType: 'video/rtx', kind: 'video', preferredPayloadType: 97, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 96, }, }, { mimeType: 'video/VP9', kind: 'video', preferredPayloadType: 98, clockRate: 90000, rtcpFeedback: [ { type: 'goog-remb' }, { type: 'transport-cc' }, { type: 'ccm', parameter: 'fir' }, { type: 'nack' }, { type: 'nack', parameter: 'pli' }, ], parameters: { 'profile-id': 0, }, }, { mimeType: 'video/rtx', kind: 'video', preferredPayloadType: 99, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 98, }, }, ], headerExtensions: [ { kind: 'audio', uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', preferredId: 1, }, { kind: 'video', uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', preferredId: 1, }, { kind: 'video', uri: 'urn:ietf:params:rtp-hdrext:toffset', preferredId: 2, }, { kind: 'video', uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time', preferredId: 3, }, { kind: 'video', uri: 'urn:3gpp:video-orientation', preferredId: 4, }, { kind: 'video', uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', preferredId: 5, }, { kind: 'video', uri: 'http://www.webrtc.org/experiments/rtp-hdrext/playout-delay', preferredId: 6, }, { kind: 'video', // @ts-expect-error --- ON purpose. uri: 'http://www.webrtc.org/experiments/rtp-hdrext/video-content-type', preferredId: 7, }, { kind: 'video', // @ts-expect-error --- ON purpose. uri: 'http://www.webrtc.org/experiments/rtp-hdrext/video-timing', preferredId: 8, }, { kind: 'audio', uri: 'urn:ietf:params:rtp-hdrext:ssrc-audio-level', preferredId: 10, }, ], }; } function generateLocalDtlsParameters() { return utils.deepFreeze({ fingerprints: [ { algorithm: 'sha-256', value: '82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD', }, ], role: 'auto', }); } function generateTransportRemoteParameters() { return { id: generateFakeUuid(), iceParameters: utils.deepFreeze({ iceLite: true, password: 'yku5ej8nvfaor28lvtrabcx0wkrpkztz', usernameFragment: 'h3hk1iz6qqlnqlne', }), iceCandidates: utils.deepFreeze([ { foundation: 'udpcandidate', address: '9.9.9.9', ip: '9.9.9.9', port: 40533, priority: 1078862079, protocol: 'udp', type: 'host', tcpType: 'passive', }, { foundation: 'udpcandidate', address: '9.9.9.9', ip: '9:9:9:9:9:9', port: 41333, priority: 1078862089, protocol: 'udp', type: 'host', tcpType: 'passive', }, ]), dtlsParameters: utils.deepFreeze({ fingerprints: [ { algorithm: 'sha-256', value: 'A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71', }, { algorithm: 'sha-384', value: '03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0', }, { algorithm: 'sha-512', value: '84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C', }, ], role: 'auto', }), sctpParameters: utils.deepFreeze({ port: 5000, maxSendMessageSize: 50000, maxReceiveMessageSize: 50000, }), }; } function generateProducerRemoteParameters() { return utils.deepFreeze({ id: generateFakeUuid(), }); } function generateConsumerRemoteParameters({ id, codecMimeType, } = {}) { switch (codecMimeType) { case 'audio/opus': { return { id: id ?? generateFakeUuid(), producerId: generateFakeUuid(), kind: 'audio', rtpParameters: utils.deepFreeze({ codecs: [ { mimeType: 'audio/opus', payloadType: 100, clockRate: 48000, channels: 2, rtcpFeedback: [{ type: 'transport-cc' }], parameters: { useinbandfec: 1, foo: 'bar', }, }, ], encodings: [ { ssrc: 46687003, }, ], headerExtensions: [ { uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', id: 1, }, { uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', id: 5, }, { uri: 'urn:ietf:params:rtp-hdrext:ssrc-audio-level', id: 10, }, ], rtcp: { cname: 'wB4Ql4lrsxYLjzuN', reducedSize: true, mux: true, }, }), }; } case 'audio/ISAC': { return { id: id ?? generateFakeUuid(), producerId: generateFakeUuid(), kind: 'audio', rtpParameters: utils.deepFreeze({ codecs: [ { mimeType: 'audio/ISAC', payloadType: 111, clockRate: 16000, channels: 1, rtcpFeedback: [{ type: 'transport-cc' }], parameters: {}, }, ], encodings: [ { ssrc: 46687004, }, ], headerExtensions: [ { uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', id: 1, }, { uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', id: 5, }, ], rtcp: { cname: 'wB4Ql4lrsxYLjzuN', reducedSize: true, mux: true, }, }), }; } case 'video/VP8': { return { id: id ?? generateFakeUuid(), producerId: generateFakeUuid(), kind: 'video', rtpParameters: utils.deepFreeze({ codecs: [ { mimeType: 'video/VP8', payloadType: 101, clockRate: 90000, rtcpFeedback: [ { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'ccm', parameter: 'fir' }, { type: 'goog-remb' }, { type: 'transport-cc' }, ], parameters: { 'x-google-start-bitrate': 1500, }, }, { mimeType: 'video/rtx', payloadType: 102, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 101, }, }, ], encodings: [ { ssrc: 99991111, rtx: { ssrc: 99991112, }, }, ], headerExtensions: [ { uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', id: 1, }, { uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time', id: 4, }, { uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', id: 5, }, { uri: 'urn:3gpp:video-orientation', id: 11, }, { uri: 'urn:ietf:params:rtp-hdrext:toffset', id: 12, }, ], rtcp: { cname: 'wB4Ql4lrsxYLjzuN', reducedSize: true, mux: true, }, }), }; } case 'video/H264': { return { id: id ?? generateFakeUuid(), producerId: generateFakeUuid(), kind: 'video', rtpParameters: utils.deepFreeze({ codecs: [ { mimeType: 'video/H264', payloadType: 103, clockRate: 90000, rtcpFeedback: [ { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'ccm', parameter: 'fir' }, { type: 'goog-remb' }, { type: 'transport-cc' }, ], parameters: { 'level-asymmetry-allowed': 1, 'packetization-mode': 1, 'profile-level-id': '42e01f', }, }, { mimeType: 'video/rtx', payloadType: 104, clockRate: 90000, rtcpFeedback: [], parameters: { apt: 103, }, }, ], encodings: [ { ssrc: 99991113, rtx: { ssrc: 99991114, }, }, ], headerExtensions: [ { uri: 'urn:ietf:params:rtp-hdrext:sdes:mid', id: 1, }, { uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time', id: 4, }, { uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01', id: 5, }, { uri: 'urn:3gpp:video-orientation', id: 11, }, { uri: 'urn:ietf:params:rtp-hdrext:toffset', id: 12, }, ], rtcp: { cname: 'wB4Ql4lrsxYLjzuN', reducedSize: true, mux: true, }, }), }; } default: { throw new TypeError(`unknown codecMimeType '${codecMimeType}'`); } } } function generateDataProducerRemoteParameters() { return utils.deepFreeze({ id: generateFakeUuid(), }); } function generateDataConsumerRemoteParameters({ id, } = {}) { return { id: id ?? generateFakeUuid(), dataProducerId: generateFakeUuid(), sctpStreamParameters: utils.deepFreeze({ streamId: 666, maxPacketLifeTime: 5000, maxRetransmits: undefined, }), }; }