@stream-io/video-react-native-sdk 0.2.14 → 0.3.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 +27 -0
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNative.kt +2 -8
- package/dist/commonjs/components/Call/Lobby/Lobby.js +3 -3
- package/dist/commonjs/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/commonjs/providers/MediaStreamManagement.js +45 -13
- package/dist/commonjs/providers/MediaStreamManagement.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/commonjs/version.js.map +1 -1
- package/dist/module/components/Call/Lobby/Lobby.js +4 -4
- package/dist/module/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/module/providers/MediaStreamManagement.js +46 -14
- package/dist/module/providers/MediaStreamManagement.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/module/version.js.map +1 -1
- package/dist/typescript/components/Call/Lobby/Lobby.d.ts.map +1 -1
- package/dist/typescript/providers/MediaStreamManagement.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/dist/typescript/version.d.ts.map +1 -1
- package/expo-config-plugin/dist/index.js +0 -4
- package/expo-config-plugin/dist/withMainActivity.js +2 -1
- package/ios/StreamVideoReactNative.h +2 -2
- package/ios/StreamVideoReactNative.m +4 -4
- package/package.json +5 -5
- package/src/components/Call/Lobby/Lobby.tsx +2 -6
- package/src/providers/MediaStreamManagement.tsx +56 -13
- package/src/version.ts +1 -1
- package/android/src/main/java/com/streamvideo/reactnative/video/SimulcastVideoEncoderFactoryWrapper.kt +0 -249
- package/android/src/main/java/com/streamvideo/reactnative/video/WrappedVideoDecoderFactoryProxy.kt +0 -19
- package/expo-config-plugin/dist/withMainApplication.d.ts +0 -3
- package/expo-config-plugin/dist/withMainApplication.js +0 -25
- package/expo-config-plugin/dist/withStreamVideoReactNativeSDKAppDelegate.d.ts +0 -3
- package/expo-config-plugin/dist/withStreamVideoReactNativeSDKAppDelegate.js +0 -22
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
### [0.3.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.3.0...@stream-io/video-react-native-sdk-0.3.1) (2023-11-30)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **react-native:** do not trigger initial device setting after join ([204c303](https://github.com/GetStream/stream-video-js/commit/204c303353c536c44b77350bb49c117f21e093c5))
|
|
11
|
+
|
|
12
|
+
## [0.3.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.2.14...@stream-io/video-react-native-sdk-0.3.0) (2023-11-29)
|
|
13
|
+
|
|
14
|
+
### Dependency Updates
|
|
15
|
+
|
|
16
|
+
* `@stream-io/video-client` updated to version `0.5.0`
|
|
17
|
+
* `@stream-io/video-react-bindings` updated to version `0.3.11`
|
|
18
|
+
|
|
19
|
+
### ⚠ BREAKING CHANGES
|
|
20
|
+
|
|
21
|
+
* **react-native:** move to webrtc 118 (#1197)
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* **react-native:** move to webrtc 118 ([#1197](https://github.com/GetStream/stream-video-js/issues/1197)) ([8cdbe11](https://github.com/GetStream/stream-video-js/commit/8cdbe11de069fcb6eae5643f5cef5c9612f6c805))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* **react-native:** remove unused import ([388d5fc](https://github.com/GetStream/stream-video-js/commit/388d5fc41479190c34b1f5042303157b96149381))
|
|
31
|
+
|
|
5
32
|
### [0.2.14](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.2.13...@stream-io/video-react-native-sdk-0.2.14) (2023-11-27)
|
|
6
33
|
|
|
7
34
|
### Dependency Updates
|
package/android/build.gradle
CHANGED
|
@@ -129,7 +129,7 @@ dependencies {
|
|
|
129
129
|
// noinspection GradleDynamicVersion
|
|
130
130
|
api 'com.facebook.react:react-native:+'
|
|
131
131
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
132
|
-
api '
|
|
132
|
+
api 'org.jitsi:webrtc:118.+'
|
|
133
133
|
implementation project(':stream-io_react-native-webrtc')
|
|
134
134
|
implementation "androidx.annotation:annotation:1.4.0"
|
|
135
135
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
package com.streamvideo.reactnative
|
|
2
|
-
|
|
3
|
-
import com.streamvideo.reactnative.video.SimulcastVideoEncoderFactoryWrapper
|
|
4
|
-
import com.streamvideo.reactnative.video.WrappedVideoDecoderFactoryProxy
|
|
5
|
-
import com.oney.WebRTCModule.WebRTCModuleOptions
|
|
6
2
|
import kotlin.properties.Delegates
|
|
7
3
|
|
|
8
4
|
|
|
@@ -20,11 +16,9 @@ object StreamVideoReactNative {
|
|
|
20
16
|
}
|
|
21
17
|
}
|
|
22
18
|
|
|
23
|
-
@JvmStatic
|
|
19
|
+
@JvmStatic @Deprecated("No need to use setup() anymore")
|
|
24
20
|
fun setup() {
|
|
25
|
-
|
|
26
|
-
options.videoEncoderFactory = SimulcastVideoEncoderFactoryWrapper(null, true, true)
|
|
27
|
-
options.videoDecoderFactory = WrappedVideoDecoderFactoryProxy()
|
|
21
|
+
// do nothing
|
|
28
22
|
}
|
|
29
23
|
|
|
30
24
|
@JvmStatic
|
|
@@ -44,13 +44,13 @@ const Lobby = _ref => {
|
|
|
44
44
|
useCameraState
|
|
45
45
|
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
46
46
|
const {
|
|
47
|
-
status: cameraStatus
|
|
47
|
+
status: cameraStatus,
|
|
48
|
+
mediaStream
|
|
48
49
|
} = useCameraState();
|
|
49
|
-
const call = (0, _videoReactBindings.useCall)();
|
|
50
50
|
const {
|
|
51
51
|
t
|
|
52
52
|
} = (0, _videoReactBindings.useI18n)();
|
|
53
|
-
const localVideoStream =
|
|
53
|
+
const localVideoStream = mediaStream;
|
|
54
54
|
(0, _useCallMediaStreamCleanup.useCallMediaStreamCleanup)();
|
|
55
55
|
const connectedUserAsParticipant = {
|
|
56
56
|
userId: connectedUser === null || connectedUser === void 0 ? void 0 : connectedUser.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_icons","_videoReactBindings","_Avatar","_constants","_reactNativeWebrtc","_LobbyControls","_JoinCallButton","_ThemeContext","_useCallMediaStreamCleanup","_LobbyFooter","obj","__esModule","default","Lobby","_ref","onJoinCallHandler","LobbyControls","DefaultLobbyControls","JoinCallButton","DefaultJoinCallButton","landscape","LobbyFooter","DefaultLobbyFooter","theme","colors","lobby","typefaces","useTheme","connectedUser","useConnectedUser","useCameraState","useCallStateHooks","status","cameraStatus","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_icons","_videoReactBindings","_Avatar","_constants","_reactNativeWebrtc","_LobbyControls","_JoinCallButton","_ThemeContext","_useCallMediaStreamCleanup","_LobbyFooter","obj","__esModule","default","Lobby","_ref","onJoinCallHandler","LobbyControls","DefaultLobbyControls","JoinCallButton","DefaultJoinCallButton","landscape","LobbyFooter","DefaultLobbyFooter","theme","colors","lobby","typefaces","useTheme","connectedUser","useConnectedUser","useCameraState","useCallStateHooks","status","cameraStatus","mediaStream","t","useI18n","localVideoStream","useCallMediaStreamCleanup","connectedUserAsParticipant","userId","id","image","name","landscapeStyles","flexDirection","createElement","View","style","styles","container","backgroundColor","static_grey","topContainer","Text","heading","color","static_white","heading4","subHeading","text_low_emphasis","subtitle","videoContainer","disabled","topView","RTCView","mirror","streamURL","toURL","objectFit","StyleSheet","absoluteFillObject","avatarContainer","Avatar","participant","ParticipantStatus","bottomContainer","exports","variants","iconSizes","useMicrophoneState","participantLabel","micStatus","participantStatusContainer","static_overlay","userNameLabel","caption","numberOfLines","audioMutedIconContainer","height","xs","width","MicOff","error","create","flex","justifyContent","paddingHorizontal","textAlign","LOBBY_VIDEO_VIEW_HEIGHT","borderRadius","alignItems","overflow","padding","alignSelf","flexShrink","marginLeft"],"sourceRoot":"../../../../../src","sources":["components/Call/Lobby/Lobby.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AAKA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAP,OAAA;AACA,IAAAQ,eAAA,GAAAR,OAAA;AAIA,IAAAS,aAAA,GAAAT,OAAA;AACA,IAAAU,0BAAA,GAAAV,OAAA;AAEA,IAAAW,YAAA,GAAAX,OAAA;AAGuB,SAAAD,uBAAAa,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEvB;AACA;AACA;;AAyBA;AACA;AACA;AACO,MAAMG,KAAK,GAAGC,IAAA,IAMH;EAAA,IANI;IACpBC,iBAAiB;IACjBC,aAAa,GAAGC,4BAAoB;IACpCC,cAAc,GAAGC,8BAAqB;IACtCC,SAAS,GAAG,KAAK;IACjBC,WAAW,GAAGC;EACJ,CAAC,GAAAR,IAAA;EACX,MAAM;IACJS,KAAK,EAAE;MAAEC,MAAM;MAAEC,KAAK;MAAEC;IAAU;EACpC,CAAC,GAAG,IAAAC,sBAAQ,EAAC,CAAC;EACd,MAAMC,aAAa,GAAG,IAAAC,oCAAgB,EAAC,CAAC;EACxC,MAAM;IAAEC;EAAe,CAAC,GAAG,IAAAC,qCAAiB,EAAC,CAAC;EAC9C,MAAM;IAAEC,MAAM,EAAEC,YAAY;IAAEC;EAAY,CAAC,GAAGJ,cAAc,CAAC,CAAC;EAC9D,MAAM;IAAEK;EAAE,CAAC,GAAG,IAAAC,2BAAO,EAAC,CAAC;EACvB,MAAMC,gBAAgB,GAAGH,WAAiD;EAE1E,IAAAI,oDAAyB,EAAC,CAAC;EAE3B,MAAMC,0BAA0B,GAAG;IACjCC,MAAM,EAAEZ,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEa,EAAE;IACzBC,KAAK,EAAEd,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEc,KAAK;IAC3BC,IAAI,EAAEf,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEe;EACvB,CAA2B;EAE3B,MAAMC,eAA0B,GAAG;IACjCC,aAAa,EAAEzB,SAAS,GAAG,KAAK,GAAG;EACrC,CAAC;EAED,oBACExB,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACC,SAAS,EAChBN,eAAe,EACf;MAAEO,eAAe,EAAE3B,MAAM,CAAC4B;IAAY,CAAC,EACvC3B,KAAK,CAACyB,SAAS;EACf,GAEDtB,aAAa,iBACZhC,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IAACC,KAAK,EAAE,CAACC,MAAM,CAACI,YAAY,EAAE5B,KAAK,CAAC4B,YAAY;EAAE,gBACrDzD,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAuD,IAAI;IACHN,KAAK,EAAE,CACLC,MAAM,CAACM,OAAO,EACd;MAAEC,KAAK,EAAEhC,MAAM,CAACiC;IAAa,CAAC,EAC9B/B,SAAS,CAACgC,QAAQ,EAClBjC,KAAK,CAAC8B,OAAO;EACb,GAEDpB,CAAC,CAAC,gBAAgB,CACf,CAAC,eACPvC,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAuD,IAAI;IACHN,KAAK,EAAE,CACLC,MAAM,CAACU,UAAU,EACjB;MAAEH,KAAK,EAAEhC,MAAM,CAACoC;IAAkB,CAAC,EACnClC,SAAS,CAACmC,QAAQ;EAClB,GAED1B,CAAC,CAAC,4BAA4B,CAC3B,CAAC,eACPvC,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACa,cAAc,EACrB;MAAEX,eAAe,EAAE3B,MAAM,CAACuC;IAAS,CAAC,EACpCtC,KAAK,CAACqC,cAAc;EACpB,gBAEFlE,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACe;EAAQ,CAAE,CAAC,EAC9B/B,YAAY,KAAK,SAAS,IAAII,gBAAgB,gBAC7CzC,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC1C,kBAAA,CAAA6D,OAAO;IACNC,MAAM,EAAE,IAAK;IACbC,SAAS,EAAE9B,gBAAgB,CAAC+B,KAAK,CAAC,CAAE;IACpCC,SAAS,EAAC,OAAO;IACjBrB,KAAK,EAAEsB,uBAAU,CAACC;EAAmB,CACtC,CAAC,gBAEF3E,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IAACC,KAAK,EAAE,CAACC,MAAM,CAACuB,eAAe,EAAE/C,KAAK,CAAC+C,eAAe;EAAE,gBAC3D5E,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC5C,OAAA,CAAAuE,MAAM;IAACC,WAAW,EAAEnC;EAA2B,CAAE,CAC9C,CACP,eACD3C,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC6B,iBAAiB,MAAE,CAChB,CACF,CACP,eACD/E,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IAACC,KAAK,EAAE,CAACC,MAAM,CAAC2B,eAAe,EAAEnD,KAAK,CAACmD,eAAe;EAAE,GAC1D5D,aAAa,iBAAIpB,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC9B,aAAa,MAAE,CAAC,EAClCK,WAAW,iBACVzB,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAACzB,WAAW;IACVH,cAAc,EAAEA,cAAe;IAC/BH,iBAAiB,EAAEA;EAAkB,CACtC,CAEC,CACF,CAAC;AAEX,CAAC;AAAC8D,OAAA,CAAAhE,KAAA,GAAAA,KAAA;AAEF,MAAM8D,iBAAiB,GAAGA,CAAA,KAAM;EAC9B,MAAM;IACJpD,KAAK,EAAE;MACLC,MAAM;MACNE,SAAS;MACTD,KAAK;MACLqD,QAAQ,EAAE;QAAEC;MAAU;IACxB;EACF,CAAC,GAAG,IAAApD,sBAAQ,EAAC,CAAC;EACd,MAAMC,aAAa,GAAG,IAAAC,oCAAgB,EAAC,CAAC;EACxC,MAAM;IAAEmD;EAAmB,CAAC,GAAG,IAAAjD,qCAAiB,EAAC,CAAC;EAClD,MAAMkD,gBAAgB,GAAG,CAAArD,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEe,IAAI,MAAIf,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEa,EAAE;EACjE,MAAM;IAAET,MAAM,EAAEkD;EAAU,CAAC,GAAGF,kBAAkB,CAAC,CAAC;EAClD,oBACEpF,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACkC,0BAA0B,EACjC;MACEhC,eAAe,EAAE3B,MAAM,CAAC4D;IAC1B,CAAC,EACD3D,KAAK,CAAC0D,0BAA0B;EAChC,gBAEFvF,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAuD,IAAI;IACHN,KAAK,EAAE,CACLC,MAAM,CAACoC,aAAa,EACpB;MAAE7B,KAAK,EAAEhC,MAAM,CAACiC;IAAa,CAAC,EAC9B/B,SAAS,CAAC4D,OAAO,EACjB7D,KAAK,CAAC4D,aAAa,CACnB;IACFE,aAAa,EAAE;EAAE,GAEhBN,gBACG,CAAC,EACN,CAAC,CAACC,SAAS,IAAIA,SAAS,KAAK,UAAU,kBACtCtF,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC/C,YAAA,CAAAgD,IAAI;IACHC,KAAK,EAAE,CACLC,MAAM,CAACuC,uBAAuB,EAC9B;MACEC,MAAM,EAAEV,SAAS,CAACW,EAAE;MACpBC,KAAK,EAAEZ,SAAS,CAACW;IACnB,CAAC,EACDjE,KAAK,CAAC+D,uBAAuB;EAC7B,gBAEF5F,MAAA,CAAAgB,OAAA,CAAAkC,aAAA,CAAC9C,MAAA,CAAA4F,MAAM;IAACpC,KAAK,EAAEhC,MAAM,CAACqE;EAAM,CAAE,CAC1B,CAEJ,CAAC;AAEX,CAAC;AAED,MAAM5C,MAAM,GAAGqB,uBAAU,CAACwB,MAAM,CAAC;EAC/B5C,SAAS,EAAE;IACT6C,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE;EAClB,CAAC;EACD3C,YAAY,EAAE;IACZ0C,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,cAAc;IAC9BC,iBAAiB,EAAE;EACrB,CAAC;EACD1C,OAAO,EAAE;IACP2C,SAAS,EAAE;EACb,CAAC;EACDvC,UAAU,EAAE;IACVuC,SAAS,EAAE;EACb,CAAC;EACDpC,cAAc,EAAE;IACd2B,MAAM,EAAEU,kCAAuB;IAC/BC,YAAY,EAAE,EAAE;IAChBJ,cAAc,EAAE,eAAe;IAC/BK,UAAU,EAAE,QAAQ;IACpBC,QAAQ,EAAE,QAAQ;IAClBC,OAAO,EAAE;EACX,CAAC;EACDvC,OAAO,EAAE,CAAC,CAAC;EACXY,eAAe,EAAE;IACfmB,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,cAAc;IAC9BC,iBAAiB,EAAE;EACrB,CAAC;EACDd,0BAA0B,EAAE;IAC1BqB,SAAS,EAAE,YAAY;IACvB3D,aAAa,EAAE,KAAK;IACpBwD,UAAU,EAAE,QAAQ;IACpBE,OAAO,EAAE,CAAC;IACVH,YAAY,EAAE;EAChB,CAAC;EACD5B,eAAe,EAAE;IACfuB,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE;EAClB,CAAC;EACDX,aAAa,EAAE;IACboB,UAAU,EAAE;EACd,CAAC;EACDjB,uBAAuB,EAAE;IACvBkB,UAAU,EAAE;EACd;AACF,CAAC,CAAC"}
|
|
@@ -30,6 +30,34 @@ const MediaStreamManagement = _ref => {
|
|
|
30
30
|
const {
|
|
31
31
|
useCallSettings
|
|
32
32
|
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
33
|
+
const settings = useCallSettings();
|
|
34
|
+
|
|
35
|
+
// Get the target resolution from the settings and memoize it
|
|
36
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
37
|
+
const targetResolutionSetting = (0, _react.useMemo)(() => {
|
|
38
|
+
var _settings$video$targe, _settings$video$targe2, _settings$video$targe3;
|
|
39
|
+
if ((settings === null || settings === void 0 || (_settings$video$targe = settings.video.target_resolution) === null || _settings$video$targe === void 0 ? void 0 : _settings$video$targe.width) === undefined || (settings === null || settings === void 0 || (_settings$video$targe2 = settings.video.target_resolution) === null || _settings$video$targe2 === void 0 ? void 0 : _settings$video$targe2.height) === undefined || (settings === null || settings === void 0 || (_settings$video$targe3 = settings.video.target_resolution) === null || _settings$video$targe3 === void 0 ? void 0 : _settings$video$targe3.bitrate) === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
width: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width,
|
|
44
|
+
height: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height,
|
|
45
|
+
bitrate: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate
|
|
46
|
+
};
|
|
47
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate]);
|
|
48
|
+
|
|
49
|
+
// Get the target resolution from the default device settings and memoize it
|
|
50
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
51
|
+
const defaultOnSetting = (0, _react.useMemo)(() => {
|
|
52
|
+
if ((settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on) === undefined || (settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on) === undefined) {
|
|
53
|
+
return undefined;
|
|
54
|
+
} else {
|
|
55
|
+
return {
|
|
56
|
+
mic_default_on: settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on,
|
|
57
|
+
camera_default_on: settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on, settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on]);
|
|
33
61
|
|
|
34
62
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
35
63
|
// To save on CPU resources
|
|
@@ -59,33 +87,32 @@ const MediaStreamManagement = _ref => {
|
|
|
59
87
|
initialAudioEnabled: undefined,
|
|
60
88
|
initialVideoEnabled: undefined
|
|
61
89
|
});
|
|
62
|
-
const settings = useCallSettings();
|
|
63
90
|
|
|
64
91
|
// Use backend settings to set initial audio/video enabled state
|
|
65
92
|
// It is applied only if the prop was undefined -- meaning user did not provide any value
|
|
66
93
|
(0, _react.useEffect)(() => {
|
|
67
|
-
if (!
|
|
94
|
+
if (!defaultOnSetting) {
|
|
68
95
|
return;
|
|
69
96
|
}
|
|
70
97
|
const {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
} =
|
|
98
|
+
mic_default_on,
|
|
99
|
+
camera_default_on
|
|
100
|
+
} = defaultOnSetting;
|
|
74
101
|
setInitialDeviceState(prev => {
|
|
75
102
|
let initAudio = prev.initialAudioEnabled;
|
|
76
103
|
if (typeof propInitialAudioEnabled === 'undefined') {
|
|
77
|
-
initAudio =
|
|
104
|
+
initAudio = mic_default_on;
|
|
78
105
|
}
|
|
79
106
|
let initVideo = prev.initialVideoEnabled;
|
|
80
107
|
if (typeof propInitialVideoEnabled === 'undefined') {
|
|
81
|
-
initVideo =
|
|
108
|
+
initVideo = camera_default_on;
|
|
82
109
|
}
|
|
83
110
|
return {
|
|
84
111
|
initialAudioEnabled: initAudio,
|
|
85
112
|
initialVideoEnabled: initVideo
|
|
86
113
|
};
|
|
87
114
|
});
|
|
88
|
-
}, [propInitialAudioEnabled, propInitialVideoEnabled,
|
|
115
|
+
}, [propInitialAudioEnabled, propInitialVideoEnabled, defaultOnSetting]);
|
|
89
116
|
|
|
90
117
|
// Apply SDK settings to set the initial audio/video enabled state
|
|
91
118
|
(0, _react.useEffect)(() => {
|
|
@@ -114,17 +141,22 @@ const MediaStreamManagement = _ref => {
|
|
|
114
141
|
if (initialVideoEnabled === undefined) {
|
|
115
142
|
return;
|
|
116
143
|
}
|
|
144
|
+
// we wait until we receive the resolution settings from the backend
|
|
145
|
+
if (!call || !targetResolutionSetting) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
117
148
|
if (initialAudioEnabled) {
|
|
118
|
-
call
|
|
149
|
+
call.microphone.enable();
|
|
119
150
|
} else {
|
|
120
|
-
call
|
|
151
|
+
call.microphone.disable();
|
|
121
152
|
}
|
|
153
|
+
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
122
154
|
if (initialVideoEnabled) {
|
|
123
|
-
call
|
|
155
|
+
call.camera.enable();
|
|
124
156
|
} else {
|
|
125
|
-
call
|
|
157
|
+
call.camera.disable();
|
|
126
158
|
}
|
|
127
|
-
}, [call, initialAudioEnabled, initialVideoEnabled]);
|
|
159
|
+
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
128
160
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
129
161
|
};
|
|
130
162
|
exports.MediaStreamManagement = MediaStreamManagement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_videoReactBindings","_hooks","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","useCall","useCallSettings","useCallStateHooks","useAppStateListener","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","useState","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_videoReactBindings","_hooks","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","useCall","useCallSettings","useCallStateHooks","settings","targetResolutionSetting","useMemo","_settings$video$targe","_settings$video$targe2","_settings$video$targe3","video","target_resolution","width","undefined","height","bitrate","defaultOnSetting","audio","mic_default_on","camera_default_on","useAppStateListener","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","useState","useEffect","prev","initAudio","initVideo","microphone","enable","selectTargetResolution","createElement","Fragment","exports"],"sourceRoot":"../../../src","sources":["providers/MediaStreamManagement.tsx"],"mappings":"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"}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["version","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG,
|
|
1
|
+
{"version":3,"names":["version","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAO,MAAMA,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG,OAAO"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { StyleSheet, Text, View } from 'react-native';
|
|
3
3
|
import { MicOff } from '../../../icons';
|
|
4
|
-
import {
|
|
4
|
+
import { useCallStateHooks, useConnectedUser, useI18n } from '@stream-io/video-react-bindings';
|
|
5
5
|
import { Avatar } from '../../utility/Avatar';
|
|
6
6
|
import { LOBBY_VIDEO_VIEW_HEIGHT } from '../../../constants';
|
|
7
7
|
import { RTCView } from '@stream-io/react-native-webrtc';
|
|
@@ -38,13 +38,13 @@ export const Lobby = _ref => {
|
|
|
38
38
|
useCameraState
|
|
39
39
|
} = useCallStateHooks();
|
|
40
40
|
const {
|
|
41
|
-
status: cameraStatus
|
|
41
|
+
status: cameraStatus,
|
|
42
|
+
mediaStream
|
|
42
43
|
} = useCameraState();
|
|
43
|
-
const call = useCall();
|
|
44
44
|
const {
|
|
45
45
|
t
|
|
46
46
|
} = useI18n();
|
|
47
|
-
const localVideoStream =
|
|
47
|
+
const localVideoStream = mediaStream;
|
|
48
48
|
useCallMediaStreamCleanup();
|
|
49
49
|
const connectedUserAsParticipant = {
|
|
50
50
|
userId: connectedUser === null || connectedUser === void 0 ? void 0 : connectedUser.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","StyleSheet","Text","View","MicOff","
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","Text","View","MicOff","useCallStateHooks","useConnectedUser","useI18n","Avatar","LOBBY_VIDEO_VIEW_HEIGHT","RTCView","LobbyControls","DefaultLobbyControls","JoinCallButton","DefaultJoinCallButton","useTheme","useCallMediaStreamCleanup","LobbyFooter","DefaultLobbyFooter","Lobby","_ref","onJoinCallHandler","landscape","theme","colors","lobby","typefaces","connectedUser","useCameraState","status","cameraStatus","mediaStream","t","localVideoStream","connectedUserAsParticipant","userId","id","image","name","landscapeStyles","flexDirection","createElement","style","styles","container","backgroundColor","static_grey","topContainer","heading","color","static_white","heading4","subHeading","text_low_emphasis","subtitle","videoContainer","disabled","topView","mirror","streamURL","toURL","objectFit","absoluteFillObject","avatarContainer","participant","ParticipantStatus","bottomContainer","variants","iconSizes","useMicrophoneState","participantLabel","micStatus","participantStatusContainer","static_overlay","userNameLabel","caption","numberOfLines","audioMutedIconContainer","height","xs","width","error","create","flex","justifyContent","paddingHorizontal","textAlign","borderRadius","alignItems","overflow","padding","alignSelf","flexShrink","marginLeft"],"sourceRoot":"../../../../../src","sources":["components/Call/Lobby/Lobby.tsx"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
3
3
|
import { useAppStateListener } from '../utils/hooks';
|
|
4
4
|
import { NativeModules, Platform } from 'react-native';
|
|
@@ -22,6 +22,34 @@ export const MediaStreamManagement = _ref => {
|
|
|
22
22
|
const {
|
|
23
23
|
useCallSettings
|
|
24
24
|
} = useCallStateHooks();
|
|
25
|
+
const settings = useCallSettings();
|
|
26
|
+
|
|
27
|
+
// Get the target resolution from the settings and memoize it
|
|
28
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
29
|
+
const targetResolutionSetting = useMemo(() => {
|
|
30
|
+
var _settings$video$targe, _settings$video$targe2, _settings$video$targe3;
|
|
31
|
+
if ((settings === null || settings === void 0 || (_settings$video$targe = settings.video.target_resolution) === null || _settings$video$targe === void 0 ? void 0 : _settings$video$targe.width) === undefined || (settings === null || settings === void 0 || (_settings$video$targe2 = settings.video.target_resolution) === null || _settings$video$targe2 === void 0 ? void 0 : _settings$video$targe2.height) === undefined || (settings === null || settings === void 0 || (_settings$video$targe3 = settings.video.target_resolution) === null || _settings$video$targe3 === void 0 ? void 0 : _settings$video$targe3.bitrate) === undefined) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
width: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width,
|
|
36
|
+
height: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height,
|
|
37
|
+
bitrate: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate
|
|
38
|
+
};
|
|
39
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate]);
|
|
40
|
+
|
|
41
|
+
// Get the target resolution from the default device settings and memoize it
|
|
42
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
43
|
+
const defaultOnSetting = useMemo(() => {
|
|
44
|
+
if ((settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on) === undefined || (settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on) === undefined) {
|
|
45
|
+
return undefined;
|
|
46
|
+
} else {
|
|
47
|
+
return {
|
|
48
|
+
mic_default_on: settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on,
|
|
49
|
+
camera_default_on: settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on, settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on]);
|
|
25
53
|
|
|
26
54
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
27
55
|
// To save on CPU resources
|
|
@@ -51,33 +79,32 @@ export const MediaStreamManagement = _ref => {
|
|
|
51
79
|
initialAudioEnabled: undefined,
|
|
52
80
|
initialVideoEnabled: undefined
|
|
53
81
|
});
|
|
54
|
-
const settings = useCallSettings();
|
|
55
82
|
|
|
56
83
|
// Use backend settings to set initial audio/video enabled state
|
|
57
84
|
// It is applied only if the prop was undefined -- meaning user did not provide any value
|
|
58
85
|
useEffect(() => {
|
|
59
|
-
if (!
|
|
86
|
+
if (!defaultOnSetting) {
|
|
60
87
|
return;
|
|
61
88
|
}
|
|
62
89
|
const {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
} =
|
|
90
|
+
mic_default_on,
|
|
91
|
+
camera_default_on
|
|
92
|
+
} = defaultOnSetting;
|
|
66
93
|
setInitialDeviceState(prev => {
|
|
67
94
|
let initAudio = prev.initialAudioEnabled;
|
|
68
95
|
if (typeof propInitialAudioEnabled === 'undefined') {
|
|
69
|
-
initAudio =
|
|
96
|
+
initAudio = mic_default_on;
|
|
70
97
|
}
|
|
71
98
|
let initVideo = prev.initialVideoEnabled;
|
|
72
99
|
if (typeof propInitialVideoEnabled === 'undefined') {
|
|
73
|
-
initVideo =
|
|
100
|
+
initVideo = camera_default_on;
|
|
74
101
|
}
|
|
75
102
|
return {
|
|
76
103
|
initialAudioEnabled: initAudio,
|
|
77
104
|
initialVideoEnabled: initVideo
|
|
78
105
|
};
|
|
79
106
|
});
|
|
80
|
-
}, [propInitialAudioEnabled, propInitialVideoEnabled,
|
|
107
|
+
}, [propInitialAudioEnabled, propInitialVideoEnabled, defaultOnSetting]);
|
|
81
108
|
|
|
82
109
|
// Apply SDK settings to set the initial audio/video enabled state
|
|
83
110
|
useEffect(() => {
|
|
@@ -106,17 +133,22 @@ export const MediaStreamManagement = _ref => {
|
|
|
106
133
|
if (initialVideoEnabled === undefined) {
|
|
107
134
|
return;
|
|
108
135
|
}
|
|
136
|
+
// we wait until we receive the resolution settings from the backend
|
|
137
|
+
if (!call || !targetResolutionSetting) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
109
140
|
if (initialAudioEnabled) {
|
|
110
|
-
call
|
|
141
|
+
call.microphone.enable();
|
|
111
142
|
} else {
|
|
112
|
-
call
|
|
143
|
+
call.microphone.disable();
|
|
113
144
|
}
|
|
145
|
+
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
114
146
|
if (initialVideoEnabled) {
|
|
115
|
-
call
|
|
147
|
+
call.camera.enable();
|
|
116
148
|
} else {
|
|
117
|
-
call
|
|
149
|
+
call.camera.disable();
|
|
118
150
|
}
|
|
119
|
-
}, [call, initialAudioEnabled, initialVideoEnabled]);
|
|
151
|
+
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
120
152
|
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
121
153
|
};
|
|
122
154
|
//# sourceMappingURL=MediaStreamManagement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","useCall","useCallStateHooks","useAppStateListener","NativeModules","Platform","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","call","useCallSettings","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useMemo","useState","useCall","useCallStateHooks","useAppStateListener","NativeModules","Platform","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","call","useCallSettings","settings","targetResolutionSetting","_settings$video$targe","_settings$video$targe2","_settings$video$targe3","video","target_resolution","width","undefined","height","bitrate","defaultOnSetting","audio","mic_default_on","camera_default_on","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","prev","initAudio","initVideo","microphone","enable","selectTargetResolution","createElement","Fragment"],"sourceRoot":"../../../src","sources":["providers/MediaStreamManagement.tsx"],"mappings":"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"}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.3.1';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["version"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"names":["version"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lobby.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/Lobby/Lobby.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Lobby.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/Lobby/Lobby.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAa7C,OAAO,EAEL,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAEL,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACzC;;OAEG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;IAC3D;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,kFAMf,UAAU,sBAuFZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/providers/MediaStreamManagement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"MediaStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/providers/MediaStreamManagement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAgC,MAAM,OAAO,CAAC;AAM/E,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,8GAI/B,kBAAkB,wBAAwB,CAAC,sBA4I7C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.
|
|
1
|
+
export declare const version = "0.3.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -4,9 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const config_plugins_1 = require("@expo/config-plugins");
|
|
7
|
-
const withStreamVideoReactNativeSDKAppDelegate_1 = __importDefault(require("./withStreamVideoReactNativeSDKAppDelegate"));
|
|
8
7
|
const withPushAppDelegate_1 = __importDefault(require("./withPushAppDelegate"));
|
|
9
|
-
const withMainApplication_1 = __importDefault(require("./withMainApplication"));
|
|
10
8
|
const withAndroidPermissions_1 = __importDefault(require("./withAndroidPermissions"));
|
|
11
9
|
const withAndroidManifest_1 = __importDefault(require("./withAndroidManifest"));
|
|
12
10
|
const withiOSInfoPlist_1 = __importDefault(require("./withiOSInfoPlist"));
|
|
@@ -20,11 +18,9 @@ const withStreamVideoReactNativeSDK = (config, props) => {
|
|
|
20
18
|
return (0, config_plugins_1.withPlugins)(config, [
|
|
21
19
|
// ios
|
|
22
20
|
() => (0, withPushAppDelegate_1.default)(config, props),
|
|
23
|
-
withStreamVideoReactNativeSDKAppDelegate_1.default,
|
|
24
21
|
() => (0, withiOSInfoPlist_1.default)(config, props),
|
|
25
22
|
() => (0, withIosScreenCapture_1.default)(config, props),
|
|
26
23
|
// android
|
|
27
|
-
withMainApplication_1.default,
|
|
28
24
|
withAndroidPermissions_1.default,
|
|
29
25
|
withAppBuildGradle_1.default,
|
|
30
26
|
withBuildProperties_1.default,
|
|
@@ -18,6 +18,7 @@ const withStreamVideoReactNativeSDKMainActivity = (configuration, props) => {
|
|
|
18
18
|
*/
|
|
19
19
|
config.modResults.contents = (0, codeMod_1.addImports)(config.modResults.contents, [
|
|
20
20
|
'com.streamvideo.reactnative.StreamVideoReactNative',
|
|
21
|
+
'android.os.Build',
|
|
21
22
|
'android.util.Rational',
|
|
22
23
|
'androidx.lifecycle.Lifecycle',
|
|
23
24
|
'android.app.PictureInPictureParams',
|
|
@@ -43,7 +44,7 @@ function addOnPictureInPictureModeChanged(contents) {
|
|
|
43
44
|
@Override
|
|
44
45
|
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
|
|
45
46
|
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
|
|
46
|
-
if (getLifecycle().getCurrentState() == Lifecycle.State.CREATED) {
|
|
47
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && getLifecycle().getCurrentState() == Lifecycle.State.CREATED) {
|
|
47
48
|
// when user clicks on Close button of PIP
|
|
48
49
|
finishAndRemoveTask();
|
|
49
50
|
} else {
|
|
@@ -31,10 +31,10 @@ RCT_EXPORT_MODULE();
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
+(void)setup {
|
|
34
|
-
RTCDefaultVideoEncoderFactory *videoEncoderFactory = [[RTCDefaultVideoEncoderFactory alloc] init];
|
|
35
|
-
RTCVideoEncoderFactorySimulcast *simulcastVideoEncoderFactory = [[RTCVideoEncoderFactorySimulcast alloc] initWithPrimary:videoEncoderFactory fallback:videoEncoderFactory];
|
|
36
|
-
WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance];
|
|
37
|
-
options.videoEncoderFactory = simulcastVideoEncoderFactory;
|
|
34
|
+
// RTCDefaultVideoEncoderFactory *videoEncoderFactory = [[RTCDefaultVideoEncoderFactory alloc] init];
|
|
35
|
+
// RTCVideoEncoderFactorySimulcast *simulcastVideoEncoderFactory = [[RTCVideoEncoderFactorySimulcast alloc] initWithPrimary:videoEncoderFactory fallback:videoEncoderFactory];
|
|
36
|
+
// WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance];
|
|
37
|
+
// options.videoEncoderFactory = simulcastVideoEncoderFactory;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
-(instancetype)init {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "dist/commonjs/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"!**/.*"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@stream-io/video-client": "^0.
|
|
50
|
-
"@stream-io/video-react-bindings": "^0.3.
|
|
49
|
+
"@stream-io/video-client": "^0.5.0",
|
|
50
|
+
"@stream-io/video-react-bindings": "^0.3.11",
|
|
51
51
|
"intl-pluralrules": "2.0.1",
|
|
52
52
|
"lodash.merge": "^4.6.2",
|
|
53
53
|
"react-native-url-polyfill": "1.3.0",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@react-native-community/push-notification-ios": ">=1.11.0",
|
|
60
60
|
"@react-native-firebase/app": ">=17.5.0",
|
|
61
61
|
"@react-native-firebase/messaging": ">=17.5.0",
|
|
62
|
-
"@stream-io/react-native-webrtc": "
|
|
62
|
+
"@stream-io/react-native-webrtc": "^118.0.1",
|
|
63
63
|
"expo": ">=47.0.0",
|
|
64
64
|
"expo-build-properties": "*",
|
|
65
65
|
"expo-notifications": "*",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"@react-native-community/push-notification-ios": "1.11.0",
|
|
118
118
|
"@react-native-firebase/app": "17.5.0",
|
|
119
119
|
"@react-native-firebase/messaging": "17.5.0",
|
|
120
|
-
"@stream-io/react-native-webrtc": "
|
|
120
|
+
"@stream-io/react-native-webrtc": "118.0.1",
|
|
121
121
|
"@testing-library/jest-native": "^5.4.2",
|
|
122
122
|
"@testing-library/react-native": "^12.1.2",
|
|
123
123
|
"@tsconfig/node14": "14.1.0",
|
|
@@ -2,7 +2,6 @@ import React, { ComponentType } from 'react';
|
|
|
2
2
|
import { StyleSheet, Text, View, ViewStyle } from 'react-native';
|
|
3
3
|
import { MicOff } from '../../../icons';
|
|
4
4
|
import {
|
|
5
|
-
useCall,
|
|
6
5
|
useCallStateHooks,
|
|
7
6
|
useConnectedUser,
|
|
8
7
|
useI18n,
|
|
@@ -66,12 +65,9 @@ export const Lobby = ({
|
|
|
66
65
|
} = useTheme();
|
|
67
66
|
const connectedUser = useConnectedUser();
|
|
68
67
|
const { useCameraState } = useCallStateHooks();
|
|
69
|
-
const { status: cameraStatus } = useCameraState();
|
|
70
|
-
const call = useCall();
|
|
68
|
+
const { status: cameraStatus, mediaStream } = useCameraState();
|
|
71
69
|
const { t } = useI18n();
|
|
72
|
-
const localVideoStream =
|
|
73
|
-
| MediaStream
|
|
74
|
-
| undefined;
|
|
70
|
+
const localVideoStream = mediaStream as unknown as MediaStream | undefined;
|
|
75
71
|
|
|
76
72
|
useCallMediaStreamCleanup();
|
|
77
73
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import React, { PropsWithChildren, useEffect, useState } from 'react';
|
|
1
|
+
import React, { PropsWithChildren, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
3
3
|
import { useAppStateListener } from '../utils/hooks';
|
|
4
4
|
import { NativeModules, Platform } from 'react-native';
|
|
5
|
+
import type { TargetResolution } from '@stream-io/video-client';
|
|
5
6
|
|
|
6
7
|
export type MediaDevicesInitialState = {
|
|
7
8
|
/**
|
|
@@ -31,6 +32,44 @@ export const MediaStreamManagement = ({
|
|
|
31
32
|
}: PropsWithChildren<MediaDevicesInitialState>) => {
|
|
32
33
|
const call = useCall();
|
|
33
34
|
const { useCallSettings } = useCallStateHooks();
|
|
35
|
+
const settings = useCallSettings();
|
|
36
|
+
|
|
37
|
+
// Get the target resolution from the settings and memoize it
|
|
38
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
39
|
+
const targetResolutionSetting = useMemo<TargetResolution | undefined>(() => {
|
|
40
|
+
if (
|
|
41
|
+
settings?.video.target_resolution?.width === undefined ||
|
|
42
|
+
settings?.video.target_resolution?.height === undefined ||
|
|
43
|
+
settings?.video.target_resolution?.bitrate === undefined
|
|
44
|
+
) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
width: settings?.video.target_resolution.width,
|
|
49
|
+
height: settings?.video.target_resolution.height,
|
|
50
|
+
bitrate: settings?.video.target_resolution.bitrate,
|
|
51
|
+
};
|
|
52
|
+
}, [
|
|
53
|
+
settings?.video.target_resolution.width,
|
|
54
|
+
settings?.video.target_resolution.height,
|
|
55
|
+
settings?.video.target_resolution.bitrate,
|
|
56
|
+
]);
|
|
57
|
+
|
|
58
|
+
// Get the target resolution from the default device settings and memoize it
|
|
59
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
60
|
+
const defaultOnSetting = useMemo(() => {
|
|
61
|
+
if (
|
|
62
|
+
settings?.audio.mic_default_on === undefined ||
|
|
63
|
+
settings?.video.camera_default_on === undefined
|
|
64
|
+
) {
|
|
65
|
+
return undefined;
|
|
66
|
+
} else {
|
|
67
|
+
return {
|
|
68
|
+
mic_default_on: settings?.audio.mic_default_on,
|
|
69
|
+
camera_default_on: settings?.video.camera_default_on,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}, [settings?.audio.mic_default_on, settings?.video.camera_default_on]);
|
|
34
73
|
|
|
35
74
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
36
75
|
// To save on CPU resources
|
|
@@ -61,28 +100,26 @@ export const MediaStreamManagement = ({
|
|
|
61
100
|
initialVideoEnabled: undefined,
|
|
62
101
|
});
|
|
63
102
|
|
|
64
|
-
const settings = useCallSettings();
|
|
65
|
-
|
|
66
103
|
// Use backend settings to set initial audio/video enabled state
|
|
67
104
|
// It is applied only if the prop was undefined -- meaning user did not provide any value
|
|
68
105
|
useEffect(() => {
|
|
69
|
-
if (!
|
|
106
|
+
if (!defaultOnSetting) {
|
|
70
107
|
return;
|
|
71
108
|
}
|
|
72
109
|
|
|
73
|
-
const {
|
|
110
|
+
const { mic_default_on, camera_default_on } = defaultOnSetting;
|
|
74
111
|
setInitialDeviceState((prev) => {
|
|
75
112
|
let initAudio = prev.initialAudioEnabled;
|
|
76
113
|
if (typeof propInitialAudioEnabled === 'undefined') {
|
|
77
|
-
initAudio =
|
|
114
|
+
initAudio = mic_default_on;
|
|
78
115
|
}
|
|
79
116
|
let initVideo = prev.initialVideoEnabled;
|
|
80
117
|
if (typeof propInitialVideoEnabled === 'undefined') {
|
|
81
|
-
initVideo =
|
|
118
|
+
initVideo = camera_default_on;
|
|
82
119
|
}
|
|
83
120
|
return { initialAudioEnabled: initAudio, initialVideoEnabled: initVideo };
|
|
84
121
|
});
|
|
85
|
-
}, [propInitialAudioEnabled, propInitialVideoEnabled,
|
|
122
|
+
}, [propInitialAudioEnabled, propInitialVideoEnabled, defaultOnSetting]);
|
|
86
123
|
|
|
87
124
|
// Apply SDK settings to set the initial audio/video enabled state
|
|
88
125
|
useEffect(() => {
|
|
@@ -112,18 +149,24 @@ export const MediaStreamManagement = ({
|
|
|
112
149
|
if (initialVideoEnabled === undefined) {
|
|
113
150
|
return;
|
|
114
151
|
}
|
|
152
|
+
// we wait until we receive the resolution settings from the backend
|
|
153
|
+
if (!call || !targetResolutionSetting) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
|
|
115
157
|
if (initialAudioEnabled) {
|
|
116
|
-
call
|
|
158
|
+
call.microphone.enable();
|
|
117
159
|
} else {
|
|
118
|
-
call
|
|
160
|
+
call.microphone.disable();
|
|
119
161
|
}
|
|
120
162
|
|
|
163
|
+
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
121
164
|
if (initialVideoEnabled) {
|
|
122
|
-
call
|
|
165
|
+
call.camera.enable();
|
|
123
166
|
} else {
|
|
124
|
-
call
|
|
167
|
+
call.camera.disable();
|
|
125
168
|
}
|
|
126
|
-
}, [call, initialAudioEnabled, initialVideoEnabled]);
|
|
169
|
+
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
127
170
|
|
|
128
171
|
return <>{children}</>;
|
|
129
172
|
};
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.3.1';
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
package com.streamvideo.reactnative.video
|
|
2
|
-
|
|
3
|
-
import android.util.Log
|
|
4
|
-
import org.webrtc.EglBase
|
|
5
|
-
import org.webrtc.HardwareVideoEncoderFactory
|
|
6
|
-
import org.webrtc.SimulcastVideoEncoderFactory
|
|
7
|
-
import org.webrtc.SoftwareVideoEncoderFactory
|
|
8
|
-
import org.webrtc.VideoCodecInfo
|
|
9
|
-
import org.webrtc.VideoCodecStatus
|
|
10
|
-
import org.webrtc.VideoEncoder
|
|
11
|
-
import org.webrtc.VideoEncoderFactory
|
|
12
|
-
import org.webrtc.VideoEncoderFallback
|
|
13
|
-
import org.webrtc.VideoFrame
|
|
14
|
-
import org.webrtc.WrappedNativeVideoEncoder
|
|
15
|
-
import java.util.concurrent.Callable
|
|
16
|
-
import java.util.concurrent.ExecutorService
|
|
17
|
-
import java.util.concurrent.Executors
|
|
18
|
-
|
|
19
|
-
/*
|
|
20
|
-
Copyright 2017, Lyo Kato <lyo.kato at gmail.com> (Original Author)
|
|
21
|
-
Copyright 2017-2021, Shiguredo Inc.
|
|
22
|
-
|
|
23
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
24
|
-
you may not use this file except in compliance with the License.
|
|
25
|
-
You may obtain a copy of the License at
|
|
26
|
-
|
|
27
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
28
|
-
|
|
29
|
-
Unless required by applicable law or agreed to in writing, software
|
|
30
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
31
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
32
|
-
See the License for the specific language governing permissions and
|
|
33
|
-
limitations under the License.
|
|
34
|
-
*/
|
|
35
|
-
open class SimulcastVideoEncoderFactoryWrapper(
|
|
36
|
-
sharedContext: EglBase.Context?,
|
|
37
|
-
enableIntelVp8Encoder: Boolean,
|
|
38
|
-
enableH264HighProfile: Boolean
|
|
39
|
-
) : VideoEncoderFactory {
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Factory that prioritizes software encoder.
|
|
43
|
-
*
|
|
44
|
-
* When the selected codec can't be handled by the software encoder,
|
|
45
|
-
* it uses the hardware encoder as a fallback. However, this class is
|
|
46
|
-
* primarily used to address an issue in libwebrtc, and does not have
|
|
47
|
-
* purposeful usecase itself.
|
|
48
|
-
*
|
|
49
|
-
* To use simulcast in libwebrtc, SimulcastEncoderAdapter is used.
|
|
50
|
-
* SimulcastEncoderAdapter takes in a primary and fallback encoder.
|
|
51
|
-
* If HardwareVideoEncoderFactory and SoftwareVideoEncoderFactory are
|
|
52
|
-
* passed in directly as primary and fallback, when H.264 is used,
|
|
53
|
-
* libwebrtc will crash.
|
|
54
|
-
*
|
|
55
|
-
* This is because SoftwareVideoEncoderFactory does not handle H.264,
|
|
56
|
-
* so [SoftwareVideoEncoderFactory.createEncoder] returns null, and
|
|
57
|
-
* the libwebrtc side does not handle nulls, regardless of whether the
|
|
58
|
-
* fallback is actually used or not.
|
|
59
|
-
*
|
|
60
|
-
* To avoid nulls, we simply pass responsibility over to the HardwareVideoEncoderFactory.
|
|
61
|
-
* This results in HardwareVideoEncoderFactory being both the primary and fallback,
|
|
62
|
-
* but there aren't any specific problems in doing so.
|
|
63
|
-
*/
|
|
64
|
-
private class FallbackFactory(private val hardwareVideoEncoderFactory: VideoEncoderFactory) :
|
|
65
|
-
VideoEncoderFactory {
|
|
66
|
-
|
|
67
|
-
private val softwareVideoEncoderFactory: VideoEncoderFactory = SoftwareVideoEncoderFactory()
|
|
68
|
-
|
|
69
|
-
override fun createEncoder(info: VideoCodecInfo): VideoEncoder? {
|
|
70
|
-
val softwareEncoder = softwareVideoEncoderFactory.createEncoder(info)
|
|
71
|
-
val hardwareEncoder = hardwareVideoEncoderFactory.createEncoder(info)
|
|
72
|
-
return if (hardwareEncoder != null && softwareEncoder != null) {
|
|
73
|
-
VideoEncoderFallback(hardwareEncoder, softwareEncoder)
|
|
74
|
-
} else {
|
|
75
|
-
softwareEncoder ?: hardwareEncoder
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
override fun getSupportedCodecs(): Array<VideoCodecInfo> {
|
|
80
|
-
val supportedCodecInfos: MutableList<VideoCodecInfo> = mutableListOf()
|
|
81
|
-
supportedCodecInfos.addAll(softwareVideoEncoderFactory.supportedCodecs)
|
|
82
|
-
supportedCodecInfos.addAll(hardwareVideoEncoderFactory.supportedCodecs)
|
|
83
|
-
return supportedCodecInfos.toTypedArray()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Wraps each stream encoder and performs the following:
|
|
90
|
-
* - Starts up a single thread
|
|
91
|
-
* - When the width/height from [initEncode] doesn't match the frame buffer's,
|
|
92
|
-
* scales the frame prior to encoding.
|
|
93
|
-
* - Always calls the encoder on the thread.
|
|
94
|
-
*/
|
|
95
|
-
private class StreamEncoderWrapper(private val encoder: VideoEncoder) : VideoEncoder {
|
|
96
|
-
|
|
97
|
-
val executor: ExecutorService = Executors.newSingleThreadExecutor()
|
|
98
|
-
var streamSettings: VideoEncoder.Settings? = null
|
|
99
|
-
|
|
100
|
-
override fun initEncode(
|
|
101
|
-
settings: VideoEncoder.Settings,
|
|
102
|
-
callback: VideoEncoder.Callback?
|
|
103
|
-
): VideoCodecStatus {
|
|
104
|
-
streamSettings = settings
|
|
105
|
-
val future = executor.submit(Callable {
|
|
106
|
-
Log.i(
|
|
107
|
-
"SimulVideoEncoderFac",
|
|
108
|
-
"""initEncode() thread=${Thread.currentThread().name} [${Thread.currentThread().id}]
|
|
109
|
-
| encoder=${encoder.implementationName}
|
|
110
|
-
| streamSettings:
|
|
111
|
-
| numberOfCores=${settings.numberOfCores}
|
|
112
|
-
| width=${settings.width}
|
|
113
|
-
| height=${settings.height}
|
|
114
|
-
| startBitrate=${settings.startBitrate}
|
|
115
|
-
| maxFramerate=${settings.maxFramerate}
|
|
116
|
-
| automaticResizeOn=${settings.automaticResizeOn}
|
|
117
|
-
| numberOfSimulcastStreams=${settings.numberOfSimulcastStreams}
|
|
118
|
-
| lossNotification=${settings.capabilities.lossNotification}
|
|
119
|
-
""".trimMargin()
|
|
120
|
-
)
|
|
121
|
-
return@Callable encoder.initEncode(settings, callback)
|
|
122
|
-
})
|
|
123
|
-
return future.get()
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
override fun release(): VideoCodecStatus {
|
|
127
|
-
val future = executor.submit(Callable { return@Callable encoder.release() })
|
|
128
|
-
return future.get()
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
override fun encode(
|
|
132
|
-
frame: VideoFrame,
|
|
133
|
-
encodeInfo: VideoEncoder.EncodeInfo?
|
|
134
|
-
): VideoCodecStatus {
|
|
135
|
-
val future = executor.submit(Callable {
|
|
136
|
-
//LKLog.d { "encode() buffer=${frame.buffer}, thread=${Thread.currentThread().name} " +
|
|
137
|
-
// "[${Thread.currentThread().id}]" }
|
|
138
|
-
if (streamSettings == null) {
|
|
139
|
-
return@Callable encoder.encode(frame, encodeInfo)
|
|
140
|
-
} else if (frame.buffer.width == streamSettings!!.width) {
|
|
141
|
-
return@Callable encoder.encode(frame, encodeInfo)
|
|
142
|
-
} else {
|
|
143
|
-
// The incoming buffer is different than the streamSettings received in initEncode()
|
|
144
|
-
// Need to scale.
|
|
145
|
-
val originalBuffer = frame.buffer
|
|
146
|
-
// TODO: Do we need to handle when the scale factor is weird?
|
|
147
|
-
val adaptedBuffer = originalBuffer.cropAndScale(
|
|
148
|
-
0, 0, originalBuffer.width, originalBuffer.height,
|
|
149
|
-
streamSettings!!.width, streamSettings!!.height
|
|
150
|
-
)
|
|
151
|
-
val adaptedFrame = VideoFrame(adaptedBuffer, frame.rotation, frame.timestampNs)
|
|
152
|
-
val result = encoder.encode(adaptedFrame, encodeInfo)
|
|
153
|
-
adaptedBuffer.release()
|
|
154
|
-
return@Callable result
|
|
155
|
-
}
|
|
156
|
-
})
|
|
157
|
-
return future.get()
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
override fun setRateAllocation(
|
|
161
|
-
allocation: VideoEncoder.BitrateAllocation?,
|
|
162
|
-
frameRate: Int
|
|
163
|
-
): VideoCodecStatus {
|
|
164
|
-
val future = executor.submit(Callable {
|
|
165
|
-
return@Callable encoder.setRateAllocation(
|
|
166
|
-
allocation,
|
|
167
|
-
frameRate
|
|
168
|
-
)
|
|
169
|
-
})
|
|
170
|
-
return future.get()
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
override fun getScalingSettings(): VideoEncoder.ScalingSettings {
|
|
174
|
-
val future = executor.submit(Callable { return@Callable encoder.scalingSettings })
|
|
175
|
-
return future.get()
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
override fun getImplementationName(): String {
|
|
179
|
-
val future = executor.submit(Callable { return@Callable encoder.implementationName })
|
|
180
|
-
return future.get()
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
override fun createNativeVideoEncoder(): Long {
|
|
184
|
-
val future = executor.submit(Callable { return@Callable encoder.createNativeVideoEncoder() })
|
|
185
|
-
return future.get()
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
override fun isHardwareEncoder(): Boolean {
|
|
189
|
-
val future = executor.submit(Callable { return@Callable encoder.isHardwareEncoder })
|
|
190
|
-
return future.get()
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
override fun setRates(rcParameters: VideoEncoder.RateControlParameters?): VideoCodecStatus {
|
|
194
|
-
val future = executor.submit(Callable { return@Callable encoder.setRates(rcParameters) })
|
|
195
|
-
return future.get()
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
override fun getResolutionBitrateLimits(): Array<VideoEncoder.ResolutionBitrateLimits> {
|
|
199
|
-
val future = executor.submit(Callable { return@Callable encoder.resolutionBitrateLimits })
|
|
200
|
-
return future.get()
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
override fun getEncoderInfo(): VideoEncoder.EncoderInfo {
|
|
204
|
-
val future = executor.submit(Callable { return@Callable encoder.encoderInfo })
|
|
205
|
-
return future.get()
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
private class StreamEncoderWrapperFactory(private val factory: VideoEncoderFactory) :
|
|
210
|
-
VideoEncoderFactory {
|
|
211
|
-
override fun createEncoder(videoCodecInfo: VideoCodecInfo?): VideoEncoder? {
|
|
212
|
-
val encoder = factory.createEncoder(videoCodecInfo)
|
|
213
|
-
if (encoder == null) {
|
|
214
|
-
return null
|
|
215
|
-
}
|
|
216
|
-
if (encoder is WrappedNativeVideoEncoder) {
|
|
217
|
-
return encoder
|
|
218
|
-
}
|
|
219
|
-
return StreamEncoderWrapper(encoder)
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
override fun getSupportedCodecs(): Array<VideoCodecInfo> {
|
|
223
|
-
return factory.supportedCodecs
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
private val primary: VideoEncoderFactory
|
|
229
|
-
private val fallback: VideoEncoderFactory
|
|
230
|
-
private val native: SimulcastVideoEncoderFactory
|
|
231
|
-
|
|
232
|
-
init {
|
|
233
|
-
val hardwareVideoEncoderFactory = HardwareVideoEncoderFactory(
|
|
234
|
-
sharedContext, enableIntelVp8Encoder, enableH264HighProfile
|
|
235
|
-
)
|
|
236
|
-
primary = StreamEncoderWrapperFactory(hardwareVideoEncoderFactory)
|
|
237
|
-
fallback = StreamEncoderWrapperFactory(FallbackFactory(primary))
|
|
238
|
-
native = SimulcastVideoEncoderFactory(primary, fallback)
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
override fun createEncoder(info: VideoCodecInfo?): VideoEncoder? {
|
|
242
|
-
return native.createEncoder(info)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
override fun getSupportedCodecs(): Array<VideoCodecInfo> {
|
|
246
|
-
return native.supportedCodecs
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
}
|
package/android/src/main/java/com/streamvideo/reactnative/video/WrappedVideoDecoderFactoryProxy.kt
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
package com.streamvideo.reactnative.video
|
|
2
|
-
|
|
3
|
-
import com.oney.WebRTCModule.EglUtils
|
|
4
|
-
import org.webrtc.VideoCodecInfo
|
|
5
|
-
import org.webrtc.VideoDecoder
|
|
6
|
-
import org.webrtc.VideoDecoderFactory
|
|
7
|
-
import org.webrtc.WrappedVideoDecoderFactory
|
|
8
|
-
|
|
9
|
-
class WrappedVideoDecoderFactoryProxy : VideoDecoderFactory {
|
|
10
|
-
|
|
11
|
-
private val factory by lazy { WrappedVideoDecoderFactory(EglUtils.getRootEglBaseContext()) }
|
|
12
|
-
override fun createDecoder(codecInfo: VideoCodecInfo): VideoDecoder? {
|
|
13
|
-
return factory.createDecoder(codecInfo)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
override fun getSupportedCodecs(): Array<VideoCodecInfo> {
|
|
17
|
-
return factory.supportedCodecs
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const config_plugins_1 = require("@expo/config-plugins");
|
|
4
|
-
const codeMod_1 = require("@expo/config-plugins/build/android/codeMod");
|
|
5
|
-
const withStreamVideoReactNativeSDKMainApplication = (configuration) => {
|
|
6
|
-
return (0, config_plugins_1.withMainApplication)(configuration, (config) => {
|
|
7
|
-
if (['java', 'kt'].includes(config.modResults.language)) {
|
|
8
|
-
try {
|
|
9
|
-
config.modResults.contents = (0, codeMod_1.addImports)(config.modResults.contents, ['com.streamvideo.reactnative.StreamVideoReactNative'], config.modResults.language === 'java');
|
|
10
|
-
const statementToInsert = 'StreamVideoReactNative.setup();\n';
|
|
11
|
-
if (!config.modResults.contents.includes(statementToInsert)) {
|
|
12
|
-
config.modResults.contents = (0, codeMod_1.appendContentsInsideDeclarationBlock)(config.modResults.contents, 'onCreate', statementToInsert);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
catch (error) {
|
|
16
|
-
throw new Error("Cannot add StreamVideoReactNativeSDK to the project's MainApplication because it's malformed.");
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
throw new Error('Cannot setup StreamVideoReactNativeSDK because the MainApplication is not in Java/Kotlin');
|
|
21
|
-
}
|
|
22
|
-
return config;
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
exports.default = withStreamVideoReactNativeSDKMainApplication;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const config_plugins_1 = require("@expo/config-plugins");
|
|
4
|
-
const codeMod_1 = require("@expo/config-plugins/build/ios/codeMod");
|
|
5
|
-
const withStreamVideoReactNativeSDKAppDelegate = (configuration) => {
|
|
6
|
-
return (0, config_plugins_1.withAppDelegate)(configuration, (config) => {
|
|
7
|
-
if (['objc', 'objcpp'].includes(config.modResults.language)) {
|
|
8
|
-
config.modResults.contents = (0, codeMod_1.addObjcImports)(config.modResults.contents, [
|
|
9
|
-
'"StreamVideoReactNative.h"',
|
|
10
|
-
]);
|
|
11
|
-
const setupMethod = '[StreamVideoReactNative setup];';
|
|
12
|
-
if (!config.modResults.contents.includes(setupMethod)) {
|
|
13
|
-
config.modResults.contents = (0, codeMod_1.insertContentsInsideObjcFunctionBlock)(config.modResults.contents, 'application:didFinishLaunchingWithOptions:', setupMethod, { position: 'head' });
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
throw new Error('Cannot setup StreamVideoReactNativeSDK because the AppDelegate is not Objective C');
|
|
18
|
-
}
|
|
19
|
-
return config;
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
exports.default = withStreamVideoReactNativeSDKAppDelegate;
|