livekit-client
Advanced tools
Comparing version 0.3.1 to 0.3.2
@@ -1,2 +0,2 @@ | ||
import { ConnectionInfo } from './api/RTCClient'; | ||
import { ConnectionInfo } from './api/SignalClient'; | ||
import * as livekit from './livekit'; | ||
@@ -3,0 +3,0 @@ import { LocalParticipant } from './room/participant/LocalParticipant'; |
@@ -1,2 +0,2 @@ | ||
import { ConnectionInfo } from './api/RTCClient'; | ||
import { ConnectionInfo } from './api/SignalClient'; | ||
import { ConnectOptions, CreateLocalTrackOptions, CreateLocalTracksOptions } from './options'; | ||
@@ -3,0 +3,0 @@ import Room from './room/Room'; |
@@ -17,3 +17,3 @@ "use strict"; | ||
const loglevel_1 = __importDefault(require("loglevel")); | ||
const RTCClient_1 = require("./api/RTCClient"); | ||
const SignalClient_1 = require("./api/SignalClient"); | ||
const options_1 = require("./options"); | ||
@@ -47,3 +47,3 @@ const errors_1 = require("./room/errors"); | ||
} | ||
const client = new RTCClient_1.RTCClientImpl(); | ||
const client = new SignalClient_1.WSSignalClient(); | ||
const room = new Room_1.default(client, config); | ||
@@ -50,0 +50,0 @@ // connect to room |
@@ -48,2 +48,6 @@ import { TrackType, Room, ParticipantInfo, TrackInfo } from './model'; | ||
trackPublished?: TrackPublishedResponse | undefined; | ||
/** | ||
* list of active speakers | ||
*/ | ||
speaker?: ActiveSpeakerUpdate | undefined; | ||
} | ||
@@ -91,2 +95,16 @@ export interface AddTrackRequest { | ||
} | ||
export interface ActiveSpeakerUpdate { | ||
speakers: SpeakerInfo[]; | ||
} | ||
export interface SpeakerInfo { | ||
sid: string; | ||
/** | ||
* audio level, 0-1.0, 1 is loudest | ||
*/ | ||
level: number; | ||
/** | ||
* true if speaker is currently active | ||
*/ | ||
active: boolean; | ||
} | ||
export declare const protobufPackage = "livekit"; | ||
@@ -170,2 +188,16 @@ export declare enum SignalTarget { | ||
}; | ||
export declare const ActiveSpeakerUpdate: { | ||
encode(message: ActiveSpeakerUpdate, writer?: Writer): Writer; | ||
decode(input: Uint8Array | Reader, length?: number | undefined): ActiveSpeakerUpdate; | ||
fromJSON(object: any): ActiveSpeakerUpdate; | ||
fromPartial(object: DeepPartial<ActiveSpeakerUpdate>): ActiveSpeakerUpdate; | ||
toJSON(message: ActiveSpeakerUpdate): unknown; | ||
}; | ||
export declare const SpeakerInfo: { | ||
encode(message: SpeakerInfo, writer?: Writer): Writer; | ||
decode(input: Uint8Array | Reader, length?: number | undefined): SpeakerInfo; | ||
fromJSON(object: any): SpeakerInfo; | ||
fromPartial(object: DeepPartial<SpeakerInfo>): SpeakerInfo; | ||
toJSON(message: SpeakerInfo): unknown; | ||
}; | ||
declare type Builtin = Date | Function | Uint8Array | string | number | undefined; | ||
@@ -172,0 +204,0 @@ export declare type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ParticipantUpdate = exports.SessionDescription = exports.TrackPublishedResponse = exports.JoinResponse = exports.NegotiationRequest = exports.MuteTrackRequest = exports.TrickleRequest = exports.AddTrackRequest = exports.SignalResponse = exports.SignalRequest = exports.signalTargetToJSON = exports.signalTargetFromJSON = exports.SignalTarget = exports.protobufPackage = void 0; | ||
exports.SpeakerInfo = exports.ActiveSpeakerUpdate = exports.ParticipantUpdate = exports.SessionDescription = exports.TrackPublishedResponse = exports.JoinResponse = exports.NegotiationRequest = exports.MuteTrackRequest = exports.TrickleRequest = exports.AddTrackRequest = exports.SignalResponse = exports.SignalRequest = exports.signalTargetToJSON = exports.signalTargetFromJSON = exports.SignalTarget = exports.protobufPackage = void 0; | ||
/* eslint-disable */ | ||
@@ -34,2 +34,8 @@ const model_1 = require("./model"); | ||
const baseParticipantUpdate = {}; | ||
const baseActiveSpeakerUpdate = {}; | ||
const baseSpeakerInfo = { | ||
sid: "", | ||
level: 0, | ||
active: false, | ||
}; | ||
exports.protobufPackage = 'livekit'; | ||
@@ -233,2 +239,5 @@ var SignalTarget; | ||
} | ||
if (message.speaker !== undefined) { | ||
exports.ActiveSpeakerUpdate.encode(message.speaker, writer.uint32(58).fork()).ldelim(); | ||
} | ||
return writer; | ||
@@ -261,2 +270,5 @@ }, | ||
break; | ||
case 7: | ||
message.speaker = exports.ActiveSpeakerUpdate.decode(reader, reader.uint32()); | ||
break; | ||
default: | ||
@@ -307,2 +319,8 @@ reader.skipType(tag & 7); | ||
} | ||
if (object.speaker !== undefined && object.speaker !== null) { | ||
message.speaker = exports.ActiveSpeakerUpdate.fromJSON(object.speaker); | ||
} | ||
else { | ||
message.speaker = undefined; | ||
} | ||
return message; | ||
@@ -348,2 +366,8 @@ }, | ||
} | ||
if (object.speaker !== undefined && object.speaker !== null) { | ||
message.speaker = exports.ActiveSpeakerUpdate.fromPartial(object.speaker); | ||
} | ||
else { | ||
message.speaker = undefined; | ||
} | ||
return message; | ||
@@ -359,2 +383,3 @@ }, | ||
message.trackPublished !== undefined && (obj.trackPublished = message.trackPublished ? exports.TrackPublishedResponse.toJSON(message.trackPublished) : undefined); | ||
message.speaker !== undefined && (obj.speaker = message.speaker ? exports.ActiveSpeakerUpdate.toJSON(message.speaker) : undefined); | ||
return obj; | ||
@@ -905,2 +930,140 @@ }, | ||
}; | ||
exports.ActiveSpeakerUpdate = { | ||
encode(message, writer = minimal_1.Writer.create()) { | ||
for (const v of message.speakers) { | ||
exports.SpeakerInfo.encode(v, writer.uint32(10).fork()).ldelim(); | ||
} | ||
return writer; | ||
}, | ||
decode(input, length) { | ||
const reader = input instanceof Uint8Array ? new minimal_1.Reader(input) : input; | ||
let end = length === undefined ? reader.len : reader.pos + length; | ||
const message = Object.assign({}, baseActiveSpeakerUpdate); | ||
message.speakers = []; | ||
while (reader.pos < end) { | ||
const tag = reader.uint32(); | ||
switch (tag >>> 3) { | ||
case 1: | ||
message.speakers.push(exports.SpeakerInfo.decode(reader, reader.uint32())); | ||
break; | ||
default: | ||
reader.skipType(tag & 7); | ||
break; | ||
} | ||
} | ||
return message; | ||
}, | ||
fromJSON(object) { | ||
const message = Object.assign({}, baseActiveSpeakerUpdate); | ||
message.speakers = []; | ||
if (object.speakers !== undefined && object.speakers !== null) { | ||
for (const e of object.speakers) { | ||
message.speakers.push(exports.SpeakerInfo.fromJSON(e)); | ||
} | ||
} | ||
return message; | ||
}, | ||
fromPartial(object) { | ||
const message = Object.assign({}, baseActiveSpeakerUpdate); | ||
message.speakers = []; | ||
if (object.speakers !== undefined && object.speakers !== null) { | ||
for (const e of object.speakers) { | ||
message.speakers.push(exports.SpeakerInfo.fromPartial(e)); | ||
} | ||
} | ||
return message; | ||
}, | ||
toJSON(message) { | ||
const obj = {}; | ||
if (message.speakers) { | ||
obj.speakers = message.speakers.map(e => e ? exports.SpeakerInfo.toJSON(e) : undefined); | ||
} | ||
else { | ||
obj.speakers = []; | ||
} | ||
return obj; | ||
}, | ||
}; | ||
exports.SpeakerInfo = { | ||
encode(message, writer = minimal_1.Writer.create()) { | ||
writer.uint32(10).string(message.sid); | ||
writer.uint32(21).float(message.level); | ||
writer.uint32(24).bool(message.active); | ||
return writer; | ||
}, | ||
decode(input, length) { | ||
const reader = input instanceof Uint8Array ? new minimal_1.Reader(input) : input; | ||
let end = length === undefined ? reader.len : reader.pos + length; | ||
const message = Object.assign({}, baseSpeakerInfo); | ||
while (reader.pos < end) { | ||
const tag = reader.uint32(); | ||
switch (tag >>> 3) { | ||
case 1: | ||
message.sid = reader.string(); | ||
break; | ||
case 2: | ||
message.level = reader.float(); | ||
break; | ||
case 3: | ||
message.active = reader.bool(); | ||
break; | ||
default: | ||
reader.skipType(tag & 7); | ||
break; | ||
} | ||
} | ||
return message; | ||
}, | ||
fromJSON(object) { | ||
const message = Object.assign({}, baseSpeakerInfo); | ||
if (object.sid !== undefined && object.sid !== null) { | ||
message.sid = String(object.sid); | ||
} | ||
else { | ||
message.sid = ""; | ||
} | ||
if (object.level !== undefined && object.level !== null) { | ||
message.level = Number(object.level); | ||
} | ||
else { | ||
message.level = 0; | ||
} | ||
if (object.active !== undefined && object.active !== null) { | ||
message.active = Boolean(object.active); | ||
} | ||
else { | ||
message.active = false; | ||
} | ||
return message; | ||
}, | ||
fromPartial(object) { | ||
const message = Object.assign({}, baseSpeakerInfo); | ||
if (object.sid !== undefined && object.sid !== null) { | ||
message.sid = object.sid; | ||
} | ||
else { | ||
message.sid = ""; | ||
} | ||
if (object.level !== undefined && object.level !== null) { | ||
message.level = object.level; | ||
} | ||
else { | ||
message.level = 0; | ||
} | ||
if (object.active !== undefined && object.active !== null) { | ||
message.active = object.active; | ||
} | ||
else { | ||
message.active = false; | ||
} | ||
return message; | ||
}, | ||
toJSON(message) { | ||
const obj = {}; | ||
message.sid !== undefined && (obj.sid = message.sid); | ||
message.level !== undefined && (obj.level = message.level); | ||
message.active !== undefined && (obj.active = message.active); | ||
return obj; | ||
}, | ||
}; | ||
//# sourceMappingURL=rtc.js.map |
@@ -11,3 +11,4 @@ export declare enum RoomEvent { | ||
TrackUnmuted = "trackUnmuted", | ||
TrackMessage = "trackMessage" | ||
TrackMessage = "trackMessage", | ||
ActiveSpeakersChanged = "activeSpeakersChanged" | ||
} | ||
@@ -28,3 +29,4 @@ export declare enum ParticipantEvent { | ||
MediaTrackAdded = "mediaTrackAdded", | ||
DataChannelAdded = "dataChannelAdded" | ||
DataChannelAdded = "dataChannelAdded", | ||
SpeakersUpdate = "speakersUpdate" | ||
} | ||
@@ -31,0 +33,0 @@ export declare enum TrackEvent { |
@@ -16,2 +16,3 @@ "use strict"; | ||
RoomEvent["TrackMessage"] = "trackMessage"; | ||
RoomEvent["ActiveSpeakersChanged"] = "activeSpeakersChanged"; | ||
})(RoomEvent = exports.RoomEvent || (exports.RoomEvent = {})); | ||
@@ -35,2 +36,3 @@ var ParticipantEvent; | ||
EngineEvent["DataChannelAdded"] = "dataChannelAdded"; | ||
EngineEvent["SpeakersUpdate"] = "speakersUpdate"; | ||
})(EngineEvent = exports.EngineEvent || (exports.EngineEvent = {})); | ||
@@ -37,0 +39,0 @@ var TrackEvent; |
@@ -19,2 +19,3 @@ /// <reference types="node" /> | ||
tracks: Map<string, TrackPublication>; | ||
audioLevel: number; | ||
sid: string; | ||
@@ -21,0 +22,0 @@ identity: string; |
@@ -14,2 +14,4 @@ "use strict"; | ||
super(); | ||
// audio level between 0-1.0, 1 being loudest, 0 being softest | ||
this.audioLevel = 0; | ||
// client passed metadata | ||
@@ -16,0 +18,0 @@ this.metadata = {}; |
/// <reference types="node" /> | ||
import { EventEmitter } from 'events'; | ||
import { ConnectionInfo, RTCClient } from '../api/RTCClient'; | ||
import { Participant } from '..'; | ||
import { ConnectionInfo, SignalClient } from '../api/SignalClient'; | ||
import { LocalParticipant } from './participant/LocalParticipant'; | ||
@@ -17,3 +18,3 @@ import { RemoteParticipant } from './participant/RemoteParticipant'; | ||
participants: Map<string, RemoteParticipant>; | ||
dominantSpeaker?: RemoteParticipant; | ||
activeSpeakers: Participant[]; | ||
autoTracks?: LocalTrackPublication[]; | ||
@@ -23,3 +24,3 @@ sid: string; | ||
localParticipant: LocalParticipant; | ||
constructor(client: RTCClient, config?: RTCConfiguration); | ||
constructor(client: SignalClient, config?: RTCConfiguration); | ||
connect: (info: ConnectionInfo, token: string) => Promise<Room>; | ||
@@ -31,2 +32,3 @@ disconnect(): void; | ||
private handleParticipantDisconnected; | ||
private handleSpeakerUpdate; | ||
private getOrCreateParticipant; | ||
@@ -33,0 +35,0 @@ emit(event: string | symbol, ...args: any[]): boolean; |
@@ -36,2 +36,3 @@ "use strict"; | ||
this.state = RoomState.Disconnected; | ||
this.activeSpeakers = []; | ||
this.connect = (info, token) => __awaiter(this, void 0, void 0, function* () { | ||
@@ -93,2 +94,5 @@ // guard against calling connect | ||
}); | ||
this.engine.on(events_2.EngineEvent.SpeakersUpdate, (speakers) => { | ||
this.handleSpeakerUpdate(speakers); | ||
}); | ||
} | ||
@@ -148,2 +152,30 @@ disconnect() { | ||
} | ||
handleSpeakerUpdate(speakers) { | ||
const activeSpeakers = []; | ||
const seenSids = {}; | ||
speakers.forEach((speaker) => { | ||
seenSids[speaker.sid] = true; | ||
if (speaker.sid === this.localParticipant.sid) { | ||
this.localParticipant.audioLevel = speaker.level; | ||
activeSpeakers.push(this.localParticipant); | ||
} | ||
else { | ||
const p = this.participants.get(speaker.sid); | ||
if (p) { | ||
p.audioLevel = speaker.level; | ||
activeSpeakers.push(p); | ||
} | ||
} | ||
}); | ||
if (!seenSids[this.localParticipant.sid]) { | ||
this.localParticipant.audioLevel = 0; | ||
} | ||
this.participants.forEach((p) => { | ||
if (!seenSids[p.sid]) { | ||
p.audioLevel = 0; | ||
} | ||
}); | ||
this.activeSpeakers = activeSpeakers; | ||
this.emit(events_2.RoomEvent.ActiveSpeakersChanged, activeSpeakers); | ||
} | ||
getOrCreateParticipant(id, info) { | ||
@@ -150,0 +182,0 @@ let participant = this.participants.get(id); |
/// <reference types="node" /> | ||
import { EventEmitter } from 'events'; | ||
import { ConnectionInfo, RTCClient } from '../api/RTCClient'; | ||
import { ConnectionInfo, SignalClient } from '../api/SignalClient'; | ||
import { TrackInfo } from '../proto/model'; | ||
@@ -11,3 +11,3 @@ import { JoinResponse } from '../proto/rtc'; | ||
subscriber: PCTransport; | ||
client: RTCClient; | ||
client: SignalClient; | ||
privateDC?: RTCDataChannel; | ||
@@ -20,3 +20,3 @@ rtcConnected: boolean; | ||
}; | ||
constructor(client: RTCClient, config?: RTCConfiguration); | ||
constructor(client: SignalClient, config?: RTCConfiguration); | ||
join(info: ConnectionInfo, token: string): Promise<JoinResponse>; | ||
@@ -23,0 +23,0 @@ close(): Promise<void>; |
@@ -152,2 +152,5 @@ "use strict"; | ||
}; | ||
this.client.onActiveSpeakersChanged = (speakers) => { | ||
this.emit(events_2.EngineEvent.SpeakersUpdate, speakers); | ||
}; | ||
} | ||
@@ -154,0 +157,0 @@ negotiate() { |
@@ -1,2 +0,2 @@ | ||
declare const version = "0.3.1"; | ||
declare const version = "0.3.2"; | ||
export { version }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.version = void 0; | ||
const version = '0.3.1'; | ||
const version = '0.3.2'; | ||
exports.version = version; | ||
//# sourceMappingURL=version.js.map |
{ | ||
"name": "livekit-client", | ||
"version": "0.3.1", | ||
"version": "0.3.2", | ||
"description": "JavaScript/TypeScript client SDK for LiveKit", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
314220
119
4931