livekit-client 0.12.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.github/workflows/publish.yaml +1 -3
  3. package/README.md +76 -45
  4. package/dist/api/SignalClient.d.ts +3 -1
  5. package/dist/api/SignalClient.js +8 -0
  6. package/dist/api/SignalClient.js.map +1 -1
  7. package/dist/connect.d.ts +21 -0
  8. package/dist/connect.js +83 -0
  9. package/dist/connect.js.map +1 -0
  10. package/dist/index.d.ts +2 -1
  11. package/dist/index.js +2 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/options.d.ts +19 -13
  14. package/dist/options.js.map +1 -1
  15. package/dist/proto/livekit_models.d.ts +15 -0
  16. package/dist/proto/livekit_models.js +129 -1
  17. package/dist/proto/livekit_models.js.map +1 -1
  18. package/dist/proto/livekit_rtc.d.ts +16 -1
  19. package/dist/proto/livekit_rtc.js +116 -1
  20. package/dist/proto/livekit_rtc.js.map +1 -1
  21. package/dist/room/DeviceManager.d.ts +7 -0
  22. package/dist/room/DeviceManager.js +62 -0
  23. package/dist/room/DeviceManager.js.map +1 -0
  24. package/dist/room/RTCEngine.d.ts +1 -1
  25. package/dist/room/RTCEngine.js +8 -7
  26. package/dist/room/RTCEngine.js.map +1 -1
  27. package/dist/room/Room.d.ts +34 -2
  28. package/dist/room/Room.js +92 -2
  29. package/dist/room/Room.js.map +1 -1
  30. package/dist/room/defaults.d.ts +5 -0
  31. package/dist/room/defaults.js +29 -0
  32. package/dist/room/defaults.js.map +1 -0
  33. package/dist/room/events.d.ts +33 -4
  34. package/dist/room/events.js +32 -3
  35. package/dist/room/events.js.map +1 -1
  36. package/dist/room/participant/LocalParticipant.d.ts +25 -0
  37. package/dist/room/participant/LocalParticipant.js +162 -45
  38. package/dist/room/participant/LocalParticipant.js.map +1 -1
  39. package/dist/room/participant/Participant.d.ts +17 -0
  40. package/dist/room/participant/Participant.js +53 -0
  41. package/dist/room/participant/Participant.js.map +1 -1
  42. package/dist/room/participant/RemoteParticipant.d.ts +2 -0
  43. package/dist/room/participant/RemoteParticipant.js +23 -3
  44. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  45. package/dist/room/track/LocalAudioTrack.d.ts +3 -0
  46. package/dist/room/track/LocalAudioTrack.js +37 -0
  47. package/dist/room/track/LocalAudioTrack.js.map +1 -1
  48. package/dist/room/track/LocalTrack.d.ts +6 -2
  49. package/dist/room/track/LocalTrack.js +39 -8
  50. package/dist/room/track/LocalTrack.js.map +1 -1
  51. package/dist/room/track/LocalTrackPublication.d.ts +6 -3
  52. package/dist/room/track/LocalTrackPublication.js +21 -2
  53. package/dist/room/track/LocalTrackPublication.js.map +1 -1
  54. package/dist/room/track/LocalVideoTrack.d.ts +3 -2
  55. package/dist/room/track/LocalVideoTrack.js +48 -16
  56. package/dist/room/track/LocalVideoTrack.js.map +1 -1
  57. package/dist/room/track/RemoteAudioTrack.d.ts +2 -0
  58. package/dist/room/track/RemoteAudioTrack.js +8 -0
  59. package/dist/room/track/RemoteAudioTrack.js.map +1 -1
  60. package/dist/room/track/RemoteVideoTrack.d.ts +1 -0
  61. package/dist/room/track/RemoteVideoTrack.js +6 -1
  62. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  63. package/dist/room/track/Track.d.ts +14 -2
  64. package/dist/room/track/Track.js +42 -0
  65. package/dist/room/track/Track.js.map +1 -1
  66. package/dist/room/track/TrackPublication.d.ts +1 -0
  67. package/dist/room/track/TrackPublication.js +2 -0
  68. package/dist/room/track/TrackPublication.js.map +1 -1
  69. package/dist/room/track/create.d.ts +23 -0
  70. package/dist/{livekit.js → room/track/create.js} +75 -110
  71. package/dist/room/track/create.js.map +1 -0
  72. package/dist/room/track/options.d.ts +76 -20
  73. package/dist/room/track/options.js +11 -6
  74. package/dist/room/track/options.js.map +1 -1
  75. package/dist/version.d.ts +2 -2
  76. package/dist/version.js +2 -2
  77. package/example/index.html +51 -20
  78. package/example/sample.ts +200 -87
  79. package/example/webpack.config.js +8 -2
  80. package/package.json +2 -2
  81. package/dist/livekit.d.ts +0 -44
  82. package/dist/livekit.js.map +0 -1
@@ -12,91 +12,80 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.createLocalTracks = exports.createLocalScreenTracks = exports.createLocalAudioTrack = exports.createLocalVideoTrack = exports.connect = exports.version = void 0;
16
- const loglevel_1 = __importDefault(require("loglevel"));
17
- const SignalClient_1 = require("./api/SignalClient");
15
+ exports.createLocalScreenTracks = exports.createLocalAudioTrack = exports.createLocalVideoTrack = exports.createLocalTracks = exports.isVideoCaptureAllowed = exports.isAudioCaptureAllowed = void 0;
16
+ const errors_1 = require("../errors");
17
+ const LocalAudioTrack_1 = __importDefault(require("./LocalAudioTrack"));
18
+ const LocalTrack_1 = __importDefault(require("./LocalTrack"));
19
+ const LocalVideoTrack_1 = __importDefault(require("./LocalVideoTrack"));
18
20
  const options_1 = require("./options");
19
- const errors_1 = require("./room/errors");
20
- const Room_1 = __importDefault(require("./room/Room"));
21
- const LocalAudioTrack_1 = __importDefault(require("./room/track/LocalAudioTrack"));
22
- const LocalTrack_1 = __importDefault(require("./room/track/LocalTrack"));
23
- const LocalVideoTrack_1 = __importDefault(require("./room/track/LocalVideoTrack"));
24
- const options_2 = require("./room/track/options");
25
- const Track_1 = require("./room/track/Track");
26
- var version_1 = require("./version");
27
- Object.defineProperty(exports, "version", { enumerable: true, get: function () { return version_1.version; } });
21
+ const Track_1 = require("./Track");
22
+ let audioAllowed;
23
+ function isAudioCaptureAllowed() {
24
+ return audioAllowed;
25
+ }
26
+ exports.isAudioCaptureAllowed = isAudioCaptureAllowed;
27
+ let videoAllowed;
28
+ function isVideoCaptureAllowed() {
29
+ return videoAllowed;
30
+ }
31
+ exports.isVideoCaptureAllowed = isVideoCaptureAllowed;
28
32
  /**
29
- * Connects to a LiveKit room
30
- *
31
- * ```typescript
32
- * connect('wss://myhost.livekit.io', token, {
33
- * // publish audio and video tracks on joining
34
- * audio: true,
35
- * video: {
36
- * resolution: VideoPresets.hd,
37
- * facingMode: {
38
- * ideal: "user",
39
- * }
40
- * }
41
- * })
42
- * ```
43
- * @param url URL to LiveKit server
44
- * @param token AccessToken, a JWT token that includes authentication and room details
33
+ * creates a local video and audio track at the same time
45
34
  * @param options
46
35
  */
47
- function connect(url, token, options) {
48
- var _a;
36
+ function createLocalTracks(options) {
49
37
  return __awaiter(this, void 0, void 0, function* () {
50
- // set defaults
51
- options || (options = {});
52
- options.logLevel || (options.logLevel = options_1.LogLevel.info);
53
- if (options.audio === undefined)
54
- options.audio = false;
55
- if (options.video === undefined)
56
- options.video = false;
57
- loglevel_1.default.setLevel(options.logLevel);
58
- const config = (_a = options.rtcConfig) !== null && _a !== void 0 ? _a : {};
59
- if (options.iceServers) {
60
- config.iceServers = options.iceServers;
61
- }
62
- const client = new SignalClient_1.WSSignalClient();
63
- const room = new Room_1.default(client, config);
64
- // connect to room
65
- yield room.connect(url, token, {
66
- autoSubscribe: options === null || options === void 0 ? void 0 : options.autoSubscribe,
67
- });
68
- // add tracks if available
69
- let { tracks } = options;
70
- if (!tracks) {
71
- if (options.audio || options.video) {
72
- tracks = yield createLocalTracks({
73
- audio: options.audio,
74
- video: options.video,
75
- });
76
- }
38
+ if (!options)
39
+ options = {};
40
+ if (options.audio !== false)
41
+ options.audio = {};
42
+ if (options.video !== false)
43
+ options.video = {};
44
+ const constraints = LocalTrack_1.default.constraintsForOptions(options);
45
+ let stream;
46
+ try {
47
+ stream = yield navigator.mediaDevices.getUserMedia(constraints);
77
48
  }
78
- if (tracks) {
79
- for (let i = 0; i < tracks.length; i += 1) {
80
- const track = tracks[i];
81
- // translate publish options
82
- const trackOptions = {};
83
- if (track.kind === Track_1.Track.Kind.Video.toString()
84
- || track.kind === Track_1.Track.Kind.Video) {
85
- trackOptions.videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;
86
- trackOptions.videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;
87
- trackOptions.simulcast = options === null || options === void 0 ? void 0 : options.simulcast;
49
+ catch (e) {
50
+ if (e instanceof DOMException && e.name === 'NotAllowedError') {
51
+ if (options.audio) {
52
+ audioAllowed = false;
88
53
  }
89
- else if (track.kind === Track_1.Track.Kind.Audio.toString()
90
- || track.kind === Track_1.Track.Kind.Audio) {
91
- trackOptions.audioBitrate = options.audioBitrate;
54
+ if (options.video) {
55
+ videoAllowed = false;
92
56
  }
93
- yield room.localParticipant.publishTrack(track, trackOptions);
94
57
  }
58
+ throw e;
95
59
  }
96
- return room;
60
+ if (options.audio) {
61
+ audioAllowed = true;
62
+ }
63
+ if (options.video) {
64
+ videoAllowed = true;
65
+ }
66
+ return stream.getTracks().map((mediaStreamTrack) => {
67
+ const isAudio = mediaStreamTrack.kind === 'audio';
68
+ let trackOptions = isAudio ? options.audio : options.video;
69
+ if (typeof trackOptions === 'boolean' || !trackOptions) {
70
+ trackOptions = {};
71
+ }
72
+ let trackConstraints;
73
+ const conOrBool = isAudio ? constraints.audio : constraints.video;
74
+ if (typeof conOrBool !== 'boolean') {
75
+ trackConstraints = conOrBool;
76
+ }
77
+ const track = createLocalTrack(mediaStreamTrack, trackOptions === null || trackOptions === void 0 ? void 0 : trackOptions.name, trackConstraints);
78
+ if (track.kind === Track_1.Track.Kind.Video) {
79
+ track.source = Track_1.Track.Source.Camera;
80
+ }
81
+ else if (track.kind === Track_1.Track.Kind.Audio) {
82
+ track.source = Track_1.Track.Source.Microphone;
83
+ }
84
+ return track;
85
+ });
97
86
  });
98
87
  }
99
- exports.connect = connect;
88
+ exports.createLocalTracks = createLocalTracks;
100
89
  /**
101
90
  * Creates a [[LocalVideoTrack]] with getUserMedia()
102
91
  * @param options
@@ -136,24 +125,28 @@ function createLocalScreenTracks(options) {
136
125
  options.name = 'screen';
137
126
  }
138
127
  if (options.resolution === undefined) {
139
- options.resolution = options_2.VideoPresets.fhd.resolution;
128
+ options.resolution = options_1.VideoPresets.fhd.resolution;
129
+ }
130
+ let videoConstraints = true;
131
+ if (options.resolution) {
132
+ videoConstraints = {
133
+ width: options.resolution.width,
134
+ height: options.resolution.height,
135
+ };
140
136
  }
141
137
  // typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232
142
138
  // @ts-ignore
143
139
  const stream = yield navigator.mediaDevices.getDisplayMedia({
144
140
  audio: (_a = options.audio) !== null && _a !== void 0 ? _a : false,
145
- video: {
146
- width: options.resolution.width,
147
- height: options.resolution.height,
148
- },
141
+ video: videoConstraints,
149
142
  });
150
143
  const tracks = stream.getVideoTracks();
151
144
  if (tracks.length === 0) {
152
145
  throw new errors_1.TrackInvalidError('no video track found');
153
146
  }
154
- const localTracks = [
155
- new LocalVideoTrack_1.default(tracks[0], options.name),
156
- ];
147
+ const screenVideo = new LocalVideoTrack_1.default(tracks[0], options.name);
148
+ screenVideo.source = Track_1.Track.Source.ScreenShare;
149
+ const localTracks = [screenVideo];
157
150
  if (stream.getAudioTracks().length > 0) {
158
151
  localTracks.push(new LocalAudioTrack_1.default(stream.getAudioTracks()[0], options.name));
159
152
  }
@@ -161,34 +154,6 @@ function createLocalScreenTracks(options) {
161
154
  });
162
155
  }
163
156
  exports.createLocalScreenTracks = createLocalScreenTracks;
164
- /**
165
- * creates a local video and audio track at the same time
166
- * @param options
167
- */
168
- function createLocalTracks(options) {
169
- return __awaiter(this, void 0, void 0, function* () {
170
- if (!options)
171
- options = {};
172
- if (options.audio === undefined)
173
- options.audio = {};
174
- const constraints = LocalTrack_1.default.constraintsForOptions(options);
175
- const stream = yield navigator.mediaDevices.getUserMedia(constraints);
176
- return stream.getTracks().map((mediaStreamTrack) => {
177
- const isAudio = mediaStreamTrack.kind === 'audio';
178
- let trackOptions = isAudio ? options.audio : options.video;
179
- if (typeof trackOptions === 'boolean' || !trackOptions) {
180
- trackOptions = {};
181
- }
182
- let trackConstraints;
183
- const conOrBool = isAudio ? constraints.audio : constraints.video;
184
- if (typeof conOrBool !== 'boolean') {
185
- trackConstraints = conOrBool;
186
- }
187
- return createLocalTrack(mediaStreamTrack, trackOptions === null || trackOptions === void 0 ? void 0 : trackOptions.name, trackConstraints);
188
- });
189
- });
190
- }
191
- exports.createLocalTracks = createLocalTracks;
192
157
  /** @internal */
193
158
  function createLocalTrack(mediaStreamTrack, name, constraints) {
194
159
  switch (mediaStreamTrack.kind) {
@@ -200,4 +165,4 @@ function createLocalTrack(mediaStreamTrack, name, constraints) {
200
165
  throw new errors_1.TrackInvalidError(`unsupported track type: ${mediaStreamTrack.kind}`);
201
166
  }
202
167
  }
203
- //# sourceMappingURL=livekit.js.map
168
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/room/track/create.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,13 @@
1
- /**
2
- * Options when publishing tracks
3
- */
4
- export interface TrackPublishOptions {
1
+ import { Track } from './Track';
2
+ export interface TrackPublishDefaults {
5
3
  /**
6
- * set a track name
4
+ * encoding parameters for camera track
7
5
  */
8
- name?: string;
6
+ videoEncoding?: VideoEncoding;
9
7
  /**
10
- * encoding parameters, if empty, LiveKit will automatically select an appropriate
11
- * encoding based on bitrate
8
+ * encoding parameters for screen share track
12
9
  */
13
- videoEncoding?: VideoEncoding;
10
+ screenShareEncoding?: VideoEncoding;
14
11
  /**
15
12
  * codec, defaults to vp8
16
13
  */
@@ -19,12 +16,64 @@ export interface TrackPublishOptions {
19
16
  * max audio bitrate, defaults to [[AudioPresets.speech]]
20
17
  */
21
18
  audioBitrate?: number;
19
+ /**
20
+ * dtx (Discontinuous Tranmission of audio), defaults to true
21
+ */
22
+ dtx?: boolean;
22
23
  /**
23
24
  * use simulcast, defaults to false.
24
- * When using simulcast, LiveKit will publish up to three version of the stream at varying qualiti
25
+ * When using simulcast, LiveKit will publish up to three version of the stream
26
+ * at various resolutions.
25
27
  */
26
28
  simulcast?: boolean;
27
29
  }
30
+ export interface TrackCaptureDefaults {
31
+ /**
32
+ * default device to use for microphone capture
33
+ */
34
+ audioDeviceId?: string;
35
+ /**
36
+ * specifies whether automatic gain control is preferred, defaults to true
37
+ */
38
+ autoGainControl?: boolean;
39
+ /**
40
+ * the channel count or range of channel counts which are acceptable and/or required
41
+ */
42
+ channelCount?: number;
43
+ /**
44
+ * whether or not echo cancellation is preferred, defaults to true
45
+ */
46
+ echoCancellation?: boolean;
47
+ /**
48
+ * whether noise suppression is preferred, defaults to true
49
+ */
50
+ noiseSuppression?: boolean;
51
+ /**
52
+ * set if a particular video facing mode is preferred
53
+ */
54
+ videoFacingMode?: 'user' | 'environment' | 'left' | 'right';
55
+ /**
56
+ * default device to use for camera capture
57
+ */
58
+ videoDeviceId?: string;
59
+ /**
60
+ * default video capture resolution
61
+ */
62
+ videoResolution?: VideoResolution;
63
+ }
64
+ /**
65
+ * Options when publishing tracks
66
+ */
67
+ export interface TrackPublishOptions extends TrackPublishDefaults {
68
+ /**
69
+ * set a track name
70
+ */
71
+ name?: string;
72
+ /**
73
+ * Source of track, camera, microphone, or screen
74
+ */
75
+ source?: Track.Source;
76
+ }
28
77
  export interface CreateLocalTracksOptions {
29
78
  /**
30
79
  * audio track options, true to create with defaults. false if audio shouldn't be created
@@ -52,7 +101,7 @@ export interface CreateVideoTrackOptions extends CreateLocalTrackOptions {
52
101
  * [valid options](https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/facingMode)
53
102
  */
54
103
  facingMode?: ConstrainDOMString;
55
- resolution?: VideoResolutionConstraint;
104
+ resolution?: VideoResolution;
56
105
  }
57
106
  export interface CreateScreenTrackOptions {
58
107
  /** name of track, defaults to "screen" */
@@ -63,7 +112,7 @@ export interface CreateScreenTrackOptions {
63
112
  */
64
113
  audio?: boolean;
65
114
  /** capture resolution, defaults to full HD */
66
- resolution?: VideoResolutionConstraint;
115
+ resolution?: VideoResolution;
67
116
  }
68
117
  export interface CreateAudioTrackOptions extends CreateLocalTrackOptions {
69
118
  /**
@@ -100,8 +149,8 @@ export interface CreateAudioTrackOptions extends CreateLocalTrackOptions {
100
149
  *
101
150
  * ```typescript
102
151
  * {
103
- * width: { ideal: 960 },
104
- * height: { ideal: 540 },
152
+ * width: 960,
153
+ * height: 540,
105
154
  * frameRate: {
106
155
  * ideal: 30,
107
156
  * max: 60,
@@ -109,21 +158,21 @@ export interface CreateAudioTrackOptions extends CreateLocalTrackOptions {
109
158
  * }
110
159
  * ```
111
160
  */
112
- export interface VideoResolutionConstraint {
113
- width: ConstrainULong;
114
- height: ConstrainULong;
115
- frameRate?: ConstrainDouble;
161
+ export interface VideoResolution {
162
+ width: number;
163
+ height: number;
164
+ frameRate?: number;
116
165
  }
117
166
  export interface VideoEncoding {
118
167
  maxBitrate: number;
119
- maxFramerate: number;
168
+ maxFramerate?: number;
120
169
  }
121
170
  export declare class VideoPreset {
122
171
  encoding: VideoEncoding;
123
172
  width: number;
124
173
  height: number;
125
174
  constructor(width: number, height: number, maxBitrate: number, maxFramerate: number);
126
- get resolution(): VideoResolutionConstraint;
175
+ get resolution(): VideoResolution;
127
176
  }
128
177
  export interface AudioPreset {
129
178
  maxBitrate: number;
@@ -154,3 +203,10 @@ export declare const VideoPresets43: {
154
203
  hd: VideoPreset;
155
204
  fhd: VideoPreset;
156
205
  };
206
+ export declare const ScreenSharePresets: {
207
+ vga: VideoPreset;
208
+ hd_8: VideoPreset;
209
+ hd_15: VideoPreset;
210
+ fhd_15: VideoPreset;
211
+ fhd_30: VideoPreset;
212
+ };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VideoPresets43 = exports.VideoPresets = exports.AudioPresets = exports.VideoPreset = void 0;
3
+ exports.ScreenSharePresets = exports.VideoPresets43 = exports.VideoPresets = exports.AudioPresets = exports.VideoPreset = void 0;
4
4
  class VideoPreset {
5
5
  constructor(width, height, maxBitrate, maxFramerate) {
6
6
  this.width = width;
@@ -12,11 +12,9 @@ class VideoPreset {
12
12
  }
13
13
  get resolution() {
14
14
  return {
15
- width: { ideal: this.width },
16
- height: { ideal: this.height },
17
- frameRate: {
18
- ideal: this.encoding.maxFramerate,
19
- },
15
+ width: this.width,
16
+ height: this.height,
17
+ frameRate: this.encoding.maxFramerate,
20
18
  };
21
19
  }
22
20
  }
@@ -53,4 +51,11 @@ exports.VideoPresets43 = {
53
51
  hd: new VideoPreset(960, 720, 2000000, 30),
54
52
  fhd: new VideoPreset(1440, 1080, 3200000, 30),
55
53
  };
54
+ exports.ScreenSharePresets = {
55
+ vga: new VideoPreset(640, 360, 200000, 3),
56
+ hd_8: new VideoPreset(1280, 720, 400000, 5),
57
+ hd_15: new VideoPreset(1280, 720, 1250000, 15),
58
+ fhd_15: new VideoPreset(1920, 1080, 2000000, 15),
59
+ fhd_30: new VideoPreset(1920, 1080, 4000000, 30),
60
+ };
56
61
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":";;;AA+IA,MAAa,WAAW;IAOtB,YAAY,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,YAAoB;QACjF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG;YACd,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAC5B,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;YAC9B,SAAS,EAAE;gBACT,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;aAClC;SACF,CAAC;IACJ,CAAC;CACF;AAzBD,kCAyBC;AAQD,IAAiB,YAAY,CAU5B;AAVD,WAAiB,YAAY;IACd,sBAAS,GAAgB;QACpC,UAAU,EAAE,KAAM;KACnB,CAAC;IACW,mBAAM,GAAgB;QACjC,UAAU,EAAE,KAAM;KACnB,CAAC;IACW,kBAAK,GAAgB;QAChC,UAAU,EAAE,KAAM;KACnB,CAAC;AACJ,CAAC,EAVgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAU5B;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,EAAE,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAC7C,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CAChD,CAAC;AAEF;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,EAAE,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CAChD,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":";;;AA4MA,MAAa,WAAW;IAOtB,YAAY,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,YAAoB;QACjF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG;YACd,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;CACF;AAvBD,kCAuBC;AAQD,IAAiB,YAAY,CAU5B;AAVD,WAAiB,YAAY;IACd,sBAAS,GAAgB;QACpC,UAAU,EAAE,KAAM;KACnB,CAAC;IACW,mBAAM,GAAgB;QACjC,UAAU,EAAE,KAAM;KACnB,CAAC;IACW,kBAAK,GAAgB;QAChC,UAAU,EAAE,KAAM;KACnB,CAAC;AACJ,CAAC,EAVgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAU5B;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,EAAE,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAC7C,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CAChD,CAAC;AAEF;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,EAAE,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CAChD,CAAC;AAEW,QAAA,kBAAkB,GAAG;IAChC,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,MAAO,EAAE,CAAC,CAAC;IAC5C,KAAK,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAChD,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;IAClD,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CACnD,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "0.12.2";
2
- export declare const protocolVersion = 3;
1
+ export declare const version = "0.13.3";
2
+ export declare const protocolVersion = 4;
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.protocolVersion = exports.version = void 0;
4
- exports.version = '0.12.2';
5
- exports.protocolVersion = 3;
4
+ exports.version = '0.13.3';
5
+ exports.protocolVersion = 4;
6
6
  //# sourceMappingURL=version.js.map
@@ -52,7 +52,19 @@
52
52
  </div>
53
53
 
54
54
  <div class="form-group row">
55
- <div class="col-md-3"></div>
55
+ <div class="col-md-2 offset-md-1">
56
+ <div class="form-check">
57
+ <input
58
+ type="checkbox"
59
+ class="form-check-input"
60
+ id="publish-option"
61
+ checked
62
+ />
63
+ <label for="checkbox" class="form-check-label">
64
+ Publish
65
+ </label>
66
+ </div>
67
+ </div>
56
68
  <div class="col-md-2">
57
69
  <div class="form-check">
58
70
  <input
@@ -84,44 +96,44 @@
84
96
  <div class="col-md-2">
85
97
  <button
86
98
  id="connect-button"
87
- class="btn btn-primary"
99
+ class="btn btn-primary mt-1"
88
100
  type="button"
89
101
  onclick="connectWithFormInput()"
90
102
  >
91
103
  Connect
92
104
  </button>
93
105
  </div>
94
- <div class="col-md-8">
106
+ <div class="col-md-10">
95
107
  <button
96
- id="mute-audio-button"
97
- class="btn btn-secondary"
108
+ id="toggle-audio-button"
109
+ class="btn btn-secondary mt-1"
98
110
  disabled
99
111
  type="button"
100
- onclick="muteAudio()"
112
+ onclick="toggleAudio()"
101
113
  >
102
- Mute Audio
114
+ Enable Audio
103
115
  </button>
104
116
  <button
105
- id="mute-video-button"
106
- class="btn btn-secondary"
117
+ id="toggle-video-button"
118
+ class="btn btn-secondary mt-1"
107
119
  disabled
108
120
  type="button"
109
- onclick="muteVideo()"
121
+ onclick="toggleVideo()"
110
122
  >
111
- Mute Video
123
+ Enable Video
112
124
  </button>
113
125
  <button
114
126
  id="flip-video-button"
115
- class="btn btn-secondary"
127
+ class="btn btn-secondary mt-1"
116
128
  disabled
117
129
  type="button"
118
130
  onclick="flipVideo()"
119
131
  >
120
- Flip Video
132
+ Back Camera
121
133
  </button>
122
134
  <button
123
135
  id="share-screen-button"
124
- class="btn btn-secondary"
136
+ class="btn btn-secondary mt-1"
125
137
  disabled
126
138
  type="button"
127
139
  onclick="shareScreen()"
@@ -130,16 +142,16 @@
130
142
  </button>
131
143
  <button
132
144
  id="disconnect-ws-button"
133
- class="btn btn-warning"
145
+ class="btn btn-warning mt-1"
134
146
  disabled
135
147
  type="button"
136
148
  onclick="disconnectSignal()"
137
149
  >
138
- WS reconnect
150
+ WS Reconnect
139
151
  </button>
140
152
  <button
141
153
  id="disconnect-room-button"
142
- class="btn btn-danger"
154
+ class="btn btn-danger mt-1"
143
155
  disabled
144
156
  type="button"
145
157
  onclick="disconnectRoom()"
@@ -148,16 +160,35 @@
148
160
  </button>
149
161
  <button
150
162
  id="start-audio-button"
151
- class="btn btn-secondary"
163
+ class="btn btn-secondary mt-1"
152
164
  disabled
153
165
  type="button"
154
166
  onclick="startAudio()"
155
167
  >
156
- Enable audio
168
+ Enable Audio
157
169
  </button>
158
170
  </div>
159
171
  </div>
160
172
 
173
+ <!-- video devices -->
174
+ <div class="form-group row">
175
+ <div class="col-md-4">
176
+ <select id="video-input" class="custom-select" onchange="handleDeviceSelected(event)">
177
+ <option selected>Video Input (default)</option>
178
+ </select>
179
+ </div>
180
+ <div class="col-md-4">
181
+ <select id="audio-input" class="custom-select" onchange="handleDeviceSelected(event)">
182
+ <option selected>Audio Input (default)</option>
183
+ </select>
184
+ </div>
185
+ <div class="col-md-4">
186
+ <select id="audio-output" class="custom-select" onchange="handleDeviceSelected(event)">
187
+ <option selected>Audio Output (default)</option>
188
+ </select>
189
+ </div>
190
+ </div>
191
+
161
192
  <div class="form-group row">
162
193
  <textarea
163
194
  class="form-control col-md-12"
@@ -174,7 +205,7 @@
174
205
  <textarea class="form-control" id="chat" rows="15"></textarea>
175
206
  </div>
176
207
  </div>
177
- <div class="row">
208
+ <div class="row mt-1">
178
209
  <div class="col-md-10">
179
210
  <input type="text" class="form-control" id="entry" />
180
211
  </div>