@fishjam-cloud/react-native-client 0.1.0
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/.eslintignore +7 -0
- package/.eslintrc +6 -0
- package/.prettierrc +9 -0
- package/.watchmanconfig +1 -0
- package/android/.editorconfig +9 -0
- package/android/build.gradle +89 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/org/membraneframework/reactnative/AudioDeviceKind.kt +34 -0
- package/android/src/main/java/org/membraneframework/reactnative/AudioSwitchManager.kt +61 -0
- package/android/src/main/java/org/membraneframework/reactnative/EmitableEvents.kt +14 -0
- package/android/src/main/java/org/membraneframework/reactnative/Errors.kt +31 -0
- package/android/src/main/java/org/membraneframework/reactnative/RNFishjamClient.kt +866 -0
- package/android/src/main/java/org/membraneframework/reactnative/RNFishjamClientModule.kt +294 -0
- package/android/src/main/java/org/membraneframework/reactnative/Utils.kt +11 -0
- package/android/src/main/java/org/membraneframework/reactnative/VideoPreviewView.kt +40 -0
- package/android/src/main/java/org/membraneframework/reactnative/VideoPreviewViewModule.kt +17 -0
- package/android/src/main/java/org/membraneframework/reactnative/VideoRendererView.kt +58 -0
- package/android/src/main/java/org/membraneframework/reactnative/VideoRendererViewModule.kt +25 -0
- package/android/src/main/java/org/membraneframework/reactnative/VideoView.kt +77 -0
- package/app.plugin.js +1 -0
- package/babel.config.js +2 -0
- package/build/RNFishjamClientModule.d.ts +47 -0
- package/build/RNFishjamClientModule.d.ts.map +1 -0
- package/build/RNFishjamClientModule.js +4 -0
- package/build/RNFishjamClientModule.js.map +1 -0
- package/build/common/client.d.ts +19 -0
- package/build/common/client.d.ts.map +1 -0
- package/build/common/client.js +8 -0
- package/build/common/client.js.map +1 -0
- package/build/common/eventEmitter.d.ts +16 -0
- package/build/common/eventEmitter.d.ts.map +1 -0
- package/build/common/eventEmitter.js +17 -0
- package/build/common/eventEmitter.js.map +1 -0
- package/build/common/metadata.d.ts +7 -0
- package/build/common/metadata.d.ts.map +1 -0
- package/build/common/metadata.js +9 -0
- package/build/common/metadata.js.map +1 -0
- package/build/common/webRTC.d.ts +19 -0
- package/build/common/webRTC.d.ts.map +1 -0
- package/build/common/webRTC.js +22 -0
- package/build/common/webRTC.js.map +1 -0
- package/build/components/VideoPreviewView.d.ts +21 -0
- package/build/components/VideoPreviewView.d.ts.map +1 -0
- package/build/components/VideoPreviewView.js +7 -0
- package/build/components/VideoPreviewView.js.map +1 -0
- package/build/components/VideoRendererView.d.ts +19 -0
- package/build/components/VideoRendererView.d.ts.map +1 -0
- package/build/components/VideoRendererView.js +7 -0
- package/build/components/VideoRendererView.js.map +1 -0
- package/build/hooks/useAudioSettings.d.ts +23 -0
- package/build/hooks/useAudioSettings.d.ts.map +1 -0
- package/build/hooks/useAudioSettings.js +72 -0
- package/build/hooks/useAudioSettings.js.map +1 -0
- package/build/hooks/useBandwidthEstimation.d.ts +12 -0
- package/build/hooks/useBandwidthEstimation.d.ts.map +1 -0
- package/build/hooks/useBandwidthEstimation.js +16 -0
- package/build/hooks/useBandwidthEstimation.js.map +1 -0
- package/build/hooks/useCamera.d.ts +80 -0
- package/build/hooks/useCamera.d.ts.map +1 -0
- package/build/hooks/useCamera.js +140 -0
- package/build/hooks/useCamera.js.map +1 -0
- package/build/hooks/useMicrophone.d.ts +8 -0
- package/build/hooks/useMicrophone.d.ts.map +1 -0
- package/build/hooks/useMicrophone.js +27 -0
- package/build/hooks/useMicrophone.js.map +1 -0
- package/build/hooks/useParticipants.d.ts +62 -0
- package/build/hooks/useParticipants.d.ts.map +1 -0
- package/build/hooks/useParticipants.js +32 -0
- package/build/hooks/useParticipants.js.map +1 -0
- package/build/hooks/useReconnection.d.ts +5 -0
- package/build/hooks/useReconnection.d.ts.map +1 -0
- package/build/hooks/useReconnection.js +23 -0
- package/build/hooks/useReconnection.js.map +1 -0
- package/build/hooks/useScreencast.d.ts +38 -0
- package/build/hooks/useScreencast.d.ts.map +1 -0
- package/build/hooks/useScreencast.js +81 -0
- package/build/hooks/useScreencast.js.map +1 -0
- package/build/index.d.ts +24 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +14 -0
- package/build/index.js.map +1 -0
- package/build/protos/fishjam/peer_notifications.d.ts +63 -0
- package/build/protos/fishjam/peer_notifications.d.ts.map +1 -0
- package/build/protos/fishjam/peer_notifications.js +235 -0
- package/build/protos/fishjam/peer_notifications.js.map +1 -0
- package/build/stats/types.d.ts +55 -0
- package/build/stats/types.d.ts.map +1 -0
- package/build/stats/types.js +2 -0
- package/build/stats/types.js.map +1 -0
- package/build/stats/useRTCStatistics.d.ts +8 -0
- package/build/stats/useRTCStatistics.d.ts.map +1 -0
- package/build/stats/useRTCStatistics.js +78 -0
- package/build/stats/useRTCStatistics.js.map +1 -0
- package/build/types.d.ts +43 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/expo-module.config.json +17 -0
- package/ios/Events.swift +13 -0
- package/ios/RNFishjamClient.podspec +30 -0
- package/ios/RNFishjamClient.swift +836 -0
- package/ios/RNFishjamClientModule.swift +220 -0
- package/ios/Utils.swift +43 -0
- package/ios/VideoPreviewView.swift +64 -0
- package/ios/VideoPreviewViewModule.swift +21 -0
- package/ios/VideoRendererView.swift +84 -0
- package/ios/VideoRendererViewModule.swift +17 -0
- package/ios/swift-format-config.json +56 -0
- package/package.json +89 -0
- package/plugin/broadcastExtensionFiles/Info.plist +27 -0
- package/plugin/broadcastExtensionFiles/MembraneBroadcastSampleHandler.swift +50 -0
- package/plugin/broadcastExtensionFiles/MembraneScreenBroadcastExtension.entitlements +10 -0
- package/plugin/src/withMembrane.ts +310 -0
- package/plugin/tsconfig.json +9 -0
- package/scripts/lint.sh +18 -0
- package/scripts/lint_check.sh +14 -0
- package/src/RNFishjamClientModule.ts +73 -0
- package/src/__tests__/index.test.tsx +199 -0
- package/src/common/client.ts +33 -0
- package/src/common/eventEmitter.ts +21 -0
- package/src/common/metadata.ts +12 -0
- package/src/common/webRTC.ts +31 -0
- package/src/components/VideoPreviewView.tsx +33 -0
- package/src/components/VideoRendererView.tsx +31 -0
- package/src/hooks/useAudioSettings.ts +115 -0
- package/src/hooks/useBandwidthEstimation.ts +24 -0
- package/src/hooks/useCamera.ts +270 -0
- package/src/hooks/useMicrophone.ts +38 -0
- package/src/hooks/useParticipants.ts +118 -0
- package/src/hooks/useReconnection.ts +41 -0
- package/src/hooks/useScreencast.ts +146 -0
- package/src/index.tsx +63 -0
- package/src/protos/fishjam/peer_notifications.ts +299 -0
- package/src/stats/types.ts +56 -0
- package/src/stats/useRTCStatistics.ts +97 -0
- package/src/types.ts +49 -0
- package/tsconfig.json +9 -0
- package/typedoc.json +5 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
|
+
// versions:
|
|
3
|
+
// protoc-gen-ts_proto v1.178.0
|
|
4
|
+
// protoc v5.26.1
|
|
5
|
+
// source: protos/fishjam/peer_notifications.proto
|
|
6
|
+
/* eslint-disable */
|
|
7
|
+
import * as _m0 from "protobufjs/minimal";
|
|
8
|
+
export const protobufPackage = "fishjam";
|
|
9
|
+
function createBasePeerMessage() {
|
|
10
|
+
return { authenticated: undefined, authRequest: undefined, mediaEvent: undefined };
|
|
11
|
+
}
|
|
12
|
+
export const PeerMessage = {
|
|
13
|
+
encode(message, writer = _m0.Writer.create()) {
|
|
14
|
+
if (message.authenticated !== undefined) {
|
|
15
|
+
PeerMessage_Authenticated.encode(message.authenticated, writer.uint32(10).fork()).ldelim();
|
|
16
|
+
}
|
|
17
|
+
if (message.authRequest !== undefined) {
|
|
18
|
+
PeerMessage_AuthRequest.encode(message.authRequest, writer.uint32(18).fork()).ldelim();
|
|
19
|
+
}
|
|
20
|
+
if (message.mediaEvent !== undefined) {
|
|
21
|
+
PeerMessage_MediaEvent.encode(message.mediaEvent, writer.uint32(26).fork()).ldelim();
|
|
22
|
+
}
|
|
23
|
+
return writer;
|
|
24
|
+
},
|
|
25
|
+
decode(input, length) {
|
|
26
|
+
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
|
27
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
28
|
+
const message = createBasePeerMessage();
|
|
29
|
+
while (reader.pos < end) {
|
|
30
|
+
const tag = reader.uint32();
|
|
31
|
+
switch (tag >>> 3) {
|
|
32
|
+
case 1:
|
|
33
|
+
if (tag !== 10) {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
message.authenticated = PeerMessage_Authenticated.decode(reader, reader.uint32());
|
|
37
|
+
continue;
|
|
38
|
+
case 2:
|
|
39
|
+
if (tag !== 18) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
message.authRequest = PeerMessage_AuthRequest.decode(reader, reader.uint32());
|
|
43
|
+
continue;
|
|
44
|
+
case 3:
|
|
45
|
+
if (tag !== 26) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
message.mediaEvent = PeerMessage_MediaEvent.decode(reader, reader.uint32());
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
reader.skipType(tag & 7);
|
|
55
|
+
}
|
|
56
|
+
return message;
|
|
57
|
+
},
|
|
58
|
+
fromJSON(object) {
|
|
59
|
+
return {
|
|
60
|
+
authenticated: isSet(object.authenticated) ? PeerMessage_Authenticated.fromJSON(object.authenticated) : undefined,
|
|
61
|
+
authRequest: isSet(object.authRequest) ? PeerMessage_AuthRequest.fromJSON(object.authRequest) : undefined,
|
|
62
|
+
mediaEvent: isSet(object.mediaEvent) ? PeerMessage_MediaEvent.fromJSON(object.mediaEvent) : undefined,
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
toJSON(message) {
|
|
66
|
+
const obj = {};
|
|
67
|
+
if (message.authenticated !== undefined) {
|
|
68
|
+
obj.authenticated = PeerMessage_Authenticated.toJSON(message.authenticated);
|
|
69
|
+
}
|
|
70
|
+
if (message.authRequest !== undefined) {
|
|
71
|
+
obj.authRequest = PeerMessage_AuthRequest.toJSON(message.authRequest);
|
|
72
|
+
}
|
|
73
|
+
if (message.mediaEvent !== undefined) {
|
|
74
|
+
obj.mediaEvent = PeerMessage_MediaEvent.toJSON(message.mediaEvent);
|
|
75
|
+
}
|
|
76
|
+
return obj;
|
|
77
|
+
},
|
|
78
|
+
create(base) {
|
|
79
|
+
return PeerMessage.fromPartial(base ?? {});
|
|
80
|
+
},
|
|
81
|
+
fromPartial(object) {
|
|
82
|
+
const message = createBasePeerMessage();
|
|
83
|
+
message.authenticated = (object.authenticated !== undefined && object.authenticated !== null)
|
|
84
|
+
? PeerMessage_Authenticated.fromPartial(object.authenticated)
|
|
85
|
+
: undefined;
|
|
86
|
+
message.authRequest = (object.authRequest !== undefined && object.authRequest !== null)
|
|
87
|
+
? PeerMessage_AuthRequest.fromPartial(object.authRequest)
|
|
88
|
+
: undefined;
|
|
89
|
+
message.mediaEvent = (object.mediaEvent !== undefined && object.mediaEvent !== null)
|
|
90
|
+
? PeerMessage_MediaEvent.fromPartial(object.mediaEvent)
|
|
91
|
+
: undefined;
|
|
92
|
+
return message;
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
function createBasePeerMessage_Authenticated() {
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
export const PeerMessage_Authenticated = {
|
|
99
|
+
encode(_, writer = _m0.Writer.create()) {
|
|
100
|
+
return writer;
|
|
101
|
+
},
|
|
102
|
+
decode(input, length) {
|
|
103
|
+
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
|
104
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
105
|
+
const message = createBasePeerMessage_Authenticated();
|
|
106
|
+
while (reader.pos < end) {
|
|
107
|
+
const tag = reader.uint32();
|
|
108
|
+
switch (tag >>> 3) {
|
|
109
|
+
}
|
|
110
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
reader.skipType(tag & 7);
|
|
114
|
+
}
|
|
115
|
+
return message;
|
|
116
|
+
},
|
|
117
|
+
fromJSON(_) {
|
|
118
|
+
return {};
|
|
119
|
+
},
|
|
120
|
+
toJSON(_) {
|
|
121
|
+
const obj = {};
|
|
122
|
+
return obj;
|
|
123
|
+
},
|
|
124
|
+
create(base) {
|
|
125
|
+
return PeerMessage_Authenticated.fromPartial(base ?? {});
|
|
126
|
+
},
|
|
127
|
+
fromPartial(_) {
|
|
128
|
+
const message = createBasePeerMessage_Authenticated();
|
|
129
|
+
return message;
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
function createBasePeerMessage_AuthRequest() {
|
|
133
|
+
return { token: "" };
|
|
134
|
+
}
|
|
135
|
+
export const PeerMessage_AuthRequest = {
|
|
136
|
+
encode(message, writer = _m0.Writer.create()) {
|
|
137
|
+
if (message.token !== "") {
|
|
138
|
+
writer.uint32(10).string(message.token);
|
|
139
|
+
}
|
|
140
|
+
return writer;
|
|
141
|
+
},
|
|
142
|
+
decode(input, length) {
|
|
143
|
+
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
|
144
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
145
|
+
const message = createBasePeerMessage_AuthRequest();
|
|
146
|
+
while (reader.pos < end) {
|
|
147
|
+
const tag = reader.uint32();
|
|
148
|
+
switch (tag >>> 3) {
|
|
149
|
+
case 1:
|
|
150
|
+
if (tag !== 10) {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
message.token = reader.string();
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
reader.skipType(tag & 7);
|
|
160
|
+
}
|
|
161
|
+
return message;
|
|
162
|
+
},
|
|
163
|
+
fromJSON(object) {
|
|
164
|
+
return { token: isSet(object.token) ? globalThis.String(object.token) : "" };
|
|
165
|
+
},
|
|
166
|
+
toJSON(message) {
|
|
167
|
+
const obj = {};
|
|
168
|
+
if (message.token !== "") {
|
|
169
|
+
obj.token = message.token;
|
|
170
|
+
}
|
|
171
|
+
return obj;
|
|
172
|
+
},
|
|
173
|
+
create(base) {
|
|
174
|
+
return PeerMessage_AuthRequest.fromPartial(base ?? {});
|
|
175
|
+
},
|
|
176
|
+
fromPartial(object) {
|
|
177
|
+
const message = createBasePeerMessage_AuthRequest();
|
|
178
|
+
message.token = object.token ?? "";
|
|
179
|
+
return message;
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
function createBasePeerMessage_MediaEvent() {
|
|
183
|
+
return { data: "" };
|
|
184
|
+
}
|
|
185
|
+
export const PeerMessage_MediaEvent = {
|
|
186
|
+
encode(message, writer = _m0.Writer.create()) {
|
|
187
|
+
if (message.data !== "") {
|
|
188
|
+
writer.uint32(10).string(message.data);
|
|
189
|
+
}
|
|
190
|
+
return writer;
|
|
191
|
+
},
|
|
192
|
+
decode(input, length) {
|
|
193
|
+
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
|
194
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
195
|
+
const message = createBasePeerMessage_MediaEvent();
|
|
196
|
+
while (reader.pos < end) {
|
|
197
|
+
const tag = reader.uint32();
|
|
198
|
+
switch (tag >>> 3) {
|
|
199
|
+
case 1:
|
|
200
|
+
if (tag !== 10) {
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
message.data = reader.string();
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
reader.skipType(tag & 7);
|
|
210
|
+
}
|
|
211
|
+
return message;
|
|
212
|
+
},
|
|
213
|
+
fromJSON(object) {
|
|
214
|
+
return { data: isSet(object.data) ? globalThis.String(object.data) : "" };
|
|
215
|
+
},
|
|
216
|
+
toJSON(message) {
|
|
217
|
+
const obj = {};
|
|
218
|
+
if (message.data !== "") {
|
|
219
|
+
obj.data = message.data;
|
|
220
|
+
}
|
|
221
|
+
return obj;
|
|
222
|
+
},
|
|
223
|
+
create(base) {
|
|
224
|
+
return PeerMessage_MediaEvent.fromPartial(base ?? {});
|
|
225
|
+
},
|
|
226
|
+
fromPartial(object) {
|
|
227
|
+
const message = createBasePeerMessage_MediaEvent();
|
|
228
|
+
message.data = object.data ?? "";
|
|
229
|
+
return message;
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
function isSet(value) {
|
|
233
|
+
return value !== null && value !== undefined;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=peer_notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer_notifications.js","sourceRoot":"","sources":["../../../src/protos/fishjam/peer_notifications.ts"],"names":[],"mappings":"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","sourcesContent":["// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n// protoc-gen-ts_proto v1.178.0\n// protoc v5.26.1\n// source: protos/fishjam/peer_notifications.proto\n\n/* eslint-disable */\nimport * as _m0 from \"protobufjs/minimal\";\n\nexport const protobufPackage = \"fishjam\";\n\n/** Defines any type of message sent between FJ and a peer */\nexport interface PeerMessage {\n authenticated?: PeerMessage_Authenticated | undefined;\n authRequest?: PeerMessage_AuthRequest | undefined;\n mediaEvent?: PeerMessage_MediaEvent | undefined;\n}\n\n/** Response sent by FJ, confirming successfull authentication */\nexport interface PeerMessage_Authenticated {\n}\n\n/** Request sent by peer, to authenticate to FJ server */\nexport interface PeerMessage_AuthRequest {\n token: string;\n}\n\n/** Any type of WebRTC messages passed betweend FJ and peer */\nexport interface PeerMessage_MediaEvent {\n data: string;\n}\n\nfunction createBasePeerMessage(): PeerMessage {\n return { authenticated: undefined, authRequest: undefined, mediaEvent: undefined };\n}\n\nexport const PeerMessage = {\n encode(message: PeerMessage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.authenticated !== undefined) {\n PeerMessage_Authenticated.encode(message.authenticated, writer.uint32(10).fork()).ldelim();\n }\n if (message.authRequest !== undefined) {\n PeerMessage_AuthRequest.encode(message.authRequest, writer.uint32(18).fork()).ldelim();\n }\n if (message.mediaEvent !== undefined) {\n PeerMessage_MediaEvent.encode(message.mediaEvent, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PeerMessage {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePeerMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.authenticated = PeerMessage_Authenticated.decode(reader, reader.uint32());\n continue;\n case 2:\n if (tag !== 18) {\n break;\n }\n\n message.authRequest = PeerMessage_AuthRequest.decode(reader, reader.uint32());\n continue;\n case 3:\n if (tag !== 26) {\n break;\n }\n\n message.mediaEvent = PeerMessage_MediaEvent.decode(reader, reader.uint32());\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PeerMessage {\n return {\n authenticated: isSet(object.authenticated) ? PeerMessage_Authenticated.fromJSON(object.authenticated) : undefined,\n authRequest: isSet(object.authRequest) ? PeerMessage_AuthRequest.fromJSON(object.authRequest) : undefined,\n mediaEvent: isSet(object.mediaEvent) ? PeerMessage_MediaEvent.fromJSON(object.mediaEvent) : undefined,\n };\n },\n\n toJSON(message: PeerMessage): unknown {\n const obj: any = {};\n if (message.authenticated !== undefined) {\n obj.authenticated = PeerMessage_Authenticated.toJSON(message.authenticated);\n }\n if (message.authRequest !== undefined) {\n obj.authRequest = PeerMessage_AuthRequest.toJSON(message.authRequest);\n }\n if (message.mediaEvent !== undefined) {\n obj.mediaEvent = PeerMessage_MediaEvent.toJSON(message.mediaEvent);\n }\n return obj;\n },\n\n create<I extends Exact<DeepPartial<PeerMessage>, I>>(base?: I): PeerMessage {\n return PeerMessage.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<PeerMessage>, I>>(object: I): PeerMessage {\n const message = createBasePeerMessage();\n message.authenticated = (object.authenticated !== undefined && object.authenticated !== null)\n ? PeerMessage_Authenticated.fromPartial(object.authenticated)\n : undefined;\n message.authRequest = (object.authRequest !== undefined && object.authRequest !== null)\n ? PeerMessage_AuthRequest.fromPartial(object.authRequest)\n : undefined;\n message.mediaEvent = (object.mediaEvent !== undefined && object.mediaEvent !== null)\n ? PeerMessage_MediaEvent.fromPartial(object.mediaEvent)\n : undefined;\n return message;\n },\n};\n\nfunction createBasePeerMessage_Authenticated(): PeerMessage_Authenticated {\n return {};\n}\n\nexport const PeerMessage_Authenticated = {\n encode(_: PeerMessage_Authenticated, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PeerMessage_Authenticated {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePeerMessage_Authenticated();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n fromJSON(_: any): PeerMessage_Authenticated {\n return {};\n },\n\n toJSON(_: PeerMessage_Authenticated): unknown {\n const obj: any = {};\n return obj;\n },\n\n create<I extends Exact<DeepPartial<PeerMessage_Authenticated>, I>>(base?: I): PeerMessage_Authenticated {\n return PeerMessage_Authenticated.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<PeerMessage_Authenticated>, I>>(_: I): PeerMessage_Authenticated {\n const message = createBasePeerMessage_Authenticated();\n return message;\n },\n};\n\nfunction createBasePeerMessage_AuthRequest(): PeerMessage_AuthRequest {\n return { token: \"\" };\n}\n\nexport const PeerMessage_AuthRequest = {\n encode(message: PeerMessage_AuthRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.token !== \"\") {\n writer.uint32(10).string(message.token);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PeerMessage_AuthRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePeerMessage_AuthRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.token = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PeerMessage_AuthRequest {\n return { token: isSet(object.token) ? globalThis.String(object.token) : \"\" };\n },\n\n toJSON(message: PeerMessage_AuthRequest): unknown {\n const obj: any = {};\n if (message.token !== \"\") {\n obj.token = message.token;\n }\n return obj;\n },\n\n create<I extends Exact<DeepPartial<PeerMessage_AuthRequest>, I>>(base?: I): PeerMessage_AuthRequest {\n return PeerMessage_AuthRequest.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<PeerMessage_AuthRequest>, I>>(object: I): PeerMessage_AuthRequest {\n const message = createBasePeerMessage_AuthRequest();\n message.token = object.token ?? \"\";\n return message;\n },\n};\n\nfunction createBasePeerMessage_MediaEvent(): PeerMessage_MediaEvent {\n return { data: \"\" };\n}\n\nexport const PeerMessage_MediaEvent = {\n encode(message: PeerMessage_MediaEvent, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.data !== \"\") {\n writer.uint32(10).string(message.data);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PeerMessage_MediaEvent {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePeerMessage_MediaEvent();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag !== 10) {\n break;\n }\n\n message.data = reader.string();\n continue;\n }\n if ((tag & 7) === 4 || tag === 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n fromJSON(object: any): PeerMessage_MediaEvent {\n return { data: isSet(object.data) ? globalThis.String(object.data) : \"\" };\n },\n\n toJSON(message: PeerMessage_MediaEvent): unknown {\n const obj: any = {};\n if (message.data !== \"\") {\n obj.data = message.data;\n }\n return obj;\n },\n\n create<I extends Exact<DeepPartial<PeerMessage_MediaEvent>, I>>(base?: I): PeerMessage_MediaEvent {\n return PeerMessage_MediaEvent.fromPartial(base ?? ({} as any));\n },\n fromPartial<I extends Exact<DeepPartial<PeerMessage_MediaEvent>, I>>(object: I): PeerMessage_MediaEvent {\n const message = createBasePeerMessage_MediaEvent();\n message.data = object.data ?? \"\";\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin ? T\n : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>\n : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A record of the total time, in seconds,
|
|
3
|
+
* that this stream has spent in each quality limitation state.
|
|
4
|
+
* none: The resolution and/or framerate is not limited.
|
|
5
|
+
* bandwidth: The resolution and/or framerate is primarily limited due to
|
|
6
|
+
* congestion cues during bandwidth estimation.
|
|
7
|
+
* Typical, congestion control algorithms use inter-arrival time,
|
|
8
|
+
* round-trip time, packet or other congestion cues to perform bandwidth estimation.
|
|
9
|
+
* cpu: The resolution and/or framerate is primarily limited due to CPU load.
|
|
10
|
+
* other: The resolution and/or framerate is primarily limited
|
|
11
|
+
* for a reason other than the above.
|
|
12
|
+
*/
|
|
13
|
+
export type QualityLimitationDurations = {
|
|
14
|
+
bandwidth: number;
|
|
15
|
+
cpu: number;
|
|
16
|
+
none: number;
|
|
17
|
+
other: number;
|
|
18
|
+
};
|
|
19
|
+
export type RTCOutboundStats = {
|
|
20
|
+
'kind': string;
|
|
21
|
+
'rid': string;
|
|
22
|
+
'bytesSent': number;
|
|
23
|
+
'targetBitrate': number;
|
|
24
|
+
'packetsSent': number;
|
|
25
|
+
'framesEncoded': number;
|
|
26
|
+
'framesPerSecond': number;
|
|
27
|
+
'frameWidth': number;
|
|
28
|
+
'frameHeight': number;
|
|
29
|
+
'qualityLimitationDurations': QualityLimitationDurations;
|
|
30
|
+
'bytesSent/s': number;
|
|
31
|
+
'packetsSent/s': number;
|
|
32
|
+
'framesEncoded/s': number;
|
|
33
|
+
};
|
|
34
|
+
export type RTCInboundStats = {
|
|
35
|
+
'kind': number;
|
|
36
|
+
'jitter': number;
|
|
37
|
+
'packetsLost': number;
|
|
38
|
+
'packetsReceived': number;
|
|
39
|
+
'bytesReceived': number;
|
|
40
|
+
'framesReceived': number;
|
|
41
|
+
'frameWidth': number;
|
|
42
|
+
'frameHeight': number;
|
|
43
|
+
'framesPerSecond': number;
|
|
44
|
+
'framesDropped': number;
|
|
45
|
+
'packetsLost/s': number;
|
|
46
|
+
'packetsReceived/s': number;
|
|
47
|
+
'bytesReceived/s': number;
|
|
48
|
+
'framesReceived/s': number;
|
|
49
|
+
'framesDropped/s': number;
|
|
50
|
+
};
|
|
51
|
+
export type RTCTrackStats = RTCOutboundStats | RTCInboundStats;
|
|
52
|
+
export type RTCStats = {
|
|
53
|
+
[key: string]: RTCTrackStats;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/stats/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,0BAA0B,CAAC;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE/D,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/stats/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * A record of the total time, in seconds,\n * that this stream has spent in each quality limitation state.\n * none: The resolution and/or framerate is not limited.\n * bandwidth: The resolution and/or framerate is primarily limited due to\n * congestion cues during bandwidth estimation.\n * Typical, congestion control algorithms use inter-arrival time,\n * round-trip time, packet or other congestion cues to perform bandwidth estimation.\n * cpu: The resolution and/or framerate is primarily limited due to CPU load.\n * other: The resolution and/or framerate is primarily limited\n * for a reason other than the above.\n */\nexport type QualityLimitationDurations = {\n bandwidth: number;\n cpu: number;\n none: number;\n other: number;\n};\n\nexport type RTCOutboundStats = {\n 'kind': string;\n 'rid': string;\n 'bytesSent': number;\n 'targetBitrate': number;\n 'packetsSent': number;\n 'framesEncoded': number;\n 'framesPerSecond': number;\n 'frameWidth': number;\n 'frameHeight': number;\n 'qualityLimitationDurations': QualityLimitationDurations;\n 'bytesSent/s': number;\n 'packetsSent/s': number;\n 'framesEncoded/s': number;\n};\n\nexport type RTCInboundStats = {\n 'kind': number;\n 'jitter': number;\n 'packetsLost': number;\n 'packetsReceived': number;\n 'bytesReceived': number;\n 'framesReceived': number;\n 'frameWidth': number;\n 'frameHeight': number;\n 'framesPerSecond': number;\n 'framesDropped': number;\n 'packetsLost/s': number;\n 'packetsReceived/s': number;\n 'bytesReceived/s': number;\n 'framesReceived/s': number;\n 'framesDropped/s': number;\n};\n\nexport type RTCTrackStats = RTCOutboundStats | RTCInboundStats;\n\nexport type RTCStats = { [key: string]: RTCTrackStats };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRTCStatistics.d.ts","sourceRoot":"","sources":["../../src/stats/useRTCStatistics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM;;EAuFvD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { takeRight } from 'lodash';
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
4
|
+
/**
|
|
5
|
+
* This hook provides access to current rtc statistics data.
|
|
6
|
+
*/
|
|
7
|
+
export function useRTCStatistics(refreshInterval) {
|
|
8
|
+
const MAX_SIZE = 120;
|
|
9
|
+
const [statistics, setStatistics] = useState([]);
|
|
10
|
+
// Calculates diff between pervious and current stats,
|
|
11
|
+
// providing end users with a per second metric.
|
|
12
|
+
const processIncomingStats = useCallback((statistics, stats) => {
|
|
13
|
+
Object.keys(stats).forEach((obj) => {
|
|
14
|
+
if (obj.includes('Inbound')) {
|
|
15
|
+
const rtcStats = stats[obj];
|
|
16
|
+
if (statistics.length > 0 &&
|
|
17
|
+
Object.keys(statistics[statistics.length - 1]).includes(obj)) {
|
|
18
|
+
const prevRtcStats = statistics[statistics.length - 1][obj];
|
|
19
|
+
rtcStats['packetsLost/s'] =
|
|
20
|
+
rtcStats['packetsLost'] - prevRtcStats['packetsLost'];
|
|
21
|
+
rtcStats['packetsReceived/s'] =
|
|
22
|
+
rtcStats['packetsReceived'] - prevRtcStats['packetsReceived'];
|
|
23
|
+
rtcStats['bytesReceived/s'] =
|
|
24
|
+
rtcStats['bytesReceived'] - prevRtcStats['bytesReceived'];
|
|
25
|
+
rtcStats['framesReceived/s'] =
|
|
26
|
+
rtcStats['framesReceived'] - prevRtcStats['framesReceived'];
|
|
27
|
+
rtcStats['framesDropped/s'] =
|
|
28
|
+
rtcStats['framesDropped'] - prevRtcStats['framesDropped'];
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
rtcStats['packetsLost/s'] = 0;
|
|
32
|
+
rtcStats['packetsReceived/s'] = 0;
|
|
33
|
+
rtcStats['bytesReceived/s'] = 0;
|
|
34
|
+
rtcStats['framesReceived/s'] = 0;
|
|
35
|
+
rtcStats['framesDropped/s'] = 0;
|
|
36
|
+
}
|
|
37
|
+
return stats;
|
|
38
|
+
}
|
|
39
|
+
// Outbound
|
|
40
|
+
const rtcStats = stats[obj];
|
|
41
|
+
if (statistics.length > 0 &&
|
|
42
|
+
Object.keys(statistics[statistics.length - 1]).includes(obj)) {
|
|
43
|
+
const prevRtcStats = statistics[statistics.length - 1][obj];
|
|
44
|
+
rtcStats['bytesSent/s'] =
|
|
45
|
+
rtcStats['bytesSent'] - prevRtcStats['bytesSent'];
|
|
46
|
+
rtcStats['packetsSent/s'] =
|
|
47
|
+
rtcStats['packetsSent'] - prevRtcStats['packetsSent'];
|
|
48
|
+
rtcStats['framesEncoded/s'] =
|
|
49
|
+
rtcStats['framesEncoded'] - prevRtcStats['framesEncoded'];
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
rtcStats['bytesSent/s'] = 0;
|
|
53
|
+
rtcStats['packetsSent/s'] = 0;
|
|
54
|
+
rtcStats['framesEncoded/s'] = 0;
|
|
55
|
+
}
|
|
56
|
+
return stats;
|
|
57
|
+
});
|
|
58
|
+
return stats;
|
|
59
|
+
}, []);
|
|
60
|
+
// Gets stats from the native libraries.
|
|
61
|
+
const getStatistics = useCallback(async () => {
|
|
62
|
+
const stats = await RNFishjamClientModule.getStatistics();
|
|
63
|
+
setStatistics((prev) => {
|
|
64
|
+
const newStats = [...prev, processIncomingStats(prev, stats)];
|
|
65
|
+
takeRight(newStats, MAX_SIZE);
|
|
66
|
+
return newStats;
|
|
67
|
+
});
|
|
68
|
+
}, [processIncomingStats]);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
const intervalId = setInterval(getStatistics, refreshInterval);
|
|
71
|
+
return () => {
|
|
72
|
+
clearInterval(intervalId);
|
|
73
|
+
setStatistics([]);
|
|
74
|
+
};
|
|
75
|
+
}, [getStatistics, refreshInterval]);
|
|
76
|
+
return { statistics };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=useRTCStatistics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRTCStatistics.js","sourceRoot":"","sources":["../../src/stats/useRTCStatistics.ts"],"names":[],"mappings":"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","sourcesContent":["import { takeRight } from 'lodash';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { RTCInboundStats, RTCOutboundStats, RTCStats } from './types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\n/**\n * This hook provides access to current rtc statistics data.\n */\nexport function useRTCStatistics(refreshInterval: number) {\n const MAX_SIZE = 120;\n const [statistics, setStatistics] = useState<RTCStats[]>([]);\n\n // Calculates diff between pervious and current stats,\n // providing end users with a per second metric.\n const processIncomingStats = useCallback(\n (statistics: ReadonlyArray<RTCStats>, stats: Readonly<RTCStats>) => {\n Object.keys(stats).forEach((obj) => {\n if (obj.includes('Inbound')) {\n const rtcStats = stats[obj] as RTCInboundStats;\n\n if (\n statistics.length > 0 &&\n Object.keys(statistics[statistics.length - 1]).includes(obj)\n ) {\n const prevRtcStats = statistics[statistics.length - 1][\n obj\n ] as RTCInboundStats;\n\n rtcStats['packetsLost/s'] =\n rtcStats['packetsLost'] - prevRtcStats['packetsLost'];\n rtcStats['packetsReceived/s'] =\n rtcStats['packetsReceived'] - prevRtcStats['packetsReceived'];\n rtcStats['bytesReceived/s'] =\n rtcStats['bytesReceived'] - prevRtcStats['bytesReceived'];\n rtcStats['framesReceived/s'] =\n rtcStats['framesReceived'] - prevRtcStats['framesReceived'];\n rtcStats['framesDropped/s'] =\n rtcStats['framesDropped'] - prevRtcStats['framesDropped'];\n } else {\n rtcStats['packetsLost/s'] = 0;\n rtcStats['packetsReceived/s'] = 0;\n rtcStats['bytesReceived/s'] = 0;\n rtcStats['framesReceived/s'] = 0;\n rtcStats['framesDropped/s'] = 0;\n }\n return stats;\n }\n // Outbound\n const rtcStats = stats[obj] as RTCOutboundStats;\n\n if (\n statistics.length > 0 &&\n Object.keys(statistics[statistics.length - 1]).includes(obj)\n ) {\n const prevRtcStats = statistics[statistics.length - 1][\n obj\n ] as RTCOutboundStats;\n\n rtcStats['bytesSent/s'] =\n rtcStats['bytesSent'] - prevRtcStats['bytesSent'];\n rtcStats['packetsSent/s'] =\n rtcStats['packetsSent'] - prevRtcStats['packetsSent'];\n rtcStats['framesEncoded/s'] =\n rtcStats['framesEncoded'] - prevRtcStats['framesEncoded'];\n } else {\n rtcStats['bytesSent/s'] = 0;\n rtcStats['packetsSent/s'] = 0;\n rtcStats['framesEncoded/s'] = 0;\n }\n return stats;\n });\n return stats;\n },\n [],\n );\n\n // Gets stats from the native libraries.\n const getStatistics = useCallback(async () => {\n const stats = await RNFishjamClientModule.getStatistics();\n setStatistics((prev) => {\n const newStats = [...prev, processIncomingStats(prev, stats)];\n takeRight(newStats, MAX_SIZE);\n return newStats;\n });\n }, [processIncomingStats]);\n\n useEffect(() => {\n const intervalId = setInterval(getStatistics, refreshInterval);\n return () => {\n clearInterval(intervalId);\n setStatistics([]);\n };\n }, [getStatistics, refreshInterval]);\n\n return { statistics };\n}\n"]}
|
package/build/types.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type VideoLayout = 'FILL' | 'FIT';
|
|
2
|
+
export type TrackEncoding = 'l' | 'm' | 'h';
|
|
3
|
+
/**
|
|
4
|
+
* A type describing simulcast configuration.
|
|
5
|
+
*
|
|
6
|
+
* At the moment, simulcast track is initialized in three versions - low, medium and high.
|
|
7
|
+
* High resolution is the original track resolution, while medium and low resolutions are
|
|
8
|
+
* the original track resolution scaled down by 2 and 4 respectively.
|
|
9
|
+
*/
|
|
10
|
+
export type SimulcastConfig = {
|
|
11
|
+
/**
|
|
12
|
+
* whether to simulcast track or not. By default simulcast is disabled.
|
|
13
|
+
*/
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* list of active encodings. Encoding can be one of `"h"` (original encoding), `"m"` (scaled down x2), `"l"` (scaled down x4).
|
|
17
|
+
*/
|
|
18
|
+
activeEncodings: TrackEncoding[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.
|
|
22
|
+
*/
|
|
23
|
+
export type BandwidthLimit = number;
|
|
24
|
+
/**
|
|
25
|
+
* Type describing bandwidth limit for simulcast track. It is a mapping `encoding -> BandwidthLimit`. If encoding isn't present in this mapping,
|
|
26
|
+
* it will be assumed that this particular encoding shouldn't have any bandwidth limit.
|
|
27
|
+
*/
|
|
28
|
+
export type SimulcastBandwidthLimit = Record<TrackEncoding, BandwidthLimit>;
|
|
29
|
+
/**
|
|
30
|
+
* A type describing bandwidth limitation of a track, including simulcast and non-simulcast tracks. Can be `BandwidthLimit` or `SimulcastBandwidthLimit`.
|
|
31
|
+
*/
|
|
32
|
+
export type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;
|
|
33
|
+
export type TrackMetadata = {
|
|
34
|
+
active: boolean;
|
|
35
|
+
type: 'audio' | 'camera' | 'screensharing';
|
|
36
|
+
};
|
|
37
|
+
export type GenericMetadata = Record<string, unknown>;
|
|
38
|
+
declare const brand: unique symbol;
|
|
39
|
+
export type Brand<T, TBrand extends string> = T & {
|
|
40
|
+
[brand]: TBrand;
|
|
41
|
+
};
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,uBAAuB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAGtD,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AACnC,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/build/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["// global\nexport type VideoLayout = 'FILL' | 'FIT';\n\nexport type TrackEncoding = 'l' | 'm' | 'h';\n\n/**\n * A type describing simulcast configuration.\n *\n * At the moment, simulcast track is initialized in three versions - low, medium and high.\n * High resolution is the original track resolution, while medium and low resolutions are\n * the original track resolution scaled down by 2 and 4 respectively.\n */\nexport type SimulcastConfig = {\n /**\n * whether to simulcast track or not. By default simulcast is disabled.\n */\n enabled: boolean;\n /**\n * list of active encodings. Encoding can be one of `\"h\"` (original encoding), `\"m\"` (scaled down x2), `\"l\"` (scaled down x4).\n */\n activeEncodings: TrackEncoding[];\n};\n\n/**\n * Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.\n */\nexport type BandwidthLimit = number;\n\n/**\n * Type describing bandwidth limit for simulcast track. It is a mapping `encoding -> BandwidthLimit`. If encoding isn't present in this mapping,\n * it will be assumed that this particular encoding shouldn't have any bandwidth limit.\n */\nexport type SimulcastBandwidthLimit = Record<TrackEncoding, BandwidthLimit>;\n\n/**\n * A type describing bandwidth limitation of a track, including simulcast and non-simulcast tracks. Can be `BandwidthLimit` or `SimulcastBandwidthLimit`.\n */\nexport type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;\n\nexport type TrackMetadata = {\n active: boolean;\n type: 'audio' | 'camera' | 'screensharing';\n};\n\nexport type GenericMetadata = Record<string, unknown>;\n\n// branded types are useful for restricting where given value can be passed\ndeclare const brand: unique symbol;\nexport type Brand<T, TBrand extends string> = T & { [brand]: TBrand };\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"platforms": ["ios", "android", "web"],
|
|
3
|
+
"ios": {
|
|
4
|
+
"modules": [
|
|
5
|
+
"RNFishjamClientModule",
|
|
6
|
+
"VideoPreviewViewModule",
|
|
7
|
+
"VideoRendererViewModule"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"android": {
|
|
11
|
+
"modules": [
|
|
12
|
+
"org.membraneframework.reactnative.RNFishjamClientModule",
|
|
13
|
+
"org.membraneframework.reactnative.VideoPreviewViewModule",
|
|
14
|
+
"org.membraneframework.reactnative.VideoRendererViewModule"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
}
|
package/ios/Events.swift
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
struct EmitableEvents {
|
|
2
|
+
static let IsCameraOn = "IsCameraOn"
|
|
3
|
+
static let IsMicrophoneOn = "IsMicrophoneOn"
|
|
4
|
+
static let IsScreencastOn = "IsScreencastOn"
|
|
5
|
+
static let SimulcastConfigUpdate = "SimulcastConfigUpdate"
|
|
6
|
+
static let PeersUpdate = "PeersUpdate"
|
|
7
|
+
static let AudioDeviceUpdate = "AudioDeviceUpdate"
|
|
8
|
+
static let SendMediaEvent = "SendMediaEvent"
|
|
9
|
+
static let BandwidthEstimation = "BandwidthEstimation"
|
|
10
|
+
static let ReconnectionRetriesLimitReached = "ReconnectionRetriesLimitReached"
|
|
11
|
+
static let ReconnectionStarted = "ReconnectionStarted"
|
|
12
|
+
static let Reconnected = "Reconnected"
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = 'RNFishjamClient'
|
|
7
|
+
s.version = package['version']
|
|
8
|
+
s.summary = package['description']
|
|
9
|
+
s.description = package['description']
|
|
10
|
+
s.license = package['license']
|
|
11
|
+
s.author = package['author']
|
|
12
|
+
s.homepage = package['homepage']
|
|
13
|
+
s.platform = :ios, '13.0'
|
|
14
|
+
s.swift_version = '5.4'
|
|
15
|
+
s.source = { git: 'https://github.com/fishjam-cloud/mobile-client-sdk/tree/main/packages/react-native-client/ios' }
|
|
16
|
+
s.static_framework = true
|
|
17
|
+
|
|
18
|
+
s.dependency 'ExpoModulesCore'
|
|
19
|
+
|
|
20
|
+
# Swift/Objective-C compatibility
|
|
21
|
+
s.pod_target_xcconfig = {
|
|
22
|
+
'DEFINES_MODULE' => 'YES',
|
|
23
|
+
'SWIFT_COMPILATION_MODE' => 'wholemodule'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
s.source_files = '**/*.{h,m,swift}'
|
|
27
|
+
|
|
28
|
+
s.dependency 'FishjamCloudClient', '>= 0.1'
|
|
29
|
+
|
|
30
|
+
end
|