@stream-io/video-react-native-sdk 1.22.1-alpha.0 → 1.22.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 +2816 -0
- package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js +79 -0
- package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js.map +1 -0
- package/dist/commonjs/components/Participant/ParticipantView/{VideoRenderer.js → VideoRenderer/index.js} +16 -88
- package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -0
- package/dist/commonjs/version.js +1 -1
- package/dist/commonjs/version.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js +73 -0
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js.map +1 -0
- package/dist/module/components/Participant/ParticipantView/{VideoRenderer.js → VideoRenderer/index.js} +16 -89
- package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -0
- package/dist/module/version.js +1 -1
- package/dist/module/version.js.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.d.ts +25 -0
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.d.ts.map +1 -0
- package/dist/typescript/components/Participant/ParticipantView/{VideoRenderer.d.ts → VideoRenderer/index.d.ts} +2 -2
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts.map +1 -0
- package/dist/typescript/version.d.ts +1 -1
- package/dist/typescript/version.d.ts.map +1 -1
- package/ios/StreamInCallManager.swift +40 -40
- package/package.json +6 -6
- package/src/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.tsx +125 -0
- package/src/components/Participant/ParticipantView/{VideoRenderer.tsx → VideoRenderer/index.tsx} +18 -107
- package/src/version.ts +1 -1
- package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer.js.map +0 -1
- package/dist/module/components/Participant/ParticipantView/VideoRenderer.js.map +0 -1
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer.d.ts.map +0 -1
- package/ios/StreamVideoReactNative.xcodeproj/project.xcworkspace/xcuserdata/santhoshvaiyapuri.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/StreamVideoReactNative.xcodeproj/xcuserdata/santhoshvaiyapuri.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
|
@@ -19,6 +19,8 @@ enum DefaultAudioDevice {
|
|
|
19
19
|
@objc(StreamInCallManager)
|
|
20
20
|
class StreamInCallManager: RCTEventEmitter {
|
|
21
21
|
|
|
22
|
+
private let audioSessionQueue = DispatchQueue(label: "io.getstream.rn.audioSessionQueue")
|
|
23
|
+
|
|
22
24
|
private var audioManagerActivated = false
|
|
23
25
|
private var callAudioRole: CallAudioRole = .communicator
|
|
24
26
|
private var defaultAudioDevice: DefaultAudioDevice = .speaker
|
|
@@ -44,55 +46,60 @@ class StreamInCallManager: RCTEventEmitter {
|
|
|
44
46
|
|
|
45
47
|
@objc(setAudioRole:)
|
|
46
48
|
func setAudioRole(audioRole: String) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
audioSessionQueue.async { [self] in
|
|
50
|
+
if audioManagerActivated {
|
|
51
|
+
log("AudioManager is already activated, audio role cannot be changed.")
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
self.callAudioRole = audioRole.lowercased() == "listener" ? .listener : .communicator
|
|
50
55
|
}
|
|
51
|
-
self.callAudioRole = audioRole.lowercased() == "listener" ? .listener : .communicator
|
|
52
|
-
|
|
53
56
|
}
|
|
54
57
|
|
|
55
58
|
@objc(setDefaultAudioDeviceEndpointType:)
|
|
56
59
|
func setDefaultAudioDeviceEndpointType(endpointType: String) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
audioSessionQueue.async { [self] in
|
|
61
|
+
if audioManagerActivated {
|
|
62
|
+
log("AudioManager is already activated, default audio device cannot be changed.")
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
self.defaultAudioDevice = endpointType.lowercased() == "earpiece" ? .earpiece : .speaker
|
|
60
66
|
}
|
|
61
|
-
self.defaultAudioDevice = endpointType.lowercased() == "earpiece" ? .earpiece : .speaker
|
|
62
|
-
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
@objc
|
|
66
70
|
func start() {
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
audioSessionQueue.async { [self] in
|
|
72
|
+
if audioManagerActivated {
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
let session = AVAudioSession.sharedInstance()
|
|
76
|
+
previousAudioSessionState = AudioSessionState(
|
|
77
|
+
category: session.category,
|
|
78
|
+
mode: session.mode,
|
|
79
|
+
options: session.categoryOptions
|
|
80
|
+
)
|
|
81
|
+
configureAudioSession()
|
|
82
|
+
audioManagerActivated = true
|
|
69
83
|
}
|
|
70
|
-
let session = AVAudioSession.sharedInstance()
|
|
71
|
-
previousAudioSessionState = AudioSessionState(
|
|
72
|
-
category: session.category,
|
|
73
|
-
mode: session.mode,
|
|
74
|
-
options: session.categoryOptions
|
|
75
|
-
)
|
|
76
|
-
configureAudioSession()
|
|
77
|
-
audioManagerActivated = true
|
|
78
84
|
}
|
|
79
85
|
|
|
80
86
|
@objc
|
|
81
87
|
func stop() {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
let
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
audioSessionQueue.async { [self] in
|
|
89
|
+
if !audioManagerActivated {
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
if let prev = previousAudioSessionState {
|
|
93
|
+
let session = AVAudioSession.sharedInstance()
|
|
94
|
+
do {
|
|
95
|
+
try session.setCategory(prev.category, mode: prev.mode, options: prev.options)
|
|
96
|
+
} catch {
|
|
97
|
+
log("Error restoring previous audio session: \(error.localizedDescription)")
|
|
98
|
+
}
|
|
99
|
+
previousAudioSessionState = nil
|
|
91
100
|
}
|
|
92
|
-
|
|
101
|
+
audioManagerActivated = false
|
|
93
102
|
}
|
|
94
|
-
audioManagerActivated = false
|
|
95
|
-
|
|
96
103
|
}
|
|
97
104
|
|
|
98
105
|
private func configureAudioSession() {
|
|
@@ -135,9 +142,6 @@ class StreamInCallManager: RCTEventEmitter {
|
|
|
135
142
|
|
|
136
143
|
if currentCategory != intendedCategory.rawValue || currentMode != intendedMode.rawValue || currentOptions != intendedOptions || !currentIsActive {
|
|
137
144
|
session.lockForConfiguration()
|
|
138
|
-
defer {
|
|
139
|
-
session.unlockForConfiguration()
|
|
140
|
-
}
|
|
141
145
|
do {
|
|
142
146
|
try session.setCategory(intendedCategory, mode: intendedMode, options: intendedOptions)
|
|
143
147
|
try session.setActive(true)
|
|
@@ -152,6 +156,7 @@ class StreamInCallManager: RCTEventEmitter {
|
|
|
152
156
|
log("configureAudioSession: Error setting mode: \(error.localizedDescription)")
|
|
153
157
|
}
|
|
154
158
|
}
|
|
159
|
+
session.unlockForConfiguration()
|
|
155
160
|
} else {
|
|
156
161
|
log("configureAudioSession: no change needed")
|
|
157
162
|
}
|
|
@@ -290,11 +295,6 @@ class StreamInCallManager: RCTEventEmitter {
|
|
|
290
295
|
}
|
|
291
296
|
}
|
|
292
297
|
|
|
293
|
-
@objc
|
|
294
|
-
func methodQueue() -> DispatchQueue {
|
|
295
|
-
return DispatchQueue(label: "io.getstream.rn.audioSessionQueue", qos: .userInitiated)
|
|
296
|
-
}
|
|
297
|
-
|
|
298
298
|
// MARK: - Logging Helper
|
|
299
299
|
private func log(_ message: String) {
|
|
300
300
|
NSLog("InCallManager: %@", message)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "1.22.1
|
|
3
|
+
"version": "1.22.1",
|
|
4
4
|
"description": "Stream Video SDK for React Native",
|
|
5
5
|
"author": "https://getstream.io",
|
|
6
6
|
"homepage": "https://getstream.io/video/docs/react-native/",
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"!**/.*"
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@stream-io/video-client": "1.34.
|
|
49
|
-
"@stream-io/video-react-bindings": "1.10.
|
|
48
|
+
"@stream-io/video-client": "1.34.1",
|
|
49
|
+
"@stream-io/video-react-bindings": "1.10.1",
|
|
50
50
|
"intl-pluralrules": "2.0.1",
|
|
51
51
|
"lodash.merge": "^4.6.2",
|
|
52
52
|
"react-native-url-polyfill": "^3.0.0",
|
|
@@ -125,9 +125,9 @@
|
|
|
125
125
|
"@react-native-firebase/app": "^23.4.0",
|
|
126
126
|
"@react-native-firebase/messaging": "^23.4.0",
|
|
127
127
|
"@react-native/babel-preset": "^0.81.4",
|
|
128
|
-
"@stream-io/noise-cancellation-react-native": "
|
|
128
|
+
"@stream-io/noise-cancellation-react-native": "^0.4.0",
|
|
129
129
|
"@stream-io/react-native-webrtc": "125.4.4",
|
|
130
|
-
"@stream-io/video-filters-react-native": "
|
|
130
|
+
"@stream-io/video-filters-react-native": "^0.8.0",
|
|
131
131
|
"@testing-library/jest-native": "^5.4.3",
|
|
132
132
|
"@testing-library/react-native": "13.3.3",
|
|
133
133
|
"@tsconfig/node18": "^18.2.4",
|
|
@@ -162,4 +162,4 @@
|
|
|
162
162
|
"typescript"
|
|
163
163
|
]
|
|
164
164
|
}
|
|
165
|
-
}
|
|
165
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { forwardRef, useImperativeHandle, useEffect, useMemo } from 'react';
|
|
2
|
+
import { LayoutChangeEvent } from 'react-native';
|
|
3
|
+
import {
|
|
4
|
+
Call,
|
|
5
|
+
CallingState,
|
|
6
|
+
hasScreenShare,
|
|
7
|
+
hasVideo,
|
|
8
|
+
SfuModels,
|
|
9
|
+
type VideoTrackType,
|
|
10
|
+
DebounceType,
|
|
11
|
+
} from '@stream-io/video-client';
|
|
12
|
+
import {
|
|
13
|
+
BehaviorSubject,
|
|
14
|
+
combineLatest,
|
|
15
|
+
distinctUntilChanged,
|
|
16
|
+
distinctUntilKeyChanged,
|
|
17
|
+
map,
|
|
18
|
+
takeWhile,
|
|
19
|
+
} from 'rxjs';
|
|
20
|
+
export type TrackSubscriberHandle = {
|
|
21
|
+
onLayoutUpdate: (event: LayoutChangeEvent) => void;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
type TrackSubscriberProps = {
|
|
25
|
+
participantSessionId: string;
|
|
26
|
+
call: Call;
|
|
27
|
+
trackType: VideoTrackType;
|
|
28
|
+
isVisible: boolean;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This component is used to subscribe to the video + audio track of the participant in the following cases:
|
|
33
|
+
* 1. When the participant starts publishing the video track
|
|
34
|
+
* 2. When the participant changes the video track dimensions
|
|
35
|
+
* 3. When the participant becomes visible
|
|
36
|
+
* 4. On joined callingState, this handles reconnection
|
|
37
|
+
|
|
38
|
+
* This component is used to unsubscribe to video track and subscribe only to the audio track of the participant (by passing undefined dimensions) in the following cases:
|
|
39
|
+
* 1. When the participant stops publishing the video track
|
|
40
|
+
* 2. When the participant becomes invisible
|
|
41
|
+
*/
|
|
42
|
+
const TrackSubscriber = forwardRef<TrackSubscriberHandle, TrackSubscriberProps>(
|
|
43
|
+
(props, ref) => {
|
|
44
|
+
const { call, participantSessionId, trackType, isVisible } = props;
|
|
45
|
+
const dimensions$ = useMemo(() => {
|
|
46
|
+
return new BehaviorSubject<SfuModels.VideoDimension | undefined>(
|
|
47
|
+
undefined,
|
|
48
|
+
);
|
|
49
|
+
}, []);
|
|
50
|
+
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
const requestTrackWithDimensions = (
|
|
53
|
+
debounceType: DebounceType,
|
|
54
|
+
dimension: SfuModels.VideoDimension | undefined,
|
|
55
|
+
) => {
|
|
56
|
+
if (dimension && (dimension.width === 0 || dimension.height === 0)) {
|
|
57
|
+
// ignore 0x0 dimensions. this can happen when the video element
|
|
58
|
+
// is not visible (e.g., has display: none).
|
|
59
|
+
// we treat this as "unsubscription" as we don't want to keep
|
|
60
|
+
// consuming bandwidth for a video that is not visible on the screen.
|
|
61
|
+
dimension = undefined;
|
|
62
|
+
}
|
|
63
|
+
call.state.updateParticipantTracks(trackType, {
|
|
64
|
+
[participantSessionId]: { dimension },
|
|
65
|
+
});
|
|
66
|
+
call.dynascaleManager.applyTrackSubscriptions(debounceType);
|
|
67
|
+
};
|
|
68
|
+
const isPublishingTrack$ = call.state.participants$.pipe(
|
|
69
|
+
map((ps) => ps.find((p) => p.sessionId === participantSessionId)),
|
|
70
|
+
takeWhile((p) => !!p),
|
|
71
|
+
distinctUntilChanged(),
|
|
72
|
+
distinctUntilKeyChanged('publishedTracks'),
|
|
73
|
+
map((p) =>
|
|
74
|
+
trackType === 'videoTrack' ? hasVideo(p) : hasScreenShare(p),
|
|
75
|
+
),
|
|
76
|
+
distinctUntilChanged(),
|
|
77
|
+
);
|
|
78
|
+
const isJoinedState$ = call.state.callingState$.pipe(
|
|
79
|
+
map((callingState) => callingState === CallingState.JOINED),
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
const subscription = combineLatest([
|
|
83
|
+
dimensions$,
|
|
84
|
+
isPublishingTrack$,
|
|
85
|
+
isJoinedState$,
|
|
86
|
+
]).subscribe(([dimension, isPublishing, isJoined]) => {
|
|
87
|
+
if (isJoined && isPublishing && !isVisible) {
|
|
88
|
+
// the participant is publishing and we are not visible, so we unsubscribe from the video track
|
|
89
|
+
requestTrackWithDimensions(DebounceType.FAST, undefined);
|
|
90
|
+
} else if (isJoined && isPublishing && isVisible && dimension) {
|
|
91
|
+
// the participant is publishing and we are visible and have valid dimensions, so we subscribe to the video track
|
|
92
|
+
requestTrackWithDimensions(DebounceType.IMMEDIATE, dimension);
|
|
93
|
+
} else if (isJoined && !isPublishing) {
|
|
94
|
+
// the participant stopped publishing a track, so we unsubscribe from the video track
|
|
95
|
+
requestTrackWithDimensions(DebounceType.FAST, undefined);
|
|
96
|
+
}
|
|
97
|
+
// if isPublishing but no dimension yet, we wait for dimensions
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
return () => {
|
|
101
|
+
subscription.unsubscribe();
|
|
102
|
+
};
|
|
103
|
+
}, [call, participantSessionId, trackType, isVisible, dimensions$]);
|
|
104
|
+
|
|
105
|
+
useImperativeHandle(
|
|
106
|
+
ref,
|
|
107
|
+
() => ({
|
|
108
|
+
onLayoutUpdate: (event) => {
|
|
109
|
+
const dimension = {
|
|
110
|
+
width: Math.trunc(event.nativeEvent.layout.width),
|
|
111
|
+
height: Math.trunc(event.nativeEvent.layout.height),
|
|
112
|
+
};
|
|
113
|
+
dimensions$.next(dimension);
|
|
114
|
+
},
|
|
115
|
+
}),
|
|
116
|
+
[dimensions$],
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
return null;
|
|
120
|
+
},
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
TrackSubscriber.displayName = 'TrackSubscriber';
|
|
124
|
+
|
|
125
|
+
export default TrackSubscriber;
|
package/src/components/Participant/ParticipantView/{VideoRenderer.tsx → VideoRenderer/index.tsx}
RENAMED
|
@@ -2,21 +2,20 @@ import React, { useEffect, useRef } from 'react';
|
|
|
2
2
|
import { Platform, StyleSheet, View } from 'react-native';
|
|
3
3
|
import type { MediaStream } from '@stream-io/react-native-webrtc';
|
|
4
4
|
import { RTCView } from '@stream-io/react-native-webrtc';
|
|
5
|
-
import type { ParticipantViewProps } from '
|
|
5
|
+
import type { ParticipantViewProps } from '../ParticipantView';
|
|
6
6
|
import {
|
|
7
|
-
CallingState,
|
|
8
7
|
hasPausedTrack,
|
|
9
8
|
hasScreenShare,
|
|
10
9
|
hasVideo,
|
|
11
|
-
SfuModels,
|
|
12
10
|
type VideoTrackType,
|
|
13
11
|
VisibilityState,
|
|
14
12
|
} from '@stream-io/video-client';
|
|
15
13
|
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
16
|
-
import { ParticipantVideoFallback as DefaultParticipantVideoFallback } from '
|
|
17
|
-
import { useTheme } from '
|
|
18
|
-
import { useTrackDimensions } from '
|
|
19
|
-
import { useScreenshotIosContext } from '
|
|
14
|
+
import { ParticipantVideoFallback as DefaultParticipantVideoFallback } from '../ParticipantVideoFallback';
|
|
15
|
+
import { useTheme } from '../../../../contexts/ThemeContext';
|
|
16
|
+
import { useTrackDimensions } from '../../../../hooks/useTrackDimensions';
|
|
17
|
+
import { useScreenshotIosContext } from '../../../../contexts/internal/ScreenshotIosContext';
|
|
18
|
+
import TrackSubscriber, { TrackSubscriberHandle } from './TrackSubscriber';
|
|
20
19
|
|
|
21
20
|
const DEFAULT_VIEWPORT_VISIBILITY_STATE: Record<
|
|
22
21
|
VideoTrackType,
|
|
@@ -56,16 +55,9 @@ export const VideoRenderer = ({
|
|
|
56
55
|
theme: { videoRenderer },
|
|
57
56
|
} = useTheme();
|
|
58
57
|
const call = useCall();
|
|
59
|
-
const {
|
|
60
|
-
|
|
58
|
+
const { useCameraState, useIncomingVideoSettings } = useCallStateHooks();
|
|
59
|
+
const trackSubscriberRef = useRef<TrackSubscriberHandle>(null);
|
|
61
60
|
const { isParticipantVideoEnabled } = useIncomingVideoSettings();
|
|
62
|
-
const callingState = useCallCallingState();
|
|
63
|
-
const pendingVideoLayoutRef = useRef<SfuModels.VideoDimension | undefined>(
|
|
64
|
-
undefined,
|
|
65
|
-
);
|
|
66
|
-
const subscribedVideoLayoutRef = useRef<SfuModels.VideoDimension | undefined>(
|
|
67
|
-
undefined,
|
|
68
|
-
);
|
|
69
61
|
const { direction } = useCameraState();
|
|
70
62
|
const viewRef = useRef(null);
|
|
71
63
|
const {
|
|
@@ -91,7 +83,6 @@ export const VideoRenderer = ({
|
|
|
91
83
|
? hasScreenShare(participant)
|
|
92
84
|
: hasVideo(participant);
|
|
93
85
|
|
|
94
|
-
const hasJoinedCall = callingState === CallingState.JOINED;
|
|
95
86
|
const videoStreamToRender = (isScreenSharing
|
|
96
87
|
? screenShareStream
|
|
97
88
|
: videoStream) as unknown as MediaStream | undefined;
|
|
@@ -179,11 +170,6 @@ export const VideoRenderer = ({
|
|
|
179
170
|
},
|
|
180
171
|
}));
|
|
181
172
|
}
|
|
182
|
-
if (subscribedVideoLayoutRef.current) {
|
|
183
|
-
// when video is enabled again, we want to use the last subscribed dimension to resubscribe
|
|
184
|
-
pendingVideoLayoutRef.current = subscribedVideoLayoutRef.current;
|
|
185
|
-
subscribedVideoLayoutRef.current = undefined;
|
|
186
|
-
}
|
|
187
173
|
}
|
|
188
174
|
}, [
|
|
189
175
|
sessionId,
|
|
@@ -194,94 +180,10 @@ export const VideoRenderer = ({
|
|
|
194
180
|
isLocalParticipant,
|
|
195
181
|
]);
|
|
196
182
|
|
|
197
|
-
useEffect(() => {
|
|
198
|
-
if (!hasJoinedCall && subscribedVideoLayoutRef.current) {
|
|
199
|
-
// when call is joined again, we want to use the last subscribed dimension to resubscribe
|
|
200
|
-
pendingVideoLayoutRef.current = subscribedVideoLayoutRef.current;
|
|
201
|
-
subscribedVideoLayoutRef.current = undefined;
|
|
202
|
-
}
|
|
203
|
-
}, [hasJoinedCall]);
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* This effect updates the subscription either
|
|
207
|
-
* 1. when video tracks are published and was unpublished before
|
|
208
|
-
* 2. when the view's visibility changes
|
|
209
|
-
* 3. when call was rejoined
|
|
210
|
-
*/
|
|
211
|
-
useEffect(() => {
|
|
212
|
-
if (!call || isLocalParticipant) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
// NOTE: We only want to update the subscription if the pendingVideoLayoutRef is set
|
|
216
|
-
const updateIsNeeded = pendingVideoLayoutRef.current;
|
|
217
|
-
|
|
218
|
-
if (!updateIsNeeded || !isPublishingVideoTrack || !hasJoinedCall) {
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// NOTE: When the view is not visible, we want to subscribe to audio only.
|
|
223
|
-
// We unsubscribe their video by setting the dimension to undefined
|
|
224
|
-
const dimension = isVisible ? pendingVideoLayoutRef.current : undefined;
|
|
225
|
-
call.state.updateParticipantTracks(trackType, {
|
|
226
|
-
[sessionId]: { dimension },
|
|
227
|
-
});
|
|
228
|
-
call.dynascaleManager.applyTrackSubscriptions();
|
|
229
|
-
|
|
230
|
-
if (dimension) {
|
|
231
|
-
subscribedVideoLayoutRef.current = pendingVideoLayoutRef.current;
|
|
232
|
-
pendingVideoLayoutRef.current = undefined;
|
|
233
|
-
}
|
|
234
|
-
}, [
|
|
235
|
-
call,
|
|
236
|
-
isPublishingVideoTrack,
|
|
237
|
-
trackType,
|
|
238
|
-
isVisible,
|
|
239
|
-
sessionId,
|
|
240
|
-
hasJoinedCall,
|
|
241
|
-
isLocalParticipant,
|
|
242
|
-
]);
|
|
243
|
-
|
|
244
|
-
useEffect(() => {
|
|
245
|
-
return () => {
|
|
246
|
-
subscribedVideoLayoutRef.current = undefined;
|
|
247
|
-
pendingVideoLayoutRef.current = undefined;
|
|
248
|
-
};
|
|
249
|
-
}, [trackType, sessionId]);
|
|
250
|
-
|
|
251
183
|
const onLayout: React.ComponentProps<typeof RTCView>['onLayout'] = (
|
|
252
184
|
event,
|
|
253
185
|
) => {
|
|
254
|
-
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const dimension = {
|
|
258
|
-
width: Math.trunc(event.nativeEvent.layout.width),
|
|
259
|
-
height: Math.trunc(event.nativeEvent.layout.height),
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
// NOTE: If the participant hasn't published a video track yet,
|
|
263
|
-
// or the view is not viewable, we store the dimensions and handle it
|
|
264
|
-
// when the track is published or the video is enabled.
|
|
265
|
-
if (!isPublishingVideoTrack || !isVisible || !hasJoinedCall) {
|
|
266
|
-
pendingVideoLayoutRef.current = dimension;
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// NOTE: We don't want to update the subscription if the dimension hasn't changed
|
|
271
|
-
if (
|
|
272
|
-
subscribedVideoLayoutRef.current?.width === dimension.width &&
|
|
273
|
-
subscribedVideoLayoutRef.current?.height === dimension.height
|
|
274
|
-
) {
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
call.state.updateParticipantTracks(trackType, {
|
|
278
|
-
[sessionId]: {
|
|
279
|
-
dimension,
|
|
280
|
-
},
|
|
281
|
-
});
|
|
282
|
-
call.dynascaleManager.applyTrackSubscriptions();
|
|
283
|
-
subscribedVideoLayoutRef.current = dimension;
|
|
284
|
-
pendingVideoLayoutRef.current = undefined;
|
|
186
|
+
trackSubscriberRef.current?.onLayoutUpdate(event);
|
|
285
187
|
};
|
|
286
188
|
|
|
287
189
|
return (
|
|
@@ -289,6 +191,15 @@ export const VideoRenderer = ({
|
|
|
289
191
|
onLayout={onLayout}
|
|
290
192
|
style={[styles.container, videoRenderer.container]}
|
|
291
193
|
>
|
|
194
|
+
{call && !isLocalParticipant && (
|
|
195
|
+
<TrackSubscriber
|
|
196
|
+
ref={trackSubscriberRef}
|
|
197
|
+
call={call}
|
|
198
|
+
participantSessionId={sessionId}
|
|
199
|
+
trackType={trackType}
|
|
200
|
+
isVisible={isVisible}
|
|
201
|
+
/>
|
|
202
|
+
)}
|
|
292
203
|
{canShowVideo &&
|
|
293
204
|
videoStreamToRender &&
|
|
294
205
|
(objectFit || isVideoDimensionsValid) ? (
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '1.22.1
|
|
1
|
+
export const version = '1.22.1';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeWebrtc","_videoClient","_videoReactBindings","_ParticipantVideoFallback","_ThemeContext","_useTrackDimensions","_ScreenshotIosContext","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_VIEWPORT_VISIBILITY_STATE","videoTrack","VisibilityState","UNKNOWN","screenShareTrack","VideoRenderer","trackType","participant","isVisible","ParticipantVideoFallback","DefaultParticipantVideoFallback","objectFit","videoZOrder","theme","videoRenderer","useTheme","useCall","useCallCallingState","useCameraState","useIncomingVideoSettings","useCallStateHooks","isParticipantVideoEnabled","callingState","pendingVideoLayoutRef","useRef","undefined","subscribedVideoLayoutRef","direction","viewRef","register","registerIosScreenshot","deregister","deregisterIosScreenshot","useScreenshotIosContext","videoDimensions","useTrackDimensions","isVideoDimensionsValid","width","height","isLocalParticipant","sessionId","viewportVisibilityState","videoStream","screenShareStream","isScreenSharing","isPublishingVideoTrack","hasScreenShare","hasVideo","hasJoinedCall","CallingState","JOINED","videoStreamToRender","canShowVideo","hasPausedTrack","useEffect","Platform","OS","mirror","VISIBLE","state","updateParticipant","p","INVISIBLE","current","updateIsNeeded","dimension","updateParticipantTracks","dynascaleManager","applyTrackSubscriptions","onLayout","event","Math","trunc","nativeEvent","layout","createElement","View","style","styles","container","RTCView","streamURL","toURL","ref","zOrder","exports","StyleSheet","create","absoluteFillObject"],"sourceRoot":"../../../../../src","sources":["components/Participant/ParticipantView/VideoRenderer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","Platform","StyleSheet","View","RTCView","CallingState","hasPausedTrack","hasScreenShare","hasVideo","VisibilityState","useCall","useCallStateHooks","ParticipantVideoFallback","DefaultParticipantVideoFallback","useTheme","useTrackDimensions","useScreenshotIosContext","DEFAULT_VIEWPORT_VISIBILITY_STATE","videoTrack","UNKNOWN","screenShareTrack","VideoRenderer","trackType","participant","isVisible","objectFit","videoZOrder","theme","videoRenderer","call","useCallCallingState","useCameraState","useIncomingVideoSettings","isParticipantVideoEnabled","callingState","pendingVideoLayoutRef","undefined","subscribedVideoLayoutRef","direction","viewRef","register","registerIosScreenshot","deregister","deregisterIosScreenshot","videoDimensions","isVideoDimensionsValid","width","height","isLocalParticipant","sessionId","viewportVisibilityState","videoStream","screenShareStream","isScreenSharing","isPublishingVideoTrack","hasJoinedCall","JOINED","videoStreamToRender","canShowVideo","OS","mirror","VISIBLE","state","updateParticipant","p","INVISIBLE","current","updateIsNeeded","dimension","updateParticipantTracks","dynascaleManager","applyTrackSubscriptions","onLayout","event","Math","trunc","nativeEvent","layout","createElement","style","styles","container","streamURL","toURL","ref","zOrder","create","absoluteFillObject"],"sourceRoot":"../../../../../src","sources":["components/Participant/ParticipantView/VideoRenderer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/components/Participant/ParticipantView/VideoRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAwB9D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,oBAAoB,EAClB,0BAA0B,GAC1B,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,GACX,aAAa,CAChB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,0FAO3B,kBAAkB,sBAqQpB,CAAC"}
|
|
Binary file
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>SchemeUserState</key>
|
|
6
|
-
<dict>
|
|
7
|
-
<key>StreamVideoReactNative.xcscheme_^#shared#^_</key>
|
|
8
|
-
<dict>
|
|
9
|
-
<key>orderHint</key>
|
|
10
|
-
<integer>0</integer>
|
|
11
|
-
</dict>
|
|
12
|
-
</dict>
|
|
13
|
-
</dict>
|
|
14
|
-
</plist>
|