@voltkit-rtc/react-native 0.0.0-stage → 0.1.1
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/CHANGELOG.md +121 -0
- package/LICENSE +21 -0
- package/README.md +1608 -2
- package/android/build.gradle +70 -0
- package/android/consumer-rules.pro +21 -0
- package/android/src/main/AndroidManifest.xml +25 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/AppVisibility.kt +67 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/AudioDevices.kt +67 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/AudioRouter.kt +487 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/CallServiceTypes.kt +120 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/NativeTimers.kt +106 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/NetworkWatch.kt +120 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/OutputChoice.kt +65 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/RtcConfig.kt +83 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/ScoLink.kt +61 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitCallService.kt +287 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitRtcInitProvider.kt +215 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitRtcModule.kt +313 -0
- package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitRtcPackage.kt +30 -0
- package/android/src/main/res/drawable/voltkit_rtc_default_call_icon.xml +15 -0
- package/android/src/main/res/raw/voltkit_rtc_keep.xml +7 -0
- package/app.plugin.js +17 -0
- package/lib/commonjs/audio.js +215 -0
- package/lib/commonjs/audio.js.map +1 -0
- package/lib/commonjs/components.js +207 -0
- package/lib/commonjs/components.js.map +1 -0
- package/lib/commonjs/create-client.js +47 -0
- package/lib/commonjs/create-client.js.map +1 -0
- package/lib/commonjs/errors.js +99 -0
- package/lib/commonjs/errors.js.map +1 -0
- package/lib/commonjs/globals.js +61 -0
- package/lib/commonjs/globals.js.map +1 -0
- package/lib/commonjs/index.js +234 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/local-media.js +392 -0
- package/lib/commonjs/local-media.js.map +1 -0
- package/lib/commonjs/native-session.js +365 -0
- package/lib/commonjs/native-session.js.map +1 -0
- package/lib/commonjs/native.js +99 -0
- package/lib/commonjs/native.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/permissions.js +166 -0
- package/lib/commonjs/permissions.js.map +1 -0
- package/lib/commonjs/platform/android.js +126 -0
- package/lib/commonjs/platform/android.js.map +1 -0
- package/lib/commonjs/platform/common.js +138 -0
- package/lib/commonjs/platform/common.js.map +1 -0
- package/lib/commonjs/platform/devices.js +151 -0
- package/lib/commonjs/platform/devices.js.map +1 -0
- package/lib/commonjs/platform/index.js +35 -0
- package/lib/commonjs/platform/index.js.map +1 -0
- package/lib/commonjs/platform/ios.js +54 -0
- package/lib/commonjs/platform/ios.js.map +1 -0
- package/lib/commonjs/platform/streams.js +273 -0
- package/lib/commonjs/platform/streams.js.map +1 -0
- package/lib/commonjs/platform/timers.js +71 -0
- package/lib/commonjs/platform/timers.js.map +1 -0
- package/lib/commonjs/platform/visibility.js +60 -0
- package/lib/commonjs/platform/visibility.js.map +1 -0
- package/lib/commonjs/preflight.js +77 -0
- package/lib/commonjs/preflight.js.map +1 -0
- package/lib/commonjs/provider.js +75 -0
- package/lib/commonjs/provider.js.map +1 -0
- package/lib/commonjs/specs/NativeVoltkitRtc.js +29 -0
- package/lib/commonjs/specs/NativeVoltkitRtc.js.map +1 -0
- package/lib/module/audio.js +207 -0
- package/lib/module/audio.js.map +1 -0
- package/lib/module/components.js +200 -0
- package/lib/module/components.js.map +1 -0
- package/lib/module/create-client.js +42 -0
- package/lib/module/create-client.js.map +1 -0
- package/lib/module/errors.js +87 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/globals.js +53 -0
- package/lib/module/globals.js.map +1 -0
- package/lib/module/index.js +33 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/local-media.js +387 -0
- package/lib/module/local-media.js.map +1 -0
- package/lib/module/native-session.js +360 -0
- package/lib/module/native-session.js.map +1 -0
- package/lib/module/native.js +87 -0
- package/lib/module/native.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/permissions.js +160 -0
- package/lib/module/permissions.js.map +1 -0
- package/lib/module/platform/android.js +122 -0
- package/lib/module/platform/android.js.map +1 -0
- package/lib/module/platform/common.js +128 -0
- package/lib/module/platform/common.js.map +1 -0
- package/lib/module/platform/devices.js +142 -0
- package/lib/module/platform/devices.js.map +1 -0
- package/lib/module/platform/index.js +24 -0
- package/lib/module/platform/index.js.map +1 -0
- package/lib/module/platform/ios.js +49 -0
- package/lib/module/platform/ios.js.map +1 -0
- package/lib/module/platform/streams.js +268 -0
- package/lib/module/platform/streams.js.map +1 -0
- package/lib/module/platform/timers.js +67 -0
- package/lib/module/platform/timers.js.map +1 -0
- package/lib/module/platform/visibility.js +54 -0
- package/lib/module/platform/visibility.js.map +1 -0
- package/lib/module/preflight.js +72 -0
- package/lib/module/preflight.js.map +1 -0
- package/lib/module/provider.js +70 -0
- package/lib/module/provider.js.map +1 -0
- package/lib/module/specs/NativeVoltkitRtc.js +37 -0
- package/lib/module/specs/NativeVoltkitRtc.js.map +1 -0
- package/lib/typescript/commonjs/audio.d.ts +58 -0
- package/lib/typescript/commonjs/audio.d.ts.map +1 -0
- package/lib/typescript/commonjs/components.d.ts +58 -0
- package/lib/typescript/commonjs/components.d.ts.map +1 -0
- package/lib/typescript/commonjs/create-client.d.ts +35 -0
- package/lib/typescript/commonjs/create-client.d.ts.map +1 -0
- package/lib/typescript/commonjs/errors.d.ts +34 -0
- package/lib/typescript/commonjs/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/globals.d.ts +16 -0
- package/lib/typescript/commonjs/globals.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +24 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/local-media.d.ts +86 -0
- package/lib/typescript/commonjs/local-media.d.ts.map +1 -0
- package/lib/typescript/commonjs/native-session.d.ts +38 -0
- package/lib/typescript/commonjs/native-session.d.ts.map +1 -0
- package/lib/typescript/commonjs/native.d.ts +18 -0
- package/lib/typescript/commonjs/native.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/permissions.d.ts +30 -0
- package/lib/typescript/commonjs/permissions.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/android.d.ts +4 -0
- package/lib/typescript/commonjs/platform/android.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/common.d.ts +101 -0
- package/lib/typescript/commonjs/platform/common.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/devices.d.ts +42 -0
- package/lib/typescript/commonjs/platform/devices.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/index.d.ts +6 -0
- package/lib/typescript/commonjs/platform/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/ios.d.ts +4 -0
- package/lib/typescript/commonjs/platform/ios.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/streams.d.ts +82 -0
- package/lib/typescript/commonjs/platform/streams.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/timers.d.ts +19 -0
- package/lib/typescript/commonjs/platform/timers.d.ts.map +1 -0
- package/lib/typescript/commonjs/platform/visibility.d.ts +11 -0
- package/lib/typescript/commonjs/platform/visibility.d.ts.map +1 -0
- package/lib/typescript/commonjs/preflight.d.ts +19 -0
- package/lib/typescript/commonjs/preflight.d.ts.map +1 -0
- package/lib/typescript/commonjs/provider.d.ts +35 -0
- package/lib/typescript/commonjs/provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/specs/NativeVoltkitRtc.d.ts +157 -0
- package/lib/typescript/commonjs/specs/NativeVoltkitRtc.d.ts.map +1 -0
- package/lib/typescript/module/audio.d.ts +58 -0
- package/lib/typescript/module/audio.d.ts.map +1 -0
- package/lib/typescript/module/components.d.ts +58 -0
- package/lib/typescript/module/components.d.ts.map +1 -0
- package/lib/typescript/module/create-client.d.ts +35 -0
- package/lib/typescript/module/create-client.d.ts.map +1 -0
- package/lib/typescript/module/errors.d.ts +34 -0
- package/lib/typescript/module/errors.d.ts.map +1 -0
- package/lib/typescript/module/globals.d.ts +16 -0
- package/lib/typescript/module/globals.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +24 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/local-media.d.ts +86 -0
- package/lib/typescript/module/local-media.d.ts.map +1 -0
- package/lib/typescript/module/native-session.d.ts +38 -0
- package/lib/typescript/module/native-session.d.ts.map +1 -0
- package/lib/typescript/module/native.d.ts +18 -0
- package/lib/typescript/module/native.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/permissions.d.ts +30 -0
- package/lib/typescript/module/permissions.d.ts.map +1 -0
- package/lib/typescript/module/platform/android.d.ts +4 -0
- package/lib/typescript/module/platform/android.d.ts.map +1 -0
- package/lib/typescript/module/platform/common.d.ts +101 -0
- package/lib/typescript/module/platform/common.d.ts.map +1 -0
- package/lib/typescript/module/platform/devices.d.ts +42 -0
- package/lib/typescript/module/platform/devices.d.ts.map +1 -0
- package/lib/typescript/module/platform/index.d.ts +6 -0
- package/lib/typescript/module/platform/index.d.ts.map +1 -0
- package/lib/typescript/module/platform/ios.d.ts +4 -0
- package/lib/typescript/module/platform/ios.d.ts.map +1 -0
- package/lib/typescript/module/platform/streams.d.ts +82 -0
- package/lib/typescript/module/platform/streams.d.ts.map +1 -0
- package/lib/typescript/module/platform/timers.d.ts +19 -0
- package/lib/typescript/module/platform/timers.d.ts.map +1 -0
- package/lib/typescript/module/platform/visibility.d.ts +11 -0
- package/lib/typescript/module/platform/visibility.d.ts.map +1 -0
- package/lib/typescript/module/preflight.d.ts +19 -0
- package/lib/typescript/module/preflight.d.ts.map +1 -0
- package/lib/typescript/module/provider.d.ts +35 -0
- package/lib/typescript/module/provider.d.ts.map +1 -0
- package/lib/typescript/module/specs/NativeVoltkitRtc.d.ts +157 -0
- package/lib/typescript/module/specs/NativeVoltkitRtc.d.ts.map +1 -0
- package/package.json +140 -4
- package/plugin/build/android.d.ts +36 -0
- package/plugin/build/android.js +265 -0
- package/plugin/build/index.d.ts +9 -0
- package/plugin/build/index.js +54 -0
- package/plugin/build/ios.d.ts +4 -0
- package/plugin/build/ios.js +43 -0
- package/plugin/build/options.d.ts +93 -0
- package/plugin/build/options.js +140 -0
- package/react-native.config.js +11 -0
- package/src/audio.ts +221 -0
- package/src/components.tsx +233 -0
- package/src/create-client.ts +53 -0
- package/src/errors.ts +81 -0
- package/src/globals.ts +54 -0
- package/src/index.ts +95 -0
- package/src/local-media.ts +420 -0
- package/src/native-session.tsx +384 -0
- package/src/native.ts +84 -0
- package/src/permissions.ts +173 -0
- package/src/platform/android.ts +128 -0
- package/src/platform/common.ts +157 -0
- package/src/platform/devices.ts +148 -0
- package/src/platform/index.ts +22 -0
- package/src/platform/ios.ts +48 -0
- package/src/platform/streams.ts +285 -0
- package/src/platform/timers.ts +72 -0
- package/src/platform/visibility.ts +59 -0
- package/src/preflight.ts +60 -0
- package/src/provider.tsx +88 -0
- package/src/specs/NativeVoltkitRtc.ts +180 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_globals","require","_createClient","_preflight","_index","_provider","_nativeSession","_localMedia","_components","_audio","_permissions","_native","_react","registerVoltkitGlobals"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAAA,QAAA,GAAAC,OAAA;AAKA,IAAAC,aAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,SAAA,GAAAJ,OAAA;AAEA,IAAAK,cAAA,GAAAL,OAAA;AAEA,IAAAM,WAAA,GAAAN,OAAA;AAEA,IAAAO,WAAA,GAAAP,OAAA;AAEA,IAAAQ,MAAA,GAAAR,OAAA;AAEA,IAAAS,YAAA,GAAAT,OAAA;AAEA,IAAAU,OAAA,GAAAV,OAAA;AAGA,IAAAW,MAAA,GAAAX,OAAA;AAtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,IAAAY,+BAAsB,EAAC,CAAC;;AAuBxB;;AAqBA","ignoreList":[]}
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.localSessionOf = localSessionOf;
|
|
7
|
+
exports.useLocalMedia = useLocalMedia;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _client = require("@voltkit-rtc/client");
|
|
10
|
+
var _react2 = require("@voltkit-rtc/react");
|
|
11
|
+
var _errors = require("./errors.js");
|
|
12
|
+
var _permissions = require("./permissions.js");
|
|
13
|
+
var _globals = require("./globals.js");
|
|
14
|
+
var _index = require("./platform/index.js");
|
|
15
|
+
var _streams = require("./platform/streams.js");
|
|
16
|
+
var _devices = require("./platform/devices.js");
|
|
17
|
+
var _common = require("./platform/common.js");
|
|
18
|
+
/**
|
|
19
|
+
* Your camera, microphone and screen on React Native: @voltkit-rtc/react's useLocalMedia, plus switchCamera() and
|
|
20
|
+
* facingMode. publish() asks for the permissions it needs before any device opens -- a refusal rejects with
|
|
21
|
+
* `media-unavailable` `{ permission, status }`, the camera light never comes on and getUserMedia is never called --
|
|
22
|
+
* then opens the devices through react-native-webrtc at the size and frame rate it will send.
|
|
23
|
+
*
|
|
24
|
+
* What is captured here is released in the right order when the client stops it (platform/streams.ts): the app never
|
|
25
|
+
* releases a stream or track it got from publish().
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** A camera's or microphone's constraints, as the client declares them (this package compiles without the DOM library). */
|
|
29
|
+
|
|
30
|
+
// --------------------------------------------------------------------------------------- what only events tell
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Per client: the screen being shared (only events tell it) and a signal for what changes without an event (publish,
|
|
34
|
+
* a camera switch). Recorded while held: the provider holds its client's for as long as it has the client.
|
|
35
|
+
*/
|
|
36
|
+
class LocalSession {
|
|
37
|
+
screen = null;
|
|
38
|
+
listeners = new Set();
|
|
39
|
+
holders = 0;
|
|
40
|
+
stopListening = null;
|
|
41
|
+
constructor(client) {
|
|
42
|
+
this.client = client;
|
|
43
|
+
}
|
|
44
|
+
hold() {
|
|
45
|
+
if (this.holders++ === 0) this.stopListening = this.listen();
|
|
46
|
+
let held = true;
|
|
47
|
+
return () => {
|
|
48
|
+
if (!held) return;
|
|
49
|
+
held = false;
|
|
50
|
+
if (--this.holders === 0) {
|
|
51
|
+
this.stopListening?.();
|
|
52
|
+
this.stopListening = null;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
subscribe(listener) {
|
|
57
|
+
this.listeners.add(listener);
|
|
58
|
+
return () => {
|
|
59
|
+
this.listeners.delete(listener);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
changed() {
|
|
63
|
+
for (const listener of [...this.listeners]) listener();
|
|
64
|
+
}
|
|
65
|
+
listen() {
|
|
66
|
+
const client = this.client;
|
|
67
|
+
const offs = [client.on('screenShareStarted', ({
|
|
68
|
+
stream
|
|
69
|
+
}) => {
|
|
70
|
+
// The client's stream type is the web's; on React Native it is react-native-webrtc's stream.
|
|
71
|
+
this.screen = stream;
|
|
72
|
+
this.changed();
|
|
73
|
+
}), client.on('screenShareEnded', () => this.endScreen()), client.on('connectionStateChanged', ({
|
|
74
|
+
state
|
|
75
|
+
}) => {
|
|
76
|
+
if (state === 'closed') this.endScreen();
|
|
77
|
+
})];
|
|
78
|
+
return () => {
|
|
79
|
+
for (const off of offs) off();
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
endScreen() {
|
|
83
|
+
if (!this.screen) return;
|
|
84
|
+
this.screen = null;
|
|
85
|
+
this.changed();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const sessions = new WeakMap();
|
|
89
|
+
function localSessionOf(client) {
|
|
90
|
+
let session = sessions.get(client);
|
|
91
|
+
if (!session) {
|
|
92
|
+
session = new LocalSession(client);
|
|
93
|
+
sessions.set(client, session);
|
|
94
|
+
}
|
|
95
|
+
return session;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ------------------------------------------------------------------------------------------------- the state
|
|
99
|
+
|
|
100
|
+
const EVENTS = ['localMediaChanged', 'localStreamChanged', 'screenShareStarted', 'screenShareEnded', 'joined', 'connectionStateChanged', 'error'];
|
|
101
|
+
const FALLBACK = Object.freeze({
|
|
102
|
+
stream: null,
|
|
103
|
+
publishing: false,
|
|
104
|
+
micEnabled: false,
|
|
105
|
+
camEnabled: false,
|
|
106
|
+
audioQuality: 'std',
|
|
107
|
+
videoQuality: _client.DEFAULT_MEDIA_PERMISSIONS.maxVideoQuality,
|
|
108
|
+
videoFrameRate: 30,
|
|
109
|
+
screenSharing: false,
|
|
110
|
+
screenStream: null,
|
|
111
|
+
permissions: _client.DEFAULT_MEDIA_PERMISSIONS,
|
|
112
|
+
facingMode: null
|
|
113
|
+
});
|
|
114
|
+
function facingOf(client) {
|
|
115
|
+
const settings = (0, _common.localStream)(client)?.getVideoTracks()[0]?.getSettings();
|
|
116
|
+
const facing = settings?.facingMode;
|
|
117
|
+
return facing === 'user' || facing === 'environment' ? facing : null;
|
|
118
|
+
}
|
|
119
|
+
function read(client, session) {
|
|
120
|
+
return {
|
|
121
|
+
stream: (0, _common.localStream)(client),
|
|
122
|
+
publishing: client.publishing,
|
|
123
|
+
micEnabled: client.micEnabled,
|
|
124
|
+
camEnabled: client.camEnabled,
|
|
125
|
+
audioQuality: client.audioQuality,
|
|
126
|
+
videoQuality: client.videoQuality,
|
|
127
|
+
videoFrameRate: client.videoFrameRate,
|
|
128
|
+
screenSharing: session.screen !== null,
|
|
129
|
+
screenStream: session.screen,
|
|
130
|
+
permissions: client.mediaPermissions,
|
|
131
|
+
facingMode: facingOf(client)
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function sameFields(a, b) {
|
|
135
|
+
const keys = Object.keys(a);
|
|
136
|
+
return keys.length === Object.keys(b).length && keys.every(key => Object.is(a[key], b[key]));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** The local state of `client`, read again after the events that change it and the calls that emit none. */
|
|
140
|
+
function localSource(client) {
|
|
141
|
+
const session = localSessionOf(client);
|
|
142
|
+
let version = 0;
|
|
143
|
+
let cache = null;
|
|
144
|
+
return {
|
|
145
|
+
subscribe(onChange) {
|
|
146
|
+
const changed = () => {
|
|
147
|
+
version += 1;
|
|
148
|
+
onChange();
|
|
149
|
+
};
|
|
150
|
+
const offs = EVENTS.map(event => client.on(event, changed));
|
|
151
|
+
offs.push(session.hold(), session.subscribe(changed));
|
|
152
|
+
version += 1;
|
|
153
|
+
return () => {
|
|
154
|
+
for (const off of offs) off();
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
getSnapshot() {
|
|
158
|
+
if (cache?.version === version) return cache.value;
|
|
159
|
+
const next = read(client, session);
|
|
160
|
+
if (cache) {
|
|
161
|
+
// `mediaPermissions` is a new object on every read.
|
|
162
|
+
const permissions = sameFields(cache.value.permissions, next.permissions) ? cache.value.permissions : next.permissions;
|
|
163
|
+
const settled = {
|
|
164
|
+
...next,
|
|
165
|
+
permissions
|
|
166
|
+
};
|
|
167
|
+
const value = sameFields(cache.value, settled) ? cache.value : settled;
|
|
168
|
+
cache = {
|
|
169
|
+
version,
|
|
170
|
+
value
|
|
171
|
+
};
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
cache = {
|
|
175
|
+
version,
|
|
176
|
+
value: next
|
|
177
|
+
};
|
|
178
|
+
return next;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const noSubscription = () => () => undefined;
|
|
183
|
+
const fallback = () => FALLBACK;
|
|
184
|
+
|
|
185
|
+
/** Your camera, microphone and screen: what is published, and the calls that change it. */
|
|
186
|
+
function useLocalMedia() {
|
|
187
|
+
const client = (0, _react2.useVoltkitClient)();
|
|
188
|
+
const source = (0, _react.useMemo)(() => client ? localSource(client) : null, [client]);
|
|
189
|
+
const state = (0, _react.useSyncExternalStore)(source ? source.subscribe : noSubscription, source ? source.getSnapshot : fallback, fallback);
|
|
190
|
+
const actions = (0, _react.useMemo)(() => localActions(client), [client]);
|
|
191
|
+
return (0, _react.useMemo)(() => ({
|
|
192
|
+
...state,
|
|
193
|
+
...actions
|
|
194
|
+
}), [state, actions]);
|
|
195
|
+
}
|
|
196
|
+
function localActions(client) {
|
|
197
|
+
async function call(task) {
|
|
198
|
+
if (!client) throw new _client.RpcError('not-connected', 'no client yet: call this inside a VoltkitProvider that has one');
|
|
199
|
+
try {
|
|
200
|
+
return await task(client);
|
|
201
|
+
} finally {
|
|
202
|
+
// publish(), a camera switch and the quality changes emit no event: read again.
|
|
203
|
+
localSessionOf(client).changed();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
publish: (options = {}) => call(c => publishDevices(c, options)),
|
|
208
|
+
unpublish: () => call(c => c.unpublish()),
|
|
209
|
+
setMicEnabled: on => call(c => c.setMicEnabled(on)),
|
|
210
|
+
setCamEnabled: on => call(c => c.setCamEnabled(on)),
|
|
211
|
+
setAudioQuality: quality => call(c => c.setAudioQuality(quality)),
|
|
212
|
+
setVideoQuality: quality => call(async c => {
|
|
213
|
+
await raiseCapture(c, quality);
|
|
214
|
+
return c.setVideoQuality(quality);
|
|
215
|
+
}),
|
|
216
|
+
setVideoFrameRate: frameRate => call(c => c.setVideoFrameRate(frameRate)),
|
|
217
|
+
switchCamera: () => call(c => switchCamera(c)),
|
|
218
|
+
startScreenShare: options => call(async c => await c.publishScreen(options)),
|
|
219
|
+
stopScreenShare: () => call(c => c.unpublishScreen())
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ----------------------------------------------------------------------------------------------------- publish
|
|
224
|
+
|
|
225
|
+
/** Clients with a publish() between asking for permissions and publishing. */
|
|
226
|
+
const publishing = new WeakSet();
|
|
227
|
+
async function publishDevices(client, options) {
|
|
228
|
+
// facingMode is a capture choice, not a publish option.
|
|
229
|
+
const {
|
|
230
|
+
audio = true,
|
|
231
|
+
video = true,
|
|
232
|
+
facingMode: _facingMode,
|
|
233
|
+
...publishOptions
|
|
234
|
+
} = options;
|
|
235
|
+
if (audio === false && video === false) throw new TypeError('publish: ask for audio, video or both');
|
|
236
|
+
// Everything that would refuse the publish is checked before a permission is asked for or a device opens.
|
|
237
|
+
if (client.connectionState !== 'connected') throw new _client.RpcError('not-connected', 'connect before publishing');
|
|
238
|
+
const role = client.info?.role;
|
|
239
|
+
if (role !== 'host' && role !== 'cohost') throw new _client.RpcError('forbidden', 'only hosts and cohosts can publish');
|
|
240
|
+
if (publishing.has(client) || (0, _common.localStream)(client)?.getTracks().some(track => track.readyState === 'live')) {
|
|
241
|
+
throw new _client.RpcError('source-already-published', 'already publishing: unpublish() first');
|
|
242
|
+
}
|
|
243
|
+
const permissions = client.mediaPermissions;
|
|
244
|
+
if (audio !== false && !permissions.audio) throw new _client.RpcError('media-disabled', 'audio is switched off for this project');
|
|
245
|
+
if (video !== false && !permissions.video) throw new _client.RpcError('media-disabled', 'video is switched off for this project');
|
|
246
|
+
if (!(0, _globals.registerVoltkitGlobals)()) throw (0, _errors.webrtcMissing)();
|
|
247
|
+
publishing.add(client);
|
|
248
|
+
try {
|
|
249
|
+
const kinds = [];
|
|
250
|
+
if (video !== false) kinds.push('camera');
|
|
251
|
+
if (audio !== false) kinds.push('microphone');
|
|
252
|
+
const statuses = await (0, _permissions.requestMediaPermissions)(kinds);
|
|
253
|
+
for (const kind of kinds) {
|
|
254
|
+
const status = statuses[kind];
|
|
255
|
+
if (status !== 'granted') throw (0, _errors.permissionRefused)(kind, status);
|
|
256
|
+
}
|
|
257
|
+
// The dialog stays up as long as the user thinks: the call may be over by now (the screen unmounted, a kick, the
|
|
258
|
+
// room closed). Nothing opens a device for a session that is gone.
|
|
259
|
+
if (client.connectionState !== 'connected') throw new _client.RpcError('not-connected', 'the session ended while the permissions were being asked for');
|
|
260
|
+
const constraints = captureConstraints(options, permissions);
|
|
261
|
+
const platform = (0, _index.reactNativePlatform)();
|
|
262
|
+
const stream = await platform.getUserMedia(constraints);
|
|
263
|
+
try {
|
|
264
|
+
// With the constraints, a reconnect that finds the devices gone opens them again.
|
|
265
|
+
await client.publish(stream, constraints, publishOptions);
|
|
266
|
+
} catch (error) {
|
|
267
|
+
// Released here, the stream before its tracks (platform/streams.ts): the client kept none of it.
|
|
268
|
+
const book = (0, _streams.streamBook)();
|
|
269
|
+
const tracks = stream.getTracks();
|
|
270
|
+
book.release(stream);
|
|
271
|
+
for (const track of tracks) book.stop(track);
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
} finally {
|
|
275
|
+
publishing.delete(client);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** Each quality's 16:9 frame, as the SDK sends it. */
|
|
280
|
+
const FRAMES = {
|
|
281
|
+
'1080p': {
|
|
282
|
+
width: 1920,
|
|
283
|
+
height: 1080
|
|
284
|
+
},
|
|
285
|
+
'720p': {
|
|
286
|
+
width: 1280,
|
|
287
|
+
height: 720
|
|
288
|
+
},
|
|
289
|
+
'480p': {
|
|
290
|
+
width: 854,
|
|
291
|
+
height: 480
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
/** What publish() captures: never more than the project allows, which the SDK would only scale down. */
|
|
296
|
+
function captureConstraints(options, permissions) {
|
|
297
|
+
const {
|
|
298
|
+
audio = true,
|
|
299
|
+
video = true
|
|
300
|
+
} = options;
|
|
301
|
+
return {
|
|
302
|
+
audio: audio === true ? microphone(options.audioQuality === 'hd' && permissions.audioQualityMax === 'hd') : audio,
|
|
303
|
+
video: video === true ? camera(options, permissions) : video
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
function microphone(hd) {
|
|
307
|
+
const constraints = {
|
|
308
|
+
echoCancellation: true,
|
|
309
|
+
noiseSuppression: true,
|
|
310
|
+
autoGainControl: true
|
|
311
|
+
};
|
|
312
|
+
// HD is stereo, which needs a capture with two channels to send.
|
|
313
|
+
if (hd) constraints.channelCount = {
|
|
314
|
+
ideal: 2
|
|
315
|
+
};
|
|
316
|
+
return constraints;
|
|
317
|
+
}
|
|
318
|
+
function camera(options, permissions) {
|
|
319
|
+
const fps = options.frameRate === 60 && permissions.maxFrameRate === 60 ? 60 : 30;
|
|
320
|
+
const {
|
|
321
|
+
width,
|
|
322
|
+
height
|
|
323
|
+
} = FRAMES[(0, _client.allowedQuality)(options.quality, {
|
|
324
|
+
maxQuality: permissions.maxVideoQuality
|
|
325
|
+
})];
|
|
326
|
+
return {
|
|
327
|
+
width: {
|
|
328
|
+
ideal: width
|
|
329
|
+
},
|
|
330
|
+
height: {
|
|
331
|
+
ideal: height
|
|
332
|
+
},
|
|
333
|
+
frameRate: {
|
|
334
|
+
ideal: fps,
|
|
335
|
+
max: fps
|
|
336
|
+
},
|
|
337
|
+
facingMode: options.facingMode ?? 'user'
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/** The SDK sends no bigger than the camera's picture: a switch to a higher quality raises the capture first. Best effort. */
|
|
342
|
+
async function raiseCapture(client, quality) {
|
|
343
|
+
const track = (0, _common.localStream)(client)?.getVideoTracks()[0];
|
|
344
|
+
if (!track || track.readyState !== 'live') return;
|
|
345
|
+
const frame = FRAMES[(0, _client.allowedQuality)(quality, {
|
|
346
|
+
maxQuality: client.mediaPermissions.maxVideoQuality
|
|
347
|
+
})];
|
|
348
|
+
const {
|
|
349
|
+
width = 0,
|
|
350
|
+
height = 0
|
|
351
|
+
} = track.getSettings();
|
|
352
|
+
if (Math.max(width, height) >= frame.width && Math.min(width, height) >= frame.height) return;
|
|
353
|
+
try {
|
|
354
|
+
await track.applyConstraints({
|
|
355
|
+
...track.getConstraints(),
|
|
356
|
+
width: {
|
|
357
|
+
ideal: frame.width
|
|
358
|
+
},
|
|
359
|
+
height: {
|
|
360
|
+
ideal: frame.height
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
} catch {
|
|
364
|
+
// The camera keeps its size; the SDK sends what it has.
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// ------------------------------------------------------------------------------------------------ switchCamera
|
|
369
|
+
|
|
370
|
+
/** Camera switches in turn per client: each one reads where the last one left the camera. */
|
|
371
|
+
const switching = new WeakMap();
|
|
372
|
+
function switchCamera(client) {
|
|
373
|
+
const previous = switching.get(client) ?? Promise.resolve();
|
|
374
|
+
const next = previous.catch(() => undefined).then(() => flipCamera(client));
|
|
375
|
+
switching.set(client, next);
|
|
376
|
+
return next;
|
|
377
|
+
}
|
|
378
|
+
async function flipCamera(client) {
|
|
379
|
+
const track = (0, _common.localStream)(client)?.getVideoTracks()[0];
|
|
380
|
+
if (!track || track.readyState !== 'live') {
|
|
381
|
+
throw new _client.RpcError('media-unavailable', 'switchCamera: no camera is being published');
|
|
382
|
+
}
|
|
383
|
+
const settings = track.getSettings();
|
|
384
|
+
const cameras = await (0, _devices.listCameras)();
|
|
385
|
+
const current = cameras.find(c => c.deviceId === settings.deviceId);
|
|
386
|
+
const front = current ? current.facing === 'front' : settings.facingMode !== 'environment';
|
|
387
|
+
const target = cameras.find(c => c.deviceId !== settings.deviceId && c.facing === 'front' !== front);
|
|
388
|
+
if (!target) return front;
|
|
389
|
+
await client.switchDevice('videoinput', target.deviceId);
|
|
390
|
+
return target.facing === 'front';
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=local-media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_client","_react2","_errors","_permissions","_globals","_index","_streams","_devices","_common","LocalSession","screen","listeners","Set","holders","stopListening","constructor","client","hold","listen","held","subscribe","listener","add","delete","changed","offs","on","stream","endScreen","state","off","sessions","WeakMap","localSessionOf","session","get","set","EVENTS","FALLBACK","Object","freeze","publishing","micEnabled","camEnabled","audioQuality","videoQuality","DEFAULT_MEDIA_PERMISSIONS","maxVideoQuality","videoFrameRate","screenSharing","screenStream","permissions","facingMode","facingOf","settings","localStream","getVideoTracks","getSettings","facing","read","mediaPermissions","sameFields","a","b","keys","length","every","key","is","localSource","version","cache","onChange","map","event","push","getSnapshot","value","next","settled","noSubscription","undefined","fallback","useLocalMedia","useVoltkitClient","source","useMemo","useSyncExternalStore","actions","localActions","call","task","RpcError","publish","options","c","publishDevices","unpublish","setMicEnabled","setCamEnabled","setAudioQuality","quality","setVideoQuality","raiseCapture","setVideoFrameRate","frameRate","switchCamera","startScreenShare","publishScreen","stopScreenShare","unpublishScreen","WeakSet","audio","video","_facingMode","publishOptions","TypeError","connectionState","role","info","has","getTracks","some","track","readyState","registerVoltkitGlobals","webrtcMissing","kinds","statuses","requestMediaPermissions","kind","status","permissionRefused","constraints","captureConstraints","platform","reactNativePlatform","getUserMedia","error","book","streamBook","tracks","release","stop","FRAMES","width","height","microphone","audioQualityMax","camera","hd","echoCancellation","noiseSuppression","autoGainControl","channelCount","ideal","fps","maxFrameRate","allowedQuality","maxQuality","max","frame","Math","min","applyConstraints","getConstraints","switching","previous","Promise","resolve","catch","then","flipCamera","cameras","listCameras","current","find","deviceId","front","target","switchDevice"],"sourceRoot":"../../src","sources":["local-media.ts"],"mappings":"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","ignoreList":[]}
|