@newgameplusinc/odyssey-audio-video-sdk-dev 1.0.258 → 1.0.259
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/README.md +45 -1
- package/dist/audio/AudioNodeFactory.d.ts +130 -0
- package/dist/audio/AudioNodeFactory.js +158 -0
- package/dist/audio/AudioPipeline.d.ts +89 -0
- package/dist/audio/AudioPipeline.js +138 -0
- package/dist/{MLNoiseSuppressor.d.ts → audio/MLNoiseSuppressor.d.ts} +7 -7
- package/dist/{MLNoiseSuppressor.js → audio/MLNoiseSuppressor.js} +13 -41
- package/dist/audio/index.d.ts +6 -0
- package/dist/audio/index.js +22 -0
- package/dist/channels/huddle/HuddleChannel.d.ts +87 -0
- package/dist/channels/huddle/HuddleChannel.js +152 -0
- package/dist/channels/huddle/HuddleTypes.d.ts +85 -0
- package/dist/channels/huddle/HuddleTypes.js +25 -0
- package/dist/channels/huddle/index.d.ts +5 -0
- package/dist/channels/huddle/index.js +21 -0
- package/dist/channels/index.d.ts +5 -0
- package/dist/channels/index.js +21 -0
- package/dist/channels/spatial/SpatialAudioChannel.d.ts +144 -0
- package/dist/channels/spatial/SpatialAudioChannel.js +455 -0
- package/dist/channels/spatial/SpatialAudioTypes.d.ts +85 -0
- package/dist/channels/spatial/SpatialAudioTypes.js +42 -0
- package/dist/channels/spatial/index.d.ts +5 -0
- package/dist/channels/spatial/index.js +21 -0
- package/dist/{EventManager.d.ts → core/EventManager.d.ts} +4 -2
- package/dist/{EventManager.js → core/EventManager.js} +5 -3
- package/dist/{MediasoupManager.d.ts → core/MediasoupManager.d.ts} +10 -4
- package/dist/{MediasoupManager.js → core/MediasoupManager.js} +31 -42
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +21 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +30 -6
- package/dist/sdk/index.d.ts +36 -0
- package/dist/sdk/index.js +121 -0
- package/dist/types/events.d.ts +154 -0
- package/dist/{types.js → types/events.js} +3 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.js +23 -0
- package/dist/types/participant.d.ts +65 -0
- package/dist/types/participant.js +5 -0
- package/dist/types/position.d.ts +47 -0
- package/dist/types/position.js +9 -0
- package/dist/types/room.d.ts +82 -0
- package/dist/types/room.js +5 -0
- package/dist/utils/audio/clarity-score.d.ts +33 -0
- package/dist/utils/audio/clarity-score.js +81 -0
- package/dist/utils/audio/index.d.ts +5 -0
- package/dist/utils/audio/index.js +21 -0
- package/dist/utils/audio/voice-filter.d.ts +30 -0
- package/dist/utils/audio/voice-filter.js +70 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/position/coordinates.d.ts +37 -0
- package/dist/utils/position/coordinates.js +61 -0
- package/dist/utils/position/index.d.ts +6 -0
- package/dist/utils/position/index.js +22 -0
- package/dist/utils/position/normalize.d.ts +37 -0
- package/dist/utils/position/normalize.js +78 -0
- package/dist/utils/position/snap.d.ts +51 -0
- package/dist/utils/position/snap.js +81 -0
- package/dist/utils/smoothing/gain-smoothing.d.ts +45 -0
- package/dist/utils/smoothing/gain-smoothing.js +77 -0
- package/dist/utils/smoothing/index.d.ts +5 -0
- package/dist/utils/smoothing/index.js +21 -0
- package/dist/utils/smoothing/pan-smoothing.d.ts +43 -0
- package/dist/utils/smoothing/pan-smoothing.js +85 -0
- package/dist/utils/spatial/angle-calc.d.ts +24 -0
- package/dist/utils/spatial/angle-calc.js +69 -0
- package/dist/utils/spatial/distance-calc.d.ts +33 -0
- package/dist/utils/spatial/distance-calc.js +48 -0
- package/dist/utils/spatial/gain-calc.d.ts +37 -0
- package/dist/utils/spatial/gain-calc.js +52 -0
- package/dist/utils/spatial/head-position.d.ts +32 -0
- package/dist/utils/spatial/head-position.js +76 -0
- package/dist/utils/spatial/index.d.ts +9 -0
- package/dist/utils/spatial/index.js +25 -0
- package/dist/utils/spatial/listener-calc.d.ts +28 -0
- package/dist/utils/spatial/listener-calc.js +74 -0
- package/dist/utils/spatial/pan-calc.d.ts +48 -0
- package/dist/utils/spatial/pan-calc.js +80 -0
- package/package.json +1 -1
- package/dist/SpatialAudioManager.d.ts +0 -271
- package/dist/SpatialAudioManager.js +0 -1512
- package/dist/types.d.ts +0 -73
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Spatial Audio Types
|
|
4
|
+
*
|
|
5
|
+
* Type definitions for spatial audio processing
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DEFAULT_DENOISER_OPTIONS = exports.DEFAULT_SPATIAL_CONFIG = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Default spatial distance configuration
|
|
11
|
+
*/
|
|
12
|
+
exports.DEFAULT_SPATIAL_CONFIG = {
|
|
13
|
+
refDistance: 1.2,
|
|
14
|
+
maxDistance: 15,
|
|
15
|
+
rolloffFactor: 1.35,
|
|
16
|
+
unit: 'auto',
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Default denoiser configuration
|
|
20
|
+
*/
|
|
21
|
+
exports.DEFAULT_DENOISER_OPTIONS = {
|
|
22
|
+
enabled: false,
|
|
23
|
+
threshold: 0.002,
|
|
24
|
+
noiseFloor: 0.0005,
|
|
25
|
+
release: 0.4,
|
|
26
|
+
attack: 0.1,
|
|
27
|
+
holdMs: 200,
|
|
28
|
+
maxReduction: 0.15,
|
|
29
|
+
hissCut: 0.15,
|
|
30
|
+
expansionRatio: 1.05,
|
|
31
|
+
learnRate: 0.03,
|
|
32
|
+
voiceBoost: 0.35,
|
|
33
|
+
voiceSensitivity: 0.1,
|
|
34
|
+
voiceEnhancement: false,
|
|
35
|
+
silenceFloor: 0.0002,
|
|
36
|
+
silenceHoldMs: 400,
|
|
37
|
+
silenceReleaseMs: 200,
|
|
38
|
+
speechBoost: 0.25,
|
|
39
|
+
highBandGate: 0.15,
|
|
40
|
+
highBandAttack: 0.08,
|
|
41
|
+
highBandRelease: 0.03,
|
|
42
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Spatial module - Re-exports spatial audio channel functionality
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./SpatialAudioTypes"), exports);
|
|
21
|
+
__exportStar(require("./SpatialAudioChannel"), exports);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { EventEmitter } from "events";
|
|
2
|
-
import { OdysseyEvent } from "./types";
|
|
3
1
|
/**
|
|
2
|
+
* Event Manager
|
|
3
|
+
*
|
|
4
4
|
* A clean, standalone event bus for the SDK, completely decoupled from the socket.
|
|
5
5
|
* This ensures that only processed, structured SDK events are emitted to the application.
|
|
6
6
|
* It extends the Node.js EventEmitter to provide a standard and reliable event API.
|
|
7
7
|
*/
|
|
8
|
+
import { EventEmitter } from 'events';
|
|
9
|
+
import { OdysseyEvent } from '../types/events';
|
|
8
10
|
export declare class EventManager extends EventEmitter {
|
|
9
11
|
constructor();
|
|
10
12
|
on(event: OdysseyEvent, listener: (...args: any[]) => void): this;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EventManager = void 0;
|
|
4
|
-
const events_1 = require("events");
|
|
5
2
|
/**
|
|
3
|
+
* Event Manager
|
|
4
|
+
*
|
|
6
5
|
* A clean, standalone event bus for the SDK, completely decoupled from the socket.
|
|
7
6
|
* This ensures that only processed, structured SDK events are emitted to the application.
|
|
8
7
|
* It extends the Node.js EventEmitter to provide a standard and reliable event API.
|
|
9
8
|
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.EventManager = void 0;
|
|
11
|
+
const events_1 = require("events");
|
|
10
12
|
class EventManager extends events_1.EventEmitter {
|
|
11
13
|
constructor() {
|
|
12
14
|
super();
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Mediasoup Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles WebRTC transport, producer, and consumer management
|
|
5
|
+
* using the mediasoup-client library
|
|
6
|
+
*/
|
|
7
|
+
import * as mediasoupClient from 'mediasoup-client';
|
|
8
|
+
import { types } from 'mediasoup-client';
|
|
9
|
+
import { Socket } from 'socket.io-client';
|
|
4
10
|
export declare class MediasoupManager {
|
|
5
11
|
private device;
|
|
6
12
|
private socket;
|
|
@@ -20,7 +26,7 @@ export declare class MediasoupManager {
|
|
|
20
26
|
consume(data: {
|
|
21
27
|
consumerId: string;
|
|
22
28
|
producerId: string;
|
|
23
|
-
kind:
|
|
29
|
+
kind: 'audio' | 'video';
|
|
24
30
|
rtpParameters: any;
|
|
25
31
|
participantId: string;
|
|
26
32
|
}): Promise<{
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Mediasoup Manager
|
|
4
|
+
*
|
|
5
|
+
* Handles WebRTC transport, producer, and consumer management
|
|
6
|
+
* using the mediasoup-client library
|
|
7
|
+
*/
|
|
2
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
9
|
if (k2 === undefined) k2 = k;
|
|
4
10
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -53,32 +59,32 @@ class MediasoupManager {
|
|
|
53
59
|
}
|
|
54
60
|
sendDeviceRtpCapabilities(participantId) {
|
|
55
61
|
this.participantId = participantId;
|
|
56
|
-
this.socket.emit(
|
|
62
|
+
this.socket.emit('device-rtp-capabilities', {
|
|
57
63
|
participantId,
|
|
58
64
|
rtpCapabilities: this.device.rtpCapabilities,
|
|
59
65
|
});
|
|
60
66
|
}
|
|
61
67
|
async createSendTransport(participantId) {
|
|
62
|
-
const params = await this.createWebRtcTransport(
|
|
68
|
+
const params = await this.createWebRtcTransport('send', participantId);
|
|
63
69
|
this.sendTransport = this.device.createSendTransport(params);
|
|
64
70
|
this.connectSendTransport();
|
|
65
71
|
}
|
|
66
72
|
async createRecvTransport(participantId) {
|
|
67
|
-
const params = await this.createWebRtcTransport(
|
|
73
|
+
const params = await this.createWebRtcTransport('recv', participantId);
|
|
68
74
|
this.recvTransport = this.device.createRecvTransport(params);
|
|
69
75
|
this.connectRecvTransport();
|
|
70
76
|
}
|
|
71
77
|
connectSendTransport() {
|
|
72
|
-
this.sendTransport?.on(
|
|
73
|
-
this.socket.emit(
|
|
78
|
+
this.sendTransport?.on('connect', async ({ dtlsParameters }, callback, errback) => {
|
|
79
|
+
this.socket.emit('connect-transport', { transportId: this.sendTransport.id, dtlsParameters }, (response) => {
|
|
74
80
|
if (response.error)
|
|
75
81
|
errback(new Error(response.error));
|
|
76
82
|
else
|
|
77
83
|
callback();
|
|
78
84
|
});
|
|
79
85
|
});
|
|
80
|
-
this.sendTransport?.on(
|
|
81
|
-
this.socket.emit(
|
|
86
|
+
this.sendTransport?.on('produce', async ({ kind, rtpParameters, appData, }, callback, errback) => {
|
|
87
|
+
this.socket.emit('produce', {
|
|
82
88
|
transportId: this.sendTransport.id,
|
|
83
89
|
kind,
|
|
84
90
|
rtpParameters,
|
|
@@ -90,59 +96,48 @@ class MediasoupManager {
|
|
|
90
96
|
callback({ id: response.producerId });
|
|
91
97
|
});
|
|
92
98
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (state === "failed" || state === "closed") {
|
|
96
|
-
// Clear all producers since transport is dead
|
|
99
|
+
this.sendTransport?.on('connectionstatechange', (state) => {
|
|
100
|
+
if (state === 'failed' || state === 'closed') {
|
|
97
101
|
this.producers.clear();
|
|
98
|
-
|
|
99
|
-
this.socket.emit("transport-failed", {
|
|
102
|
+
this.socket.emit('transport-failed', {
|
|
100
103
|
participantId: this.participantId,
|
|
101
|
-
direction:
|
|
104
|
+
direction: 'send',
|
|
102
105
|
});
|
|
103
106
|
}
|
|
104
107
|
});
|
|
105
108
|
}
|
|
106
109
|
connectRecvTransport() {
|
|
107
|
-
this.recvTransport?.on(
|
|
108
|
-
this.socket.emit(
|
|
110
|
+
this.recvTransport?.on('connect', async ({ dtlsParameters }, callback, errback) => {
|
|
111
|
+
this.socket.emit('connect-transport', { transportId: this.recvTransport.id, dtlsParameters }, (response) => {
|
|
109
112
|
if (response.error)
|
|
110
113
|
errback(new Error(response.error));
|
|
111
114
|
else
|
|
112
115
|
callback();
|
|
113
116
|
});
|
|
114
117
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// Consumers will be closed by server, SDK will handle via consumer.on('transportclose')
|
|
118
|
+
this.recvTransport?.on('connectionstatechange', (state) => {
|
|
119
|
+
if (state === 'failed' || state === 'closed') {
|
|
120
|
+
// Consumers will be closed by server
|
|
119
121
|
}
|
|
120
122
|
});
|
|
121
123
|
}
|
|
122
124
|
async produce(track, appData) {
|
|
123
125
|
if (!this.sendTransport)
|
|
124
|
-
throw new Error(
|
|
125
|
-
// Configure simulcast for video tracks for adaptive bitrate
|
|
126
|
+
throw new Error('Send transport not initialized');
|
|
126
127
|
const produceOptions = { track, appData };
|
|
127
128
|
if (track.kind === 'video') {
|
|
128
129
|
produceOptions.encodings = [
|
|
129
|
-
// Low quality layer - 100 kbps, good for poor connections
|
|
130
130
|
{ rid: 'r0', active: true, maxBitrate: 100000, scaleResolutionDownBy: 4 },
|
|
131
|
-
// Medium quality layer - 300 kbps, balanced
|
|
132
131
|
{ rid: 'r1', active: true, maxBitrate: 300000, scaleResolutionDownBy: 2 },
|
|
133
|
-
|
|
134
|
-
{ rid: 'r2', active: true, maxBitrate: 900000, scaleResolutionDownBy: 1 }
|
|
132
|
+
{ rid: 'r2', active: true, maxBitrate: 900000, scaleResolutionDownBy: 1 },
|
|
135
133
|
];
|
|
136
|
-
// VP8 codec for simulcast support
|
|
137
134
|
produceOptions.codecOptions = {
|
|
138
|
-
videoGoogleStartBitrate: 1000
|
|
135
|
+
videoGoogleStartBitrate: 1000,
|
|
139
136
|
};
|
|
140
137
|
}
|
|
141
138
|
const producer = await this.sendTransport.produce(produceOptions);
|
|
142
|
-
// Handle producer events
|
|
143
139
|
producer.on('transportclose', () => {
|
|
144
140
|
this.producers.delete(producer.id);
|
|
145
|
-
// The main SDK (index.ts) should handle recreation
|
|
146
141
|
});
|
|
147
142
|
producer.on('trackended', () => {
|
|
148
143
|
producer.close();
|
|
@@ -153,17 +148,15 @@ class MediasoupManager {
|
|
|
153
148
|
}
|
|
154
149
|
async consume(data) {
|
|
155
150
|
if (!this.recvTransport)
|
|
156
|
-
throw new Error(
|
|
151
|
+
throw new Error('Receive transport not set up');
|
|
157
152
|
const consumer = await this.recvTransport.consume({
|
|
158
153
|
id: data.consumerId,
|
|
159
154
|
producerId: data.producerId,
|
|
160
155
|
kind: data.kind,
|
|
161
156
|
rtpParameters: data.rtpParameters,
|
|
162
157
|
});
|
|
163
|
-
// Handle consumer events
|
|
164
158
|
consumer.on('transportclose', () => {
|
|
165
159
|
this.consumers.delete(consumer.id);
|
|
166
|
-
// The main SDK (index.ts) should handle recreation
|
|
167
160
|
});
|
|
168
161
|
consumer.on('trackended', () => {
|
|
169
162
|
consumer.close();
|
|
@@ -174,7 +167,7 @@ class MediasoupManager {
|
|
|
174
167
|
}
|
|
175
168
|
async resumeConsumer(consumerId) {
|
|
176
169
|
return new Promise((resolve, reject) => {
|
|
177
|
-
this.socket.emit(
|
|
170
|
+
this.socket.emit('resume-consumer', { consumerId, participantId: this.participantId }, (response) => {
|
|
178
171
|
if (response.error) {
|
|
179
172
|
reject(new Error(response.error));
|
|
180
173
|
}
|
|
@@ -186,23 +179,19 @@ class MediasoupManager {
|
|
|
186
179
|
}
|
|
187
180
|
async createWebRtcTransport(direction, participantId) {
|
|
188
181
|
return new Promise((resolve, reject) => {
|
|
189
|
-
// Set up listener for transport-created event
|
|
190
182
|
const handleTransportCreated = (data) => {
|
|
191
183
|
if (data.type === direction) {
|
|
192
|
-
|
|
193
|
-
this.socket.off("transport-created", handleTransportCreated);
|
|
184
|
+
this.socket.off('transport-created', handleTransportCreated);
|
|
194
185
|
if (data.error) {
|
|
195
186
|
return reject(new Error(data.error));
|
|
196
187
|
}
|
|
197
188
|
resolve(data.params);
|
|
198
189
|
}
|
|
199
190
|
};
|
|
200
|
-
this.socket.on(
|
|
201
|
-
|
|
202
|
-
this.socket.emit("create-transport", { direction, participantId });
|
|
203
|
-
// Add timeout to prevent hanging forever
|
|
191
|
+
this.socket.on('transport-created', handleTransportCreated);
|
|
192
|
+
this.socket.emit('create-transport', { direction, participantId });
|
|
204
193
|
setTimeout(() => {
|
|
205
|
-
this.socket.off(
|
|
194
|
+
this.socket.off('transport-created', handleTransportCreated);
|
|
206
195
|
reject(new Error(`Timeout waiting for ${direction} transport`));
|
|
207
196
|
}, 10000);
|
|
208
197
|
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core module - Re-exports core SDK components
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./EventManager"), exports);
|
|
21
|
+
__exportStar(require("./MediasoupManager"), exports);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EventManager } from "./EventManager";
|
|
2
|
-
import { SpatialAudioOptions } from "./
|
|
1
|
+
import { EventManager } from "./core/EventManager";
|
|
2
|
+
import { SpatialAudioOptions } from "./channels/spatial/SpatialAudioChannel";
|
|
3
3
|
import { Direction, MediaState, OdysseyEvent, Participant, Position, RoomJoinedData } from "./types";
|
|
4
4
|
export declare class OdysseySpatialComms extends EventManager {
|
|
5
5
|
private socket;
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OdysseySpatialComms = void 0;
|
|
4
4
|
const socket_io_client_1 = require("socket.io-client");
|
|
5
|
-
const EventManager_1 = require("./EventManager");
|
|
6
|
-
const MediasoupManager_1 = require("./MediasoupManager");
|
|
7
|
-
const
|
|
5
|
+
const EventManager_1 = require("./core/EventManager");
|
|
6
|
+
const MediasoupManager_1 = require("./core/MediasoupManager");
|
|
7
|
+
const SpatialAudioChannel_1 = require("./channels/spatial/SpatialAudioChannel");
|
|
8
8
|
class OdysseySpatialComms extends EventManager_1.EventManager {
|
|
9
9
|
constructor(serverUrl, spatialOptions) {
|
|
10
10
|
super(); // Initialize the EventEmitter base class
|
|
@@ -14,7 +14,7 @@ class OdysseySpatialComms extends EventManager_1.EventManager {
|
|
|
14
14
|
transports: ["websocket"],
|
|
15
15
|
});
|
|
16
16
|
this.mediasoupManager = new MediasoupManager_1.MediasoupManager(this.socket);
|
|
17
|
-
this.spatialAudioManager = new
|
|
17
|
+
this.spatialAudioManager = new SpatialAudioChannel_1.SpatialAudioManager(spatialOptions);
|
|
18
18
|
// Set max listeners to prevent warning
|
|
19
19
|
this.setMaxListeners(50);
|
|
20
20
|
this.listenForEvents();
|
|
@@ -211,6 +211,15 @@ class OdysseySpatialComms extends EventManager_1.EventManager {
|
|
|
211
211
|
pan: spatialData?.pan,
|
|
212
212
|
dxLocal: spatialData?.dxLocal,
|
|
213
213
|
};
|
|
214
|
+
// ========== DEBUG: SDK SENDING TO SERVER ==========
|
|
215
|
+
console.log("📤 [SDK->Server] updatePosition:", {
|
|
216
|
+
participantId: updateData.participantId,
|
|
217
|
+
position: updateData.position,
|
|
218
|
+
direction: updateData.direction,
|
|
219
|
+
rot: updateData.rot,
|
|
220
|
+
pan: updateData.pan,
|
|
221
|
+
dxLocal: updateData.dxLocal,
|
|
222
|
+
});
|
|
214
223
|
this.socket.emit("update-position", updateData);
|
|
215
224
|
}
|
|
216
225
|
}
|
|
@@ -229,6 +238,13 @@ class OdysseySpatialComms extends EventManager_1.EventManager {
|
|
|
229
238
|
this.spatialAudioManager.setListenerPosition(position, orientation);
|
|
230
239
|
}
|
|
231
240
|
setListenerFromLSD(listenerPos, cameraPos, lookAtPos, rot) {
|
|
241
|
+
// ========== DEBUG: LISTENER POSITION UPDATE ==========
|
|
242
|
+
console.log("🎧 [SDK] setListenerFromLSD:", {
|
|
243
|
+
listenerPos,
|
|
244
|
+
cameraPos,
|
|
245
|
+
lookAtPos,
|
|
246
|
+
rot,
|
|
247
|
+
});
|
|
232
248
|
this.spatialAudioManager.setListenerFromLSD(listenerPos, cameraPos, lookAtPos, rot);
|
|
233
249
|
}
|
|
234
250
|
listenForEvents() {
|
|
@@ -436,8 +452,16 @@ class OdysseySpatialComms extends EventManager_1.EventManager {
|
|
|
436
452
|
}
|
|
437
453
|
});
|
|
438
454
|
this.socket.on("participant-position-updated", (data) => {
|
|
439
|
-
// DEBUG:
|
|
440
|
-
console.log(
|
|
455
|
+
// ========== DEBUG: SDK RECEIVED FROM SERVER ==========
|
|
456
|
+
console.log("📥 [SDK<-Server] participant-position-updated:", {
|
|
457
|
+
participantId: data.participantId,
|
|
458
|
+
position: data.position,
|
|
459
|
+
direction: data.direction,
|
|
460
|
+
rot: data.rot,
|
|
461
|
+
pan: data.pan,
|
|
462
|
+
dxLocal: data.dxLocal,
|
|
463
|
+
currentChannel: data.currentChannel,
|
|
464
|
+
});
|
|
441
465
|
const participant = this.room?.participants.get(data.participantId);
|
|
442
466
|
if (participant) {
|
|
443
467
|
participant.position = data.position;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Odyssey Mediasoup SDK - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* A comprehensive WebRTC SDK for real-time audio/video communication
|
|
5
|
+
* with spatial audio and ML-powered noise suppression.
|
|
6
|
+
*
|
|
7
|
+
* @module @odyssey/mediasoup-sdk
|
|
8
|
+
*/
|
|
9
|
+
export type { Position, Direction, Rotation, ListenerRight, UnrealPosition, StandardPosition, } from '../types/position';
|
|
10
|
+
export type { Participant, MediaState, ParticipantSnapshot, } from '../types/participant';
|
|
11
|
+
export type { RoomJoinedEvent, ConsumerCreatedEvent, ConsumerClosedEvent, ConsumerPausedEvent, ConsumerResumedEvent, ParticipantJoinedEvent, ParticipantLeftEvent, ParticipantPositionEvent, MuteStateChangedEvent, HuddleInviteReceivedEvent, HuddleResponseEvent, OdysseyEvent, OdysseyEventMap, } from '../types/events';
|
|
12
|
+
export type { Room, RoomJoinedData, JoinRoomData, ConsumerCreatedData, TransportOptions, ProducerOptions, } from '../types/room';
|
|
13
|
+
export { getDistanceBetween, getHorizontalDistance, isWithinRange, } from '../utils/spatial/distance-calc';
|
|
14
|
+
export { calculateLogarithmicGain, DEFAULT_GAIN_CONFIG, type GainConfig, } from '../utils/spatial/gain-calc';
|
|
15
|
+
export { calculateListenerRight, calculatePanFromPositions, panValueToPanning, type Panning, } from '../utils/spatial/pan-calc';
|
|
16
|
+
export { computeHeadPosition, parseBodyHeight, getVectorFromListener, } from '../utils/spatial/head-position';
|
|
17
|
+
export { getListenerRightFromRotation, calculateListenerOrientation, type ListenerOrientation, } from '../utils/spatial/listener-calc';
|
|
18
|
+
export { computeAzimuthFromPositions, calculateAngleToSource, } from '../utils/spatial/angle-calc';
|
|
19
|
+
export { normalizePositionUnits, metersToCentimeters, centimetersToMeters, isLikelyCentimeters, } from '../utils/position/normalize';
|
|
20
|
+
export { PositionSnapCache, snapPositionSimple, SNAP_CONFIG, type SnapConfig, } from '../utils/position/snap';
|
|
21
|
+
export { unrealToStandard, standardToUnreal, autoConvertToStandard, } from '../utils/position/coordinates';
|
|
22
|
+
export { PanSmoother, DEFAULT_PAN_SMOOTHER_OPTIONS, type PanSmootherOptions, } from '../utils/smoothing/pan-smoothing';
|
|
23
|
+
export { applyGainSmooth, applyStereoPanSmooth, GainTracker, } from '../utils/smoothing/gain-smoothing';
|
|
24
|
+
export { calculateClarityScore, calculateProximityWeight, normalizeVector, } from '../utils/audio/clarity-score';
|
|
25
|
+
export { calculateAdaptiveHighpass, createVoiceFilterChain, } from '../utils/audio/voice-filter';
|
|
26
|
+
export { HuddleChannel, type HuddleChannelConfig, } from '../channels/huddle/HuddleChannel';
|
|
27
|
+
export { SPATIAL_CHANNEL_ID, isHuddleChannel, type HuddleInvite, type HuddleResponse, type HuddleAcceptResponse, type HuddleRejectResponse, } from '../channels/huddle/HuddleTypes';
|
|
28
|
+
export { SpatialAudioChannel, type SpatialAudioConfig, } from '../channels/spatial/SpatialAudioChannel';
|
|
29
|
+
export { DEFAULT_SPATIAL_CONFIG, DEFAULT_DENOISER_OPTIONS, type SpatialDistanceConfig, type DenoiserOptions, type ParticipantAudioNodes, type ListenerState, } from '../channels/spatial/SpatialAudioTypes';
|
|
30
|
+
export { createMasterChain, createFilterChain, connectFilterChain, createLimiter, createMonoDownmixChain, connectMonoDownmixChain, DEFAULT_PIPELINE_CONFIG, type AudioPipelineConfig, type MasterAudioChain, type ParticipantFilterChain, type MonoDownmixChain, } from '../audio/AudioPipeline';
|
|
31
|
+
export { createPanner, createStereoPanner, createGain, createAnalyser, createHighpassFilter, createLowpassFilter, createPeakingFilter, createCompressor, createMediaStreamSource, DEFAULT_PANNER_CONFIG, type PannerConfig, type HighpassConfig, type LowpassConfig, type PeakingConfig, type CompressorConfig, } from '../audio/AudioNodeFactory';
|
|
32
|
+
export { MLNoiseSuppressor } from '../audio/MLNoiseSuppressor';
|
|
33
|
+
export { EventManager } from '../core/EventManager';
|
|
34
|
+
export { MediasoupManager } from '../core/MediasoupManager';
|
|
35
|
+
export declare const SDK_VERSION = "2.0.0";
|
|
36
|
+
export declare const SDK_NAME = "Odyssey Mediasoup SDK";
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Odyssey Mediasoup SDK - Main Entry Point
|
|
4
|
+
*
|
|
5
|
+
* A comprehensive WebRTC SDK for real-time audio/video communication
|
|
6
|
+
* with spatial audio and ML-powered noise suppression.
|
|
7
|
+
*
|
|
8
|
+
* @module @odyssey/mediasoup-sdk
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.createStereoPanner = exports.createPanner = exports.DEFAULT_PIPELINE_CONFIG = exports.connectMonoDownmixChain = exports.createMonoDownmixChain = exports.createLimiter = exports.connectFilterChain = exports.createFilterChain = exports.createMasterChain = exports.DEFAULT_DENOISER_OPTIONS = exports.DEFAULT_SPATIAL_CONFIG = exports.SpatialAudioChannel = exports.isHuddleChannel = exports.SPATIAL_CHANNEL_ID = exports.HuddleChannel = exports.createVoiceFilterChain = exports.calculateAdaptiveHighpass = exports.normalizeVector = exports.calculateProximityWeight = exports.calculateClarityScore = exports.GainTracker = exports.applyStereoPanSmooth = exports.applyGainSmooth = exports.DEFAULT_PAN_SMOOTHER_OPTIONS = exports.PanSmoother = exports.autoConvertToStandard = exports.standardToUnreal = exports.unrealToStandard = exports.SNAP_CONFIG = exports.snapPositionSimple = exports.PositionSnapCache = exports.isLikelyCentimeters = exports.centimetersToMeters = exports.metersToCentimeters = exports.normalizePositionUnits = exports.calculateAngleToSource = exports.computeAzimuthFromPositions = exports.calculateListenerOrientation = exports.getListenerRightFromRotation = exports.getVectorFromListener = exports.parseBodyHeight = exports.computeHeadPosition = exports.panValueToPanning = exports.calculatePanFromPositions = exports.calculateListenerRight = exports.DEFAULT_GAIN_CONFIG = exports.calculateLogarithmicGain = exports.isWithinRange = exports.getHorizontalDistance = exports.getDistanceBetween = void 0;
|
|
12
|
+
exports.SDK_NAME = exports.SDK_VERSION = exports.MediasoupManager = exports.EventManager = exports.MLNoiseSuppressor = exports.DEFAULT_PANNER_CONFIG = exports.createMediaStreamSource = exports.createCompressor = exports.createPeakingFilter = exports.createLowpassFilter = exports.createHighpassFilter = exports.createAnalyser = exports.createGain = void 0;
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Utils - Spatial Audio Calculations
|
|
15
|
+
// ============================================================================
|
|
16
|
+
var distance_calc_1 = require("../utils/spatial/distance-calc");
|
|
17
|
+
Object.defineProperty(exports, "getDistanceBetween", { enumerable: true, get: function () { return distance_calc_1.getDistanceBetween; } });
|
|
18
|
+
Object.defineProperty(exports, "getHorizontalDistance", { enumerable: true, get: function () { return distance_calc_1.getHorizontalDistance; } });
|
|
19
|
+
Object.defineProperty(exports, "isWithinRange", { enumerable: true, get: function () { return distance_calc_1.isWithinRange; } });
|
|
20
|
+
var gain_calc_1 = require("../utils/spatial/gain-calc");
|
|
21
|
+
Object.defineProperty(exports, "calculateLogarithmicGain", { enumerable: true, get: function () { return gain_calc_1.calculateLogarithmicGain; } });
|
|
22
|
+
Object.defineProperty(exports, "DEFAULT_GAIN_CONFIG", { enumerable: true, get: function () { return gain_calc_1.DEFAULT_GAIN_CONFIG; } });
|
|
23
|
+
var pan_calc_1 = require("../utils/spatial/pan-calc");
|
|
24
|
+
Object.defineProperty(exports, "calculateListenerRight", { enumerable: true, get: function () { return pan_calc_1.calculateListenerRight; } });
|
|
25
|
+
Object.defineProperty(exports, "calculatePanFromPositions", { enumerable: true, get: function () { return pan_calc_1.calculatePanFromPositions; } });
|
|
26
|
+
Object.defineProperty(exports, "panValueToPanning", { enumerable: true, get: function () { return pan_calc_1.panValueToPanning; } });
|
|
27
|
+
var head_position_1 = require("../utils/spatial/head-position");
|
|
28
|
+
Object.defineProperty(exports, "computeHeadPosition", { enumerable: true, get: function () { return head_position_1.computeHeadPosition; } });
|
|
29
|
+
Object.defineProperty(exports, "parseBodyHeight", { enumerable: true, get: function () { return head_position_1.parseBodyHeight; } });
|
|
30
|
+
Object.defineProperty(exports, "getVectorFromListener", { enumerable: true, get: function () { return head_position_1.getVectorFromListener; } });
|
|
31
|
+
var listener_calc_1 = require("../utils/spatial/listener-calc");
|
|
32
|
+
Object.defineProperty(exports, "getListenerRightFromRotation", { enumerable: true, get: function () { return listener_calc_1.getListenerRightFromRotation; } });
|
|
33
|
+
Object.defineProperty(exports, "calculateListenerOrientation", { enumerable: true, get: function () { return listener_calc_1.calculateListenerOrientation; } });
|
|
34
|
+
var angle_calc_1 = require("../utils/spatial/angle-calc");
|
|
35
|
+
Object.defineProperty(exports, "computeAzimuthFromPositions", { enumerable: true, get: function () { return angle_calc_1.computeAzimuthFromPositions; } });
|
|
36
|
+
Object.defineProperty(exports, "calculateAngleToSource", { enumerable: true, get: function () { return angle_calc_1.calculateAngleToSource; } });
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Utils - Position Processing
|
|
39
|
+
// ============================================================================
|
|
40
|
+
var normalize_1 = require("../utils/position/normalize");
|
|
41
|
+
Object.defineProperty(exports, "normalizePositionUnits", { enumerable: true, get: function () { return normalize_1.normalizePositionUnits; } });
|
|
42
|
+
Object.defineProperty(exports, "metersToCentimeters", { enumerable: true, get: function () { return normalize_1.metersToCentimeters; } });
|
|
43
|
+
Object.defineProperty(exports, "centimetersToMeters", { enumerable: true, get: function () { return normalize_1.centimetersToMeters; } });
|
|
44
|
+
Object.defineProperty(exports, "isLikelyCentimeters", { enumerable: true, get: function () { return normalize_1.isLikelyCentimeters; } });
|
|
45
|
+
var snap_1 = require("../utils/position/snap");
|
|
46
|
+
Object.defineProperty(exports, "PositionSnapCache", { enumerable: true, get: function () { return snap_1.PositionSnapCache; } });
|
|
47
|
+
Object.defineProperty(exports, "snapPositionSimple", { enumerable: true, get: function () { return snap_1.snapPositionSimple; } });
|
|
48
|
+
Object.defineProperty(exports, "SNAP_CONFIG", { enumerable: true, get: function () { return snap_1.SNAP_CONFIG; } });
|
|
49
|
+
var coordinates_1 = require("../utils/position/coordinates");
|
|
50
|
+
Object.defineProperty(exports, "unrealToStandard", { enumerable: true, get: function () { return coordinates_1.unrealToStandard; } });
|
|
51
|
+
Object.defineProperty(exports, "standardToUnreal", { enumerable: true, get: function () { return coordinates_1.standardToUnreal; } });
|
|
52
|
+
Object.defineProperty(exports, "autoConvertToStandard", { enumerable: true, get: function () { return coordinates_1.autoConvertToStandard; } });
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Utils - Audio Smoothing
|
|
55
|
+
// ============================================================================
|
|
56
|
+
var pan_smoothing_1 = require("../utils/smoothing/pan-smoothing");
|
|
57
|
+
Object.defineProperty(exports, "PanSmoother", { enumerable: true, get: function () { return pan_smoothing_1.PanSmoother; } });
|
|
58
|
+
Object.defineProperty(exports, "DEFAULT_PAN_SMOOTHER_OPTIONS", { enumerable: true, get: function () { return pan_smoothing_1.DEFAULT_PAN_SMOOTHER_OPTIONS; } });
|
|
59
|
+
var gain_smoothing_1 = require("../utils/smoothing/gain-smoothing");
|
|
60
|
+
Object.defineProperty(exports, "applyGainSmooth", { enumerable: true, get: function () { return gain_smoothing_1.applyGainSmooth; } });
|
|
61
|
+
Object.defineProperty(exports, "applyStereoPanSmooth", { enumerable: true, get: function () { return gain_smoothing_1.applyStereoPanSmooth; } });
|
|
62
|
+
Object.defineProperty(exports, "GainTracker", { enumerable: true, get: function () { return gain_smoothing_1.GainTracker; } });
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Utils - Audio Quality
|
|
65
|
+
// ============================================================================
|
|
66
|
+
var clarity_score_1 = require("../utils/audio/clarity-score");
|
|
67
|
+
Object.defineProperty(exports, "calculateClarityScore", { enumerable: true, get: function () { return clarity_score_1.calculateClarityScore; } });
|
|
68
|
+
Object.defineProperty(exports, "calculateProximityWeight", { enumerable: true, get: function () { return clarity_score_1.calculateProximityWeight; } });
|
|
69
|
+
Object.defineProperty(exports, "normalizeVector", { enumerable: true, get: function () { return clarity_score_1.normalizeVector; } });
|
|
70
|
+
var voice_filter_1 = require("../utils/audio/voice-filter");
|
|
71
|
+
Object.defineProperty(exports, "calculateAdaptiveHighpass", { enumerable: true, get: function () { return voice_filter_1.calculateAdaptiveHighpass; } });
|
|
72
|
+
Object.defineProperty(exports, "createVoiceFilterChain", { enumerable: true, get: function () { return voice_filter_1.createVoiceFilterChain; } });
|
|
73
|
+
// ============================================================================
|
|
74
|
+
// Channels
|
|
75
|
+
// ============================================================================
|
|
76
|
+
var HuddleChannel_1 = require("../channels/huddle/HuddleChannel");
|
|
77
|
+
Object.defineProperty(exports, "HuddleChannel", { enumerable: true, get: function () { return HuddleChannel_1.HuddleChannel; } });
|
|
78
|
+
var HuddleTypes_1 = require("../channels/huddle/HuddleTypes");
|
|
79
|
+
Object.defineProperty(exports, "SPATIAL_CHANNEL_ID", { enumerable: true, get: function () { return HuddleTypes_1.SPATIAL_CHANNEL_ID; } });
|
|
80
|
+
Object.defineProperty(exports, "isHuddleChannel", { enumerable: true, get: function () { return HuddleTypes_1.isHuddleChannel; } });
|
|
81
|
+
var SpatialAudioChannel_1 = require("../channels/spatial/SpatialAudioChannel");
|
|
82
|
+
Object.defineProperty(exports, "SpatialAudioChannel", { enumerable: true, get: function () { return SpatialAudioChannel_1.SpatialAudioChannel; } });
|
|
83
|
+
var SpatialAudioTypes_1 = require("../channels/spatial/SpatialAudioTypes");
|
|
84
|
+
Object.defineProperty(exports, "DEFAULT_SPATIAL_CONFIG", { enumerable: true, get: function () { return SpatialAudioTypes_1.DEFAULT_SPATIAL_CONFIG; } });
|
|
85
|
+
Object.defineProperty(exports, "DEFAULT_DENOISER_OPTIONS", { enumerable: true, get: function () { return SpatialAudioTypes_1.DEFAULT_DENOISER_OPTIONS; } });
|
|
86
|
+
// ============================================================================
|
|
87
|
+
// Audio Processing
|
|
88
|
+
// ============================================================================
|
|
89
|
+
var AudioPipeline_1 = require("../audio/AudioPipeline");
|
|
90
|
+
Object.defineProperty(exports, "createMasterChain", { enumerable: true, get: function () { return AudioPipeline_1.createMasterChain; } });
|
|
91
|
+
Object.defineProperty(exports, "createFilterChain", { enumerable: true, get: function () { return AudioPipeline_1.createFilterChain; } });
|
|
92
|
+
Object.defineProperty(exports, "connectFilterChain", { enumerable: true, get: function () { return AudioPipeline_1.connectFilterChain; } });
|
|
93
|
+
Object.defineProperty(exports, "createLimiter", { enumerable: true, get: function () { return AudioPipeline_1.createLimiter; } });
|
|
94
|
+
Object.defineProperty(exports, "createMonoDownmixChain", { enumerable: true, get: function () { return AudioPipeline_1.createMonoDownmixChain; } });
|
|
95
|
+
Object.defineProperty(exports, "connectMonoDownmixChain", { enumerable: true, get: function () { return AudioPipeline_1.connectMonoDownmixChain; } });
|
|
96
|
+
Object.defineProperty(exports, "DEFAULT_PIPELINE_CONFIG", { enumerable: true, get: function () { return AudioPipeline_1.DEFAULT_PIPELINE_CONFIG; } });
|
|
97
|
+
var AudioNodeFactory_1 = require("../audio/AudioNodeFactory");
|
|
98
|
+
Object.defineProperty(exports, "createPanner", { enumerable: true, get: function () { return AudioNodeFactory_1.createPanner; } });
|
|
99
|
+
Object.defineProperty(exports, "createStereoPanner", { enumerable: true, get: function () { return AudioNodeFactory_1.createStereoPanner; } });
|
|
100
|
+
Object.defineProperty(exports, "createGain", { enumerable: true, get: function () { return AudioNodeFactory_1.createGain; } });
|
|
101
|
+
Object.defineProperty(exports, "createAnalyser", { enumerable: true, get: function () { return AudioNodeFactory_1.createAnalyser; } });
|
|
102
|
+
Object.defineProperty(exports, "createHighpassFilter", { enumerable: true, get: function () { return AudioNodeFactory_1.createHighpassFilter; } });
|
|
103
|
+
Object.defineProperty(exports, "createLowpassFilter", { enumerable: true, get: function () { return AudioNodeFactory_1.createLowpassFilter; } });
|
|
104
|
+
Object.defineProperty(exports, "createPeakingFilter", { enumerable: true, get: function () { return AudioNodeFactory_1.createPeakingFilter; } });
|
|
105
|
+
Object.defineProperty(exports, "createCompressor", { enumerable: true, get: function () { return AudioNodeFactory_1.createCompressor; } });
|
|
106
|
+
Object.defineProperty(exports, "createMediaStreamSource", { enumerable: true, get: function () { return AudioNodeFactory_1.createMediaStreamSource; } });
|
|
107
|
+
Object.defineProperty(exports, "DEFAULT_PANNER_CONFIG", { enumerable: true, get: function () { return AudioNodeFactory_1.DEFAULT_PANNER_CONFIG; } });
|
|
108
|
+
var MLNoiseSuppressor_1 = require("../audio/MLNoiseSuppressor");
|
|
109
|
+
Object.defineProperty(exports, "MLNoiseSuppressor", { enumerable: true, get: function () { return MLNoiseSuppressor_1.MLNoiseSuppressor; } });
|
|
110
|
+
// ============================================================================
|
|
111
|
+
// Core
|
|
112
|
+
// ============================================================================
|
|
113
|
+
var EventManager_1 = require("../core/EventManager");
|
|
114
|
+
Object.defineProperty(exports, "EventManager", { enumerable: true, get: function () { return EventManager_1.EventManager; } });
|
|
115
|
+
var MediasoupManager_1 = require("../core/MediasoupManager");
|
|
116
|
+
Object.defineProperty(exports, "MediasoupManager", { enumerable: true, get: function () { return MediasoupManager_1.MediasoupManager; } });
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// SDK Version
|
|
119
|
+
// ============================================================================
|
|
120
|
+
exports.SDK_VERSION = '2.0.0';
|
|
121
|
+
exports.SDK_NAME = 'Odyssey Mediasoup SDK';
|