@webex/web-client-media-engine 1.33.2
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/LICENSE.md +3 -0
- package/README.md +184 -0
- package/dist/cjs/index.js +10037 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/index.js +10011 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/types/index.d.ts +181 -0
- package/package.json +107 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { ConnectionState, LocalTrack } from '@webex/webrtc-core';
|
|
2
|
+
export { AudioDeviceConstraints, ConnectionState, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, LocalTrackEvents, TrackEndEvent, TrackMuteEvent, TrackPublishEvent, VideoDeviceConstraints, WcmeError, createCameraTrack, createDisplayTrack, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getVideoInputDevices, setOnDeviceChangeHandler } from '@webex/webrtc-core';
|
|
3
|
+
import { StreamId, SourceState, Policy, PolicySpecificInfo, CodecInfo, JmpScrRequest, ActiveSpeakerNotificationMsg, MediaType, Source } from '@webex-connect/json-multistream';
|
|
4
|
+
export { SourceState } from '@webex-connect/json-multistream';
|
|
5
|
+
import TypedEmitter, { EventMap } from 'typed-emitter';
|
|
6
|
+
import { StatsReport, LogData } from '@webex-connect/rtcstats';
|
|
7
|
+
import * as js_logger from 'js-logger';
|
|
8
|
+
import { ILogLevel } from 'js-logger';
|
|
9
|
+
export { default as Logger } from 'js-logger';
|
|
10
|
+
|
|
11
|
+
declare const EventEmitter_base: new <TT extends EventMap>() => TypedEmitter<TT>;
|
|
12
|
+
declare class EventEmitter<T extends EventMap> extends EventEmitter_base<T> {
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
declare type ReceiveSlotId = StreamId;
|
|
16
|
+
declare function compareReceiveSlotIds(id1: ReceiveSlotId, id2: ReceiveSlotId): boolean;
|
|
17
|
+
declare enum ReceiveSlotEvents {
|
|
18
|
+
MediaStarted = "media-started",
|
|
19
|
+
MediaStopped = "media-stopped",
|
|
20
|
+
SourceUpdate = "source-update"
|
|
21
|
+
}
|
|
22
|
+
interface ReceiverEvents extends EventMap {
|
|
23
|
+
[ReceiveSlotEvents.MediaStarted]: () => void;
|
|
24
|
+
[ReceiveSlotEvents.MediaStopped]: () => void;
|
|
25
|
+
[ReceiveSlotEvents.SourceUpdate]: (state: SourceState, csi?: number) => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare class ReceiveSlot extends EventEmitter<ReceiverEvents> {
|
|
29
|
+
static Events: typeof ReceiveSlotEvents;
|
|
30
|
+
private _idGetter;
|
|
31
|
+
private _stream;
|
|
32
|
+
currentRxCsi?: number;
|
|
33
|
+
constructor(idGetter: () => ReceiveSlotId | null, track: MediaStreamTrack);
|
|
34
|
+
private addTrackHandlers;
|
|
35
|
+
private handleTrackMuted;
|
|
36
|
+
private handleTrackUnmuted;
|
|
37
|
+
private removeTrackHandlers;
|
|
38
|
+
replaceTrack(newTrack: MediaStreamTrack): void;
|
|
39
|
+
_updateSource(state: SourceState, csi?: number): void;
|
|
40
|
+
close(): void;
|
|
41
|
+
get id(): ReceiveSlotId | null;
|
|
42
|
+
get stream(): MediaStream;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
declare class MediaRequest {
|
|
46
|
+
policy: Policy;
|
|
47
|
+
policySpecificInfo: PolicySpecificInfo;
|
|
48
|
+
receiveSlots: ReceiveSlot[];
|
|
49
|
+
maxPayloadBitsPerSecond: number;
|
|
50
|
+
codecInfos?: CodecInfo[];
|
|
51
|
+
constructor(policy: Policy, policySpecificInfo: PolicySpecificInfo, receiveSlots: ReceiveSlot[], maxPayloadBitsPerSecond: number, codecInfos?: CodecInfo[]);
|
|
52
|
+
_toJmpScrRequest(): JmpScrRequest;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare enum MediaCodecMimeType {
|
|
56
|
+
H264 = "video/H264",
|
|
57
|
+
AV1 = "video/AV1",
|
|
58
|
+
OPUS = "audio/opus"
|
|
59
|
+
}
|
|
60
|
+
declare type EncodingParams = {
|
|
61
|
+
scaleDownRatio: number;
|
|
62
|
+
maxPayloadBitsPerSecond?: number;
|
|
63
|
+
};
|
|
64
|
+
declare enum RecommendedOpusBitrates {
|
|
65
|
+
NB = 12000,
|
|
66
|
+
WB = 20000,
|
|
67
|
+
FB = 40000,
|
|
68
|
+
FB_MONO_MUSIC = 64000,
|
|
69
|
+
FB_STEREO_MUSIC = 128000
|
|
70
|
+
}
|
|
71
|
+
declare function getRecommendedMaxBitrateForFrameSize(requestedMaxFs: number): number | undefined;
|
|
72
|
+
|
|
73
|
+
declare enum OveruseState {
|
|
74
|
+
NOT_OVERUSED = 0,
|
|
75
|
+
OVERUSED = 1
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
declare type OveruseUpdateCallback = (state: OveruseState) => void;
|
|
79
|
+
|
|
80
|
+
declare type StreamSignalingMode = 'MID-RID' | 'SSRC';
|
|
81
|
+
|
|
82
|
+
declare type BundlePolicy = 'max' | 'compat';
|
|
83
|
+
|
|
84
|
+
declare type MetricsCallback = (logData: LogData) => void;
|
|
85
|
+
|
|
86
|
+
declare enum MultistreamConnectionEventNames {
|
|
87
|
+
VideoSourceCountUpdate = "video-source-count-update",
|
|
88
|
+
AudioSourceCountUpdate = "audio-source-count-update",
|
|
89
|
+
ActiveSpeakerNotification = "active-speaker-notification",
|
|
90
|
+
ConnectionStateUpdate = "connection-state-update"
|
|
91
|
+
}
|
|
92
|
+
interface MultistreamConnectionEvents extends EventMap {
|
|
93
|
+
[MultistreamConnectionEventNames.ActiveSpeakerNotification]: (msg: ActiveSpeakerNotificationMsg) => void;
|
|
94
|
+
[MultistreamConnectionEventNames.VideoSourceCountUpdate]: (numTotalSources: number, numLiveSources: number) => void;
|
|
95
|
+
[MultistreamConnectionEventNames.AudioSourceCountUpdate]: (numTotalSources: number, numLiveSources: number) => void;
|
|
96
|
+
[MultistreamConnectionEventNames.ConnectionStateUpdate]: (state: ConnectionState) => void;
|
|
97
|
+
}
|
|
98
|
+
declare type MultistreamConnectionOptions = {
|
|
99
|
+
floorControlledPresentation: boolean;
|
|
100
|
+
disableSimulcast: boolean;
|
|
101
|
+
streamSignalingMode: StreamSignalingMode;
|
|
102
|
+
bundlePolicy: BundlePolicy;
|
|
103
|
+
};
|
|
104
|
+
declare class MultistreamConnection extends EventEmitter<MultistreamConnectionEvents> {
|
|
105
|
+
private pc;
|
|
106
|
+
private sendTransceivers;
|
|
107
|
+
private streamSignalerManager;
|
|
108
|
+
private recvTransceivers;
|
|
109
|
+
private dataChannel;
|
|
110
|
+
private jmpSessions;
|
|
111
|
+
private pendingJmpTasks;
|
|
112
|
+
private statsManager;
|
|
113
|
+
private metricsCallback;
|
|
114
|
+
private overuseStateManager;
|
|
115
|
+
private overuseUpdateCallback;
|
|
116
|
+
private options;
|
|
117
|
+
constructor(userOptions?: Partial<MultistreamConnectionOptions>);
|
|
118
|
+
getConnectionState(): ConnectionState;
|
|
119
|
+
private createSendTransceiver;
|
|
120
|
+
private sendSourceWarnings;
|
|
121
|
+
private updateRequestedStreams;
|
|
122
|
+
private createDataChannel;
|
|
123
|
+
close(): void;
|
|
124
|
+
sendSourceIndication(mediaType: MediaType, numLiveSources: number, sources?: Source[]): void;
|
|
125
|
+
publishTrack(track: LocalTrack): Promise<void> | undefined;
|
|
126
|
+
unpublishTrack(track: LocalTrack): Promise<void> | undefined;
|
|
127
|
+
private addTrackListeners;
|
|
128
|
+
createReceiveSlot(mediaType: MediaType): Promise<ReceiveSlot>;
|
|
129
|
+
getIngressPayloadType(mediaType: MediaType, mimeType: MediaCodecMimeType): number;
|
|
130
|
+
createOffer(): Promise<RTCSessionDescriptionInit>;
|
|
131
|
+
setAnswer(answer: string): Promise<void>;
|
|
132
|
+
enableMultistreamAudio(enabled: boolean): boolean;
|
|
133
|
+
private preProcessLocalOffer;
|
|
134
|
+
private prepareLocalOfferForRemoteServer;
|
|
135
|
+
private preProcessRemoteAnswer;
|
|
136
|
+
private getSendTransceiverOrThrow;
|
|
137
|
+
getPublishedTracks(): LocalTrack[];
|
|
138
|
+
requestMedia(mediaType: MediaType, mediaRequests: MediaRequest[]): void;
|
|
139
|
+
renewPeerConnection(): void;
|
|
140
|
+
private getReceiveSlotById;
|
|
141
|
+
getStats(): Promise<StatsReport>;
|
|
142
|
+
private preProcessStats;
|
|
143
|
+
private attachMetricsObserver;
|
|
144
|
+
setMetricsCallback(callback: MetricsCallback): void;
|
|
145
|
+
setOveruseUpdateCallback(callback: OveruseUpdateCallback): void;
|
|
146
|
+
getCsiByMediaType(mediaType: MediaType): number | undefined;
|
|
147
|
+
getAllCsis(): Record<string, number | undefined>;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
declare abstract class Transceiver {
|
|
151
|
+
protected _rtcRtpTransceiver: RTCRtpTransceiver;
|
|
152
|
+
constructor(rtcRtpTransceiver: RTCRtpTransceiver);
|
|
153
|
+
replaceTransceiver(newRtcRtpTransceiver: RTCRtpTransceiver): void;
|
|
154
|
+
protected get receiver(): RTCRtpReceiver;
|
|
155
|
+
protected get sender(): RTCRtpSender;
|
|
156
|
+
get mid(): string | null;
|
|
157
|
+
close(): void;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
declare class SendOnlyTransceiver extends Transceiver {
|
|
161
|
+
publishedTrack?: LocalTrack;
|
|
162
|
+
csi: number;
|
|
163
|
+
private requested;
|
|
164
|
+
constructor(rtcpRtpTransceiver: RTCRtpTransceiver, csi: number);
|
|
165
|
+
private handleTrackChange;
|
|
166
|
+
private replacePublishedTrack;
|
|
167
|
+
setTrackRequested(requested: boolean): Promise<void>;
|
|
168
|
+
updateSimulcastStreamStates(requestedIdEncodingParamsMap: Map<number, EncodingParams>): Promise<void>;
|
|
169
|
+
getScaleDownRatio(expectedMaxFs: number | undefined): number;
|
|
170
|
+
publishTrack(track: LocalTrack): Promise<void>;
|
|
171
|
+
unpublishTrack(): Promise<void>;
|
|
172
|
+
setActive(enabled: boolean): boolean;
|
|
173
|
+
getIngressPayloadType(mimeType: MediaCodecMimeType): number;
|
|
174
|
+
getStats(): Promise<RTCStatsReport>;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
declare const logger: js_logger.ILogger;
|
|
178
|
+
declare function setLogLevel(level: ILogLevel): void;
|
|
179
|
+
declare function getLogLevel(): ILogLevel;
|
|
180
|
+
|
|
181
|
+
export { MediaCodecMimeType, MediaRequest, MultistreamConnection, MultistreamConnectionEventNames, MultistreamConnectionEvents, ReceiveSlot, ReceiveSlotEvents, ReceiveSlotId, ReceiverEvents, RecommendedOpusBitrates, SendOnlyTransceiver, compareReceiveSlotIds, getLogLevel, getRecommendedMaxBitrateForFrameSize, logger, setLogLevel };
|
package/package.json
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webex/web-client-media-engine",
|
|
3
|
+
"version": "1.33.2",
|
|
4
|
+
"description": "Web Client Media Engine is common web code for interacting with the multistream media server.",
|
|
5
|
+
"source": "src/index.ts",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"types": "dist/types/index.d.ts",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "NODE_ENV=production run-s clean compile",
|
|
11
|
+
"clean": "yarn transpile:clean",
|
|
12
|
+
"compile": "rollup -c ./rollup.config.js",
|
|
13
|
+
"docs": "rimraf ./docs/* && typedoc",
|
|
14
|
+
"fix": "run-s fix:*",
|
|
15
|
+
"fix:prettier": "prettier \"src/**/*.ts\" --write",
|
|
16
|
+
"fix:lint": "eslint src --ext .ts --fix",
|
|
17
|
+
"prepare": "husky install",
|
|
18
|
+
"release": "semantic-release",
|
|
19
|
+
"test": "run-s build test:*",
|
|
20
|
+
"test:coverage": "jest --coverage",
|
|
21
|
+
"test:lint": "eslint src --ext .ts --max-warnings=0",
|
|
22
|
+
"test:prettier": "prettier \"src/**/*.ts\" --list-different",
|
|
23
|
+
"test:spelling": "cspell \"{README.md,.github/*.md,src/**/*.ts}\"",
|
|
24
|
+
"test:unit": "jest",
|
|
25
|
+
"transpile": "tsc",
|
|
26
|
+
"transpile:clean": "rimraf ./dist",
|
|
27
|
+
"transpile:validate": "tsc --noemit",
|
|
28
|
+
"transpile:watch": "tsc --watch",
|
|
29
|
+
"version": "echo $npm_package_version",
|
|
30
|
+
"watch": "rollup -c ./rollup.config.js -w"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": ""
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"registry": "https://registry.npmjs.org",
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist/**/*"
|
|
42
|
+
],
|
|
43
|
+
"keywords": [],
|
|
44
|
+
"author": "",
|
|
45
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
46
|
+
"lint-staged": {
|
|
47
|
+
"*.ts": [
|
|
48
|
+
"prettier --write",
|
|
49
|
+
"eslint --max-warnings=0",
|
|
50
|
+
"cspell"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=14.0.0",
|
|
55
|
+
"yarn": ">=1.19.1"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@webex-connect/json-multistream": "^1.19.0",
|
|
59
|
+
"@webex-connect/rtcstats": "^0.5.0",
|
|
60
|
+
"@webex/ts-sdp": "1.3.0",
|
|
61
|
+
"@webex/webrtc-core": "^1.1.0",
|
|
62
|
+
"bowser": "^2.11.0",
|
|
63
|
+
"js-logger": "^1.6.1",
|
|
64
|
+
"typed-emitter": "^2.1.0",
|
|
65
|
+
"uuid": "^8.3.2"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@commitlint/cli": "^16.0.2",
|
|
69
|
+
"@commitlint/config-conventional": "^16.0.0",
|
|
70
|
+
"@rollup/plugin-commonjs": "^21.0.1",
|
|
71
|
+
"@rollup/plugin-node-resolve": "^13.1.3",
|
|
72
|
+
"@semantic-release/changelog": "^6.0.1",
|
|
73
|
+
"@semantic-release/git": "^10.0.1",
|
|
74
|
+
"@semantic-release/release-notes-generator": "^10.0.3",
|
|
75
|
+
"@types/jest": "^27.4.0",
|
|
76
|
+
"@types/uuid": "^8.3.4",
|
|
77
|
+
"@typescript-eslint/eslint-plugin": "^5.9.0",
|
|
78
|
+
"@typescript-eslint/parser": "^5.9.0",
|
|
79
|
+
"cspell": "^5.15.1",
|
|
80
|
+
"eslint": "^8.6.0",
|
|
81
|
+
"eslint-config-airbnb-base": "^15.0.0",
|
|
82
|
+
"eslint-config-prettier": "^8.3.0",
|
|
83
|
+
"eslint-plugin-import": "^2.25.4",
|
|
84
|
+
"eslint-plugin-jest": "^25.3.4",
|
|
85
|
+
"eslint-plugin-jsdoc": "^37.6.1",
|
|
86
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
87
|
+
"husky": "^7.0.4",
|
|
88
|
+
"jest": "^27.4.7",
|
|
89
|
+
"jest-canvas-mock": "^2.4.0",
|
|
90
|
+
"jest-fetch-mock": "^3.0.3",
|
|
91
|
+
"lint-staged": "^12.1.7",
|
|
92
|
+
"npm-run-all": "^4.1.5",
|
|
93
|
+
"prettier": "^2.5.1",
|
|
94
|
+
"rimraf": "^3.0.2",
|
|
95
|
+
"rollup": "^2.63.0",
|
|
96
|
+
"rollup-plugin-delete": "^2.0.0",
|
|
97
|
+
"rollup-plugin-dts": "^4.1.0",
|
|
98
|
+
"rollup-plugin-execute": "^1.1.1",
|
|
99
|
+
"rollup-plugin-terser": "^7.0.2",
|
|
100
|
+
"rollup-plugin-typescript2": "^0.31.1",
|
|
101
|
+
"semantic-release": "^19.0.2",
|
|
102
|
+
"ts-jest": "^27.1.2",
|
|
103
|
+
"typedoc": "^0.22.10",
|
|
104
|
+
"typescript": "^4.5.4",
|
|
105
|
+
"yarn": "^1.22.19"
|
|
106
|
+
}
|
|
107
|
+
}
|