@livekit/react-native 2.9.6 → 2.9.8
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/README.md +7 -5
- package/ios/LivekitReactNative.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/LivekitReactNative.xcodeproj/xcuserdata/davidliu.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/lib/commonjs/LKNativeModule.js.map +1 -1
- package/lib/commonjs/audio/AudioManager.js +1 -2
- package/lib/commonjs/audio/AudioManager.js.map +1 -1
- package/lib/commonjs/audio/AudioSession.js +105 -100
- package/lib/commonjs/audio/AudioSession.js.map +1 -1
- package/lib/commonjs/audio/MediaRecorder.js +54 -35
- package/lib/commonjs/audio/MediaRecorder.js.map +1 -1
- package/lib/commonjs/components/BarVisualizer.js +8 -8
- package/lib/commonjs/components/BarVisualizer.js.map +1 -1
- package/lib/commonjs/components/LiveKitRoom.js +11 -7
- package/lib/commonjs/components/LiveKitRoom.js.map +1 -1
- package/lib/commonjs/components/VideoTrack.js +34 -47
- package/lib/commonjs/components/VideoTrack.js.map +1 -1
- package/lib/commonjs/components/VideoView.js +36 -48
- package/lib/commonjs/components/VideoView.js.map +1 -1
- package/lib/commonjs/components/ViewPortDetector.js +71 -79
- package/lib/commonjs/components/ViewPortDetector.js.map +1 -1
- package/lib/commonjs/e2ee/RNE2EEManager.js +8 -15
- package/lib/commonjs/e2ee/RNE2EEManager.js.map +1 -1
- package/lib/commonjs/e2ee/RNKeyProvider.js +1 -5
- package/lib/commonjs/e2ee/RNKeyProvider.js.map +1 -1
- package/lib/commonjs/events/EventEmitter.js +2 -4
- package/lib/commonjs/events/EventEmitter.js.map +1 -1
- package/lib/commonjs/hooks/useE2EEManager.js.map +1 -1
- package/lib/commonjs/hooks/useMultibandTrackVolume.js +4 -5
- package/lib/commonjs/hooks/useMultibandTrackVolume.js.map +1 -1
- package/lib/commonjs/hooks/useTrackVolume.js +4 -5
- package/lib/commonjs/hooks/useTrackVolume.js.map +1 -1
- package/lib/commonjs/hooks.js.map +1 -1
- package/lib/commonjs/index.js +15 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/logger.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/polyfills/EncoderDecoderTogether.min.js.map +1 -1
- package/lib/commonjs/polyfills/MediaRecorderShim.js.map +1 -1
- package/lib/commonjs/useParticipant.js.map +1 -1
- package/lib/commonjs/useRoom.js +4 -6
- package/lib/commonjs/useRoom.js.map +1 -1
- package/lib/module/LKNativeModule.js +2 -0
- package/lib/module/LKNativeModule.js.map +1 -1
- package/lib/module/audio/AudioManager.js +2 -0
- package/lib/module/audio/AudioManager.js.map +1 -1
- package/lib/module/audio/AudioSession.js +107 -100
- package/lib/module/audio/AudioSession.js.map +1 -1
- package/lib/module/audio/MediaRecorder.js +50 -29
- package/lib/module/audio/MediaRecorder.js.map +1 -1
- package/lib/module/components/BarVisualizer.js +9 -6
- package/lib/module/components/BarVisualizer.js.map +1 -1
- package/lib/module/components/LiveKitRoom.js +12 -6
- package/lib/module/components/LiveKitRoom.js.map +1 -1
- package/lib/module/components/VideoTrack.js +35 -45
- package/lib/module/components/VideoTrack.js.map +1 -1
- package/lib/module/components/VideoView.js +37 -46
- package/lib/module/components/VideoView.js.map +1 -1
- package/lib/module/components/ViewPortDetector.js +71 -77
- package/lib/module/components/ViewPortDetector.js.map +1 -1
- package/lib/module/e2ee/RNE2EEManager.js +10 -15
- package/lib/module/e2ee/RNE2EEManager.js.map +1 -1
- package/lib/module/e2ee/RNKeyProvider.js +3 -5
- package/lib/module/e2ee/RNKeyProvider.js.map +1 -1
- package/lib/module/events/EventEmitter.js +4 -4
- package/lib/module/events/EventEmitter.js.map +1 -1
- package/lib/module/hooks/useE2EEManager.js +2 -0
- package/lib/module/hooks/useE2EEManager.js.map +1 -1
- package/lib/module/hooks/useMultibandTrackVolume.js +6 -5
- package/lib/module/hooks/useMultibandTrackVolume.js.map +1 -1
- package/lib/module/hooks/useTrackVolume.js +6 -5
- package/lib/module/hooks/useTrackVolume.js.map +1 -1
- package/lib/module/hooks.js +2 -0
- package/lib/module/hooks.js.map +1 -1
- package/lib/module/index.js +5 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/logger.js +2 -0
- package/lib/module/logger.js.map +1 -1
- package/lib/module/polyfills/EncoderDecoderTogether.min.js.map +1 -1
- package/lib/module/polyfills/MediaRecorderShim.js +2 -0
- package/lib/module/polyfills/MediaRecorderShim.js.map +1 -1
- package/lib/module/useParticipant.js +2 -0
- package/lib/module/useParticipant.js.map +1 -1
- package/lib/module/useRoom.js +6 -6
- package/lib/module/useRoom.js.map +1 -1
- package/lib/typescript/{LKNativeModule.d.ts → src/LKNativeModule.d.ts} +1 -0
- package/lib/typescript/src/LKNativeModule.d.ts.map +1 -0
- package/lib/typescript/{audio → src/audio}/AudioManager.d.ts +1 -0
- package/lib/typescript/src/audio/AudioManager.d.ts.map +1 -0
- package/lib/typescript/{audio → src/audio}/AudioSession.d.ts +1 -0
- package/lib/typescript/src/audio/AudioSession.d.ts.map +1 -0
- package/lib/typescript/{audio → src/audio}/MediaRecorder.d.ts +14 -1
- package/lib/typescript/src/audio/MediaRecorder.d.ts.map +1 -0
- package/lib/typescript/{components → src/components}/BarVisualizer.d.ts +2 -2
- package/lib/typescript/src/components/BarVisualizer.d.ts.map +1 -0
- package/lib/typescript/{components → src/components}/LiveKitRoom.d.ts +2 -1
- package/lib/typescript/src/components/LiveKitRoom.d.ts.map +1 -0
- package/lib/typescript/{components → src/components}/VideoTrack.d.ts +2 -2
- package/lib/typescript/src/components/VideoTrack.d.ts.map +1 -0
- package/lib/typescript/{components → src/components}/VideoView.d.ts +2 -2
- package/lib/typescript/src/components/VideoView.d.ts.map +1 -0
- package/lib/typescript/{components → src/components}/ViewPortDetector.d.ts +3 -2
- package/lib/typescript/src/components/ViewPortDetector.d.ts.map +1 -0
- package/lib/typescript/{e2ee → src/e2ee}/RNE2EEManager.d.ts +1 -0
- package/lib/typescript/src/e2ee/RNE2EEManager.d.ts.map +1 -0
- package/lib/typescript/{e2ee → src/e2ee}/RNKeyProvider.d.ts +1 -0
- package/lib/typescript/src/e2ee/RNKeyProvider.d.ts.map +1 -0
- package/lib/typescript/{events → src/events}/EventEmitter.d.ts +1 -0
- package/lib/typescript/src/events/EventEmitter.d.ts.map +1 -0
- package/lib/typescript/{hooks → src/hooks}/useE2EEManager.d.ts +1 -0
- package/lib/typescript/src/hooks/useE2EEManager.d.ts.map +1 -0
- package/lib/typescript/{hooks → src/hooks}/useMultibandTrackVolume.d.ts +1 -0
- package/lib/typescript/src/hooks/useMultibandTrackVolume.d.ts.map +1 -0
- package/lib/typescript/{hooks → src/hooks}/useTrackVolume.d.ts +1 -0
- package/lib/typescript/src/hooks/useTrackVolume.d.ts.map +1 -0
- package/lib/typescript/{hooks.d.ts → src/hooks.d.ts} +1 -0
- package/lib/typescript/src/hooks.d.ts.map +1 -0
- package/lib/typescript/{index.d.ts → src/index.d.ts} +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/{logger.d.ts → src/logger.d.ts} +1 -0
- package/lib/typescript/src/logger.d.ts.map +1 -0
- package/lib/typescript/src/polyfills/MediaRecorderShim.d.ts +2 -0
- package/lib/typescript/src/polyfills/MediaRecorderShim.d.ts.map +1 -0
- package/lib/typescript/{useParticipant.d.ts → src/useParticipant.d.ts} +1 -0
- package/lib/typescript/src/useParticipant.d.ts.map +1 -0
- package/lib/typescript/{useRoom.d.ts → src/useRoom.d.ts} +1 -0
- package/lib/typescript/src/useRoom.d.ts.map +1 -0
- package/package.json +40 -57
- package/src/audio/MediaRecorder.ts +54 -17
- package/src/components/BarVisualizer.tsx +2 -2
- package/src/components/VideoTrack.tsx +0 -2
- package/src/components/VideoView.tsx +0 -2
- package/src/components/ViewPortDetector.tsx +1 -1
- package/src/index.tsx +1 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -7
- package/android/gradlew +0 -249
- package/android/gradlew.bat +0 -92
- package/android/local.properties +0 -8
- package/lib/typescript/polyfills/EncoderDecoderTogether.min.d.ts +0 -0
- package/lib/typescript/polyfills/MediaRecorderShim.d.ts +0 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { EventTarget, Event, getEventAttributeValue, setEventAttributeValue } from '@livekit/react-native-webrtc';
|
|
4
4
|
import { addListener } from '../events/EventEmitter';
|
|
5
|
-
import { EventTarget, Event, defineEventAttribute } from 'event-target-shim/index';
|
|
6
5
|
import { toByteArray } from 'base64-js';
|
|
7
6
|
import LiveKitModule from '../LKNativeModule';
|
|
8
7
|
import { log } from '../logger';
|
|
@@ -18,18 +17,15 @@ import { log } from '../logger';
|
|
|
18
17
|
* @private
|
|
19
18
|
*/
|
|
20
19
|
export class MediaRecorder extends EventTarget {
|
|
20
|
+
mimeType = 'audio/pcm';
|
|
21
|
+
audioBitsPerSecond = 0; // TODO?
|
|
22
|
+
state = 'inactive';
|
|
23
|
+
videoBitsPerSecond = 0; // TODO?
|
|
24
|
+
audioBitrateMode = 'constant';
|
|
25
|
+
_reactTag = undefined;
|
|
26
|
+
_parts = [];
|
|
21
27
|
constructor(stream) {
|
|
22
28
|
super();
|
|
23
|
-
_defineProperty(this, "mimeType", 'audio/pcm');
|
|
24
|
-
_defineProperty(this, "audioBitsPerSecond", 0);
|
|
25
|
-
// TODO?
|
|
26
|
-
_defineProperty(this, "state", 'inactive');
|
|
27
|
-
_defineProperty(this, "stream", void 0);
|
|
28
|
-
_defineProperty(this, "videoBitsPerSecond", 0);
|
|
29
|
-
// TODO?
|
|
30
|
-
_defineProperty(this, "audioBitrateMode", 'constant');
|
|
31
|
-
_defineProperty(this, "_reactTag", undefined);
|
|
32
|
-
_defineProperty(this, "_parts", []);
|
|
33
29
|
this.stream = stream;
|
|
34
30
|
}
|
|
35
31
|
registerListener() {
|
|
@@ -39,7 +35,7 @@ export class MediaRecorder extends EventTarget {
|
|
|
39
35
|
}
|
|
40
36
|
const mediaStreamTrack = audioTracks[0];
|
|
41
37
|
const peerConnectionId = mediaStreamTrack._peerConnectionId ?? -1;
|
|
42
|
-
const mediaStreamTrackId = mediaStreamTrack
|
|
38
|
+
const mediaStreamTrackId = mediaStreamTrack?.id;
|
|
43
39
|
this._reactTag = LiveKitModule.createAudioSinkListener(peerConnectionId, mediaStreamTrackId);
|
|
44
40
|
addListener(this, 'LK_AUDIO_DATA', event => {
|
|
45
41
|
if (this._reactTag && event.id === this._reactTag && this.state === 'recording') {
|
|
@@ -57,7 +53,7 @@ export class MediaRecorder extends EventTarget {
|
|
|
57
53
|
}
|
|
58
54
|
const mediaStreamTrack = audioTracks[0];
|
|
59
55
|
const peerConnectionId = mediaStreamTrack._peerConnectionId ?? -1;
|
|
60
|
-
const mediaStreamTrackId = mediaStreamTrack
|
|
56
|
+
const mediaStreamTrackId = mediaStreamTrack?.id;
|
|
61
57
|
LiveKitModule.deleteAudioSinkListener(this._reactTag, peerConnectionId, mediaStreamTrackId);
|
|
62
58
|
}
|
|
63
59
|
}
|
|
@@ -94,6 +90,42 @@ export class MediaRecorder extends EventTarget {
|
|
|
94
90
|
}
|
|
95
91
|
}));
|
|
96
92
|
}
|
|
93
|
+
get ondataavailable() {
|
|
94
|
+
return getEventAttributeValue(this, 'dataavailable');
|
|
95
|
+
}
|
|
96
|
+
set ondataavailable(value) {
|
|
97
|
+
setEventAttributeValue(this, 'dataavailable', value);
|
|
98
|
+
}
|
|
99
|
+
get onerror() {
|
|
100
|
+
return getEventAttributeValue(this, 'error');
|
|
101
|
+
}
|
|
102
|
+
set onerror(value) {
|
|
103
|
+
setEventAttributeValue(this, 'error', value);
|
|
104
|
+
}
|
|
105
|
+
get onpause() {
|
|
106
|
+
return getEventAttributeValue(this, 'pause');
|
|
107
|
+
}
|
|
108
|
+
set onpause(value) {
|
|
109
|
+
setEventAttributeValue(this, 'pause', value);
|
|
110
|
+
}
|
|
111
|
+
get onresume() {
|
|
112
|
+
return getEventAttributeValue(this, 'resume');
|
|
113
|
+
}
|
|
114
|
+
set onresume(value) {
|
|
115
|
+
setEventAttributeValue(this, 'resume', value);
|
|
116
|
+
}
|
|
117
|
+
get onstart() {
|
|
118
|
+
return getEventAttributeValue(this, 'start');
|
|
119
|
+
}
|
|
120
|
+
set onstart(value) {
|
|
121
|
+
setEventAttributeValue(this, 'start', value);
|
|
122
|
+
}
|
|
123
|
+
get onstop() {
|
|
124
|
+
return getEventAttributeValue(this, 'stop');
|
|
125
|
+
}
|
|
126
|
+
set onstop(value) {
|
|
127
|
+
setEventAttributeValue(this, 'stop', value);
|
|
128
|
+
}
|
|
97
129
|
}
|
|
98
130
|
|
|
99
131
|
/**
|
|
@@ -104,22 +136,11 @@ export class MediaRecorder extends EventTarget {
|
|
|
104
136
|
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/track_event MDN} for details.
|
|
105
137
|
*/
|
|
106
138
|
class BlobEvent extends Event {
|
|
139
|
+
/** @eventProperty */
|
|
140
|
+
|
|
107
141
|
constructor(type, eventInitDict) {
|
|
108
142
|
super(type, eventInitDict);
|
|
109
|
-
/** @eventProperty */
|
|
110
|
-
_defineProperty(this, "data", void 0);
|
|
111
143
|
this.data = eventInitDict.data;
|
|
112
144
|
}
|
|
113
145
|
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Define the `onxxx` event handlers.
|
|
117
|
-
*/
|
|
118
|
-
const proto = MediaRecorder.prototype;
|
|
119
|
-
defineEventAttribute(proto, 'dataavailable');
|
|
120
|
-
defineEventAttribute(proto, 'error');
|
|
121
|
-
defineEventAttribute(proto, 'pause');
|
|
122
|
-
defineEventAttribute(proto, 'resume');
|
|
123
|
-
defineEventAttribute(proto, 'start');
|
|
124
|
-
defineEventAttribute(proto, 'stop');
|
|
125
146
|
//# sourceMappingURL=MediaRecorder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["EventTarget","Event","getEventAttributeValue","setEventAttributeValue","addListener","toByteArray","LiveKitModule","log","MediaRecorder","mimeType","audioBitsPerSecond","state","videoBitsPerSecond","audioBitrateMode","_reactTag","undefined","_parts","constructor","stream","registerListener","audioTracks","getAudioTracks","length","mediaStreamTrack","peerConnectionId","_peerConnectionId","mediaStreamTrackId","id","createAudioSinkListener","event","str","data","push","unregisterListener","error","deleteAudioSinkListener","pause","dispatchEvent","resume","start","stop","dispatchData","requestData","combinedStr","reduce","sum","cur","BlobEvent","byteArray","ondataavailable","value","onerror","onpause","onresume","onstart","onstop","type","eventInitDict"],"sourceRoot":"../../../src","sources":["audio/MediaRecorder.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
import { useMaybeTrackRefContext } from '@livekit/components-react';
|
|
2
4
|
import { Animated, StyleSheet, View } from 'react-native';
|
|
3
5
|
import { useMultibandTrackVolume } from '../hooks';
|
|
4
6
|
import React, { useEffect, useRef, useState } from 'react';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
8
|
const defaultBarOptions = {
|
|
6
9
|
maxHeight: 1,
|
|
7
10
|
minHeight: 0.2,
|
|
@@ -104,19 +107,19 @@ export const BarVisualizer = ({
|
|
|
104
107
|
borderRadius: opts.barBorderRadius,
|
|
105
108
|
width: opts.barWidth
|
|
106
109
|
};
|
|
107
|
-
bars.push(
|
|
108
|
-
key: index,
|
|
110
|
+
bars.push(/*#__PURE__*/_jsx(Animated.View, {
|
|
109
111
|
style: [{
|
|
110
112
|
height: `${coercedPercent}%`
|
|
111
113
|
}, barStyle]
|
|
112
|
-
}));
|
|
114
|
+
}, index));
|
|
113
115
|
});
|
|
114
|
-
return /*#__PURE__*/
|
|
116
|
+
return /*#__PURE__*/_jsx(View, {
|
|
115
117
|
style: {
|
|
116
118
|
...style,
|
|
117
119
|
...styles.container
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
+
},
|
|
121
|
+
children: bars
|
|
122
|
+
});
|
|
120
123
|
};
|
|
121
124
|
const styles = StyleSheet.create({
|
|
122
125
|
container: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMaybeTrackRefContext","Animated","StyleSheet","View","useMultibandTrackVolume","React","useEffect","useRef","useState","defaultBarOptions","maxHeight","minHeight","barColor","barWidth","barBorderRadius","sequencerIntervals","Map","getSequencerInterval","state","barCount","undefined","interval","get","BarVisualizer","style","trackRef","options","trackReference","opacityAnimations","current","magnitudes","bands","opts","highlightedIndices","useBarAnimator","animations","i","Value","targetOpacity","includes","push","timing","toValue","duration","useNativeDriver","parallel","start","stop","bars","forEach","value","index","coerced","Math","min","max","coercedPercent","opacity","barStyle","backgroundColor","borderRadius","width","createElement","key","height","styles","container","create","flexDirection","alignItems","justifyContent","columns","setIndex","sequence","setSequence","generateListeningSequenceBar","seq","generateConnectingSequenceBar","Array","fill","map","_","idx","animationFrameId","startTime","performance","now","animate","time","timeElapsed","prev","requestAnimationFrame","cancelAnimationFrame","length","center","floor","noIndex","x"],"sources":["BarVisualizer.tsx"],"sourcesContent":["import {\n type AgentState,\n type TrackReferenceOrPlaceholder,\n useMaybeTrackRefContext,\n} from '@livekit/components-react';\nimport {\n Animated,\n StyleSheet,\n View,\n type ColorValue,\n type DimensionValue,\n type ViewStyle,\n} from 'react-native';\nimport { useMultibandTrackVolume } from '../hooks';\nimport React, { useEffect, useRef, useState } from 'react';\nexport type BarVisualizerOptions = {\n /** decimal values from 0 to 1 */\n maxHeight?: number;\n /** decimal values from 0 to 1 */\n minHeight?: number;\n\n barColor?: ColorValue;\n barWidth?: DimensionValue;\n barBorderRadius?: number;\n};\n\nconst defaultBarOptions = {\n maxHeight: 1,\n minHeight: 0.2,\n barColor: '#888888',\n barWidth: 24,\n barBorderRadius: 12,\n} as const satisfies BarVisualizerOptions;\n\nconst sequencerIntervals = new Map<AgentState, number>([\n ['connecting', 2000],\n ['initializing', 2000],\n ['listening', 500],\n ['thinking', 150],\n]);\n\nconst getSequencerInterval = (\n state: AgentState | undefined,\n barCount: number\n): number | undefined => {\n if (state === undefined) {\n return 1000;\n }\n let interval = sequencerIntervals.get(state);\n if (interval) {\n switch (state) {\n case 'connecting':\n // case 'thinking':\n interval /= barCount;\n break;\n\n default:\n break;\n }\n }\n return interval;\n};\n/**\n * @beta\n */\nexport interface BarVisualizerProps {\n /** If set, the visualizer will transition between different voice assistant states */\n state?: AgentState;\n /** Number of bars that show up in the visualizer */\n barCount?: number;\n trackRef?: TrackReferenceOrPlaceholder;\n options?: BarVisualizerOptions;\n /**\n * Custom React Native styles for the container.\n */\n style?: ViewStyle;\n}\n\n/**\n * Visualizes audio signals from a TrackReference as bars.\n * If the `state` prop is set, it automatically transitions between VoiceAssistant states.\n * @beta\n *\n * @remarks For VoiceAssistant state transitions this component requires a voice assistant agent running with livekit-agents \\>= 0.9.0\n *\n * @example\n * ```tsx\n * function SimpleVoiceAssistant() {\n * const { state, audioTrack } = useVoiceAssistant();\n * return (\n * <BarVisualizer\n * state={state}\n * trackRef={audioTrack}\n * />\n * );\n * }\n * ```\n */\nexport const BarVisualizer = ({\n style = {},\n state,\n barCount = 5,\n trackRef,\n options,\n}: BarVisualizerProps) => {\n let trackReference = useMaybeTrackRefContext();\n\n if (trackRef) {\n trackReference = trackRef;\n }\n\n const opacityAnimations = useRef<Animated.Value[]>([]).current;\n let magnitudes = useMultibandTrackVolume(trackReference, { bands: barCount });\n\n let opts = { ...defaultBarOptions, ...options };\n\n const highlightedIndices = useBarAnimator(\n state,\n barCount,\n getSequencerInterval(state, barCount) ?? 100\n );\n\n useEffect(() => {\n let animations = [];\n for (let i = 0; i < barCount; i++) {\n if (!opacityAnimations[i]) {\n opacityAnimations[i] = new Animated.Value(0.3);\n }\n let targetOpacity = 0.3;\n if (highlightedIndices.includes(i)) {\n targetOpacity = 1;\n }\n animations.push(\n Animated.timing(opacityAnimations[i], {\n toValue: targetOpacity,\n duration: 250,\n useNativeDriver: true,\n })\n );\n }\n\n let parallel = Animated.parallel(animations);\n parallel.start();\n return () => {\n parallel.stop();\n };\n }, [highlightedIndices, barCount, opacityAnimations]);\n\n let bars: React.ReactNode[] = [];\n magnitudes.forEach((value, index) => {\n let coerced = Math.min(opts.maxHeight, Math.max(opts.minHeight, value));\n let coercedPercent = Math.min(100, Math.max(0, coerced * 100));\n let opacity = opacityAnimations[index] ?? new Animated.Value(0.3);\n let barStyle = {\n opacity: opacity,\n backgroundColor: opts.barColor,\n borderRadius: opts.barBorderRadius,\n width: opts.barWidth,\n };\n bars.push(\n <Animated.View\n key={index}\n style={[{ height: `${coercedPercent}%` }, barStyle]}\n />\n );\n });\n\n return <View style={{ ...style, ...styles.container }}>{bars}</View>;\n};\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-evenly',\n },\n});\n\nexport const useBarAnimator = (\n state: AgentState | undefined,\n columns: number,\n interval: number\n): number[] => {\n const [index, setIndex] = useState(0);\n const [sequence, setSequence] = useState<number[][]>([[]]);\n\n useEffect(() => {\n if (state === 'thinking') {\n setSequence(generateListeningSequenceBar(columns));\n } else if (state === 'connecting' || state === 'initializing') {\n const seq = [...generateConnectingSequenceBar(columns)];\n setSequence(seq);\n } else if (state === 'listening') {\n setSequence(generateListeningSequenceBar(columns));\n } else if (state === undefined) {\n // highlight everything\n setSequence([new Array(columns).fill(0).map((_, idx) => idx)]);\n } else {\n setSequence([[]]);\n }\n setIndex(0);\n }, [state, columns]);\n\n const animationFrameId = useRef<number | null>(null);\n useEffect(() => {\n let startTime = performance.now();\n\n const animate = (time: number) => {\n const timeElapsed = time - startTime;\n\n if (timeElapsed >= interval) {\n setIndex((prev) => prev + 1);\n startTime = time;\n }\n\n animationFrameId.current = requestAnimationFrame(animate);\n };\n\n animationFrameId.current = requestAnimationFrame(animate);\n\n return () => {\n if (animationFrameId.current !== null) {\n cancelAnimationFrame(animationFrameId.current);\n }\n };\n }, [interval, columns, state, sequence.length]);\n\n return sequence[index % sequence.length];\n};\n\nconst generateListeningSequenceBar = (columns: number): number[][] => {\n const center = Math.floor(columns / 2);\n const noIndex = -1;\n\n return [[center], [noIndex]];\n};\n\nconst generateConnectingSequenceBar = (columns: number): number[][] => {\n const seq: number[][] = [[]];\n\n for (let x = 0; x < columns; x++) {\n seq.push([x, columns - 1 - x]);\n }\n\n return seq;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useMaybeTrackRefContext","Animated","StyleSheet","View","useMultibandTrackVolume","React","useEffect","useRef","useState","jsx","_jsx","defaultBarOptions","maxHeight","minHeight","barColor","barWidth","barBorderRadius","sequencerIntervals","Map","getSequencerInterval","state","barCount","undefined","interval","get","BarVisualizer","style","trackRef","options","trackReference","opacityAnimations","current","magnitudes","bands","opts","highlightedIndices","useBarAnimator","animations","i","Value","targetOpacity","includes","push","timing","toValue","duration","useNativeDriver","parallel","start","stop","bars","forEach","value","index","coerced","Math","min","max","coercedPercent","opacity","barStyle","backgroundColor","borderRadius","width","height","styles","container","children","create","flexDirection","alignItems","justifyContent","columns","setIndex","sequence","setSequence","generateListeningSequenceBar","seq","generateConnectingSequenceBar","Array","fill","map","_","idx","animationFrameId","startTime","performance","now","animate","time","timeElapsed","prev","requestAnimationFrame","cancelAnimationFrame","length","center","floor","noIndex","x"],"sourceRoot":"../../../src","sources":["components/BarVisualizer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
import { LKFeatureContext, RoomContext, useLiveKitRoom } from '@livekit/components-react';
|
|
2
4
|
import * as React from 'react';
|
|
3
5
|
|
|
4
6
|
/** @public */
|
|
5
|
-
|
|
7
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
6
8
|
/**
|
|
7
9
|
* The `LiveKitRoom` component provides the room context to all its child components.
|
|
8
10
|
* It is generally the starting point of your LiveKit app and the root of the LiveKit component tree.
|
|
@@ -24,10 +26,14 @@ export function LiveKitRoom(props) {
|
|
|
24
26
|
const {
|
|
25
27
|
room
|
|
26
28
|
} = useLiveKitRoom(props);
|
|
27
|
-
return /*#__PURE__*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
30
|
+
children: room && /*#__PURE__*/_jsx(RoomContext.Provider, {
|
|
31
|
+
value: room,
|
|
32
|
+
children: /*#__PURE__*/_jsx(LKFeatureContext.Provider, {
|
|
33
|
+
value: props.featureFlags,
|
|
34
|
+
children: props.children
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
});
|
|
32
38
|
}
|
|
33
39
|
//# sourceMappingURL=LiveKitRoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LKFeatureContext","RoomContext","useLiveKitRoom","React","LiveKitRoom","props","room","
|
|
1
|
+
{"version":3,"names":["LKFeatureContext","RoomContext","useLiveKitRoom","React","jsx","_jsx","Fragment","_Fragment","LiveKitRoom","props","room","children","Provider","value","featureFlags"],"sourceRoot":"../../../src","sources":["components/LiveKitRoom.tsx"],"mappings":";;AAAA,SAEEA,gBAAgB,EAChBC,WAAW,EACXC,cAAc,QACT,2BAA2B;AASlC,OAAO,KAAKC,KAAK,MAAM,OAAO;;AAE9B;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA;AAuEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAACC,KAAgD,EAAE;EAC5E,MAAM;IAAEC;EAAK,CAAC,GAAGR,cAAc,CAACO,KAAK,CAAC;EACtC,oBACEJ,IAAA,CAAAE,SAAA;IAAAI,QAAA,EACGD,IAAI,iBACHL,IAAA,CAACJ,WAAW,CAACW,QAAQ;MAACC,KAAK,EAAEH,IAAK;MAAAC,QAAA,eAChCN,IAAA,CAACL,gBAAgB,CAACY,QAAQ;QAACC,KAAK,EAAEJ,KAAK,CAACK,YAAa;QAAAH,QAAA,EAClDF,KAAK,CAACE;MAAQ,CACU;IAAC,CACR;EACvB,CACD,CAAC;AAEP","ignoreList":[]}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
-
import * as React from 'react';
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
5
3
|
import { Platform, StyleSheet, View } from 'react-native';
|
|
6
4
|
import { LocalVideoTrack, TrackEvent } from 'livekit-client';
|
|
7
5
|
import { RTCView, RTCPIPView } from '@livekit/react-native-webrtc';
|
|
@@ -13,7 +11,7 @@ import ViewPortDetector from './ViewPortDetector';
|
|
|
13
11
|
* Props for the VideoTrack component.
|
|
14
12
|
* @public
|
|
15
13
|
*/
|
|
16
|
-
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
15
|
/**
|
|
18
16
|
* VideoTrack component for displaying video tracks in a React Native application.
|
|
19
17
|
* It supports both local and remote video tracks from LiveKit, and handles adaptive streaming for remote tracks.
|
|
@@ -31,24 +29,23 @@ export const VideoTrack = /*#__PURE__*/forwardRef(({
|
|
|
31
29
|
iosPIP
|
|
32
30
|
}, ref) => {
|
|
33
31
|
const [elementInfo] = useState(() => {
|
|
34
|
-
var _trackRef$publication;
|
|
35
32
|
let info = new VideoTrackElementInfo();
|
|
36
|
-
info.id = trackRef
|
|
33
|
+
info.id = trackRef?.publication?.trackSid;
|
|
37
34
|
return info;
|
|
38
35
|
});
|
|
39
36
|
const layoutOnChange = useCallback(event => elementInfo.onLayout(event), [elementInfo]);
|
|
40
|
-
const iosPIPEnabled =
|
|
37
|
+
const iosPIPEnabled = iosPIP?.enabled ?? false;
|
|
41
38
|
const visibilityOnChange = useCallback(isVisible => elementInfo.onVisibility(isVisible || iosPIPEnabled), [elementInfo, iosPIPEnabled]);
|
|
42
|
-
const videoTrack = trackRef
|
|
39
|
+
const videoTrack = trackRef?.publication.track;
|
|
43
40
|
const shouldObserveVisibility = useMemo(() => {
|
|
44
41
|
return videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream;
|
|
45
42
|
}, [videoTrack]);
|
|
46
|
-
const [mediaStream, setMediaStream] = useState(videoTrack
|
|
43
|
+
const [mediaStream, setMediaStream] = useState(videoTrack?.mediaStream);
|
|
47
44
|
useEffect(() => {
|
|
48
|
-
setMediaStream(videoTrack
|
|
45
|
+
setMediaStream(videoTrack?.mediaStream);
|
|
49
46
|
if (videoTrack instanceof LocalVideoTrack) {
|
|
50
47
|
const onRestarted = track => {
|
|
51
|
-
setMediaStream(track
|
|
48
|
+
setMediaStream(track?.mediaStream);
|
|
52
49
|
};
|
|
53
50
|
videoTrack.on(TrackEvent.Restarted, onRestarted);
|
|
54
51
|
return () => {
|
|
@@ -60,9 +57,9 @@ export const VideoTrack = /*#__PURE__*/forwardRef(({
|
|
|
60
57
|
}, [videoTrack]);
|
|
61
58
|
useEffect(() => {
|
|
62
59
|
if (videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream) {
|
|
63
|
-
videoTrack
|
|
60
|
+
videoTrack?.observeElementInfo(elementInfo);
|
|
64
61
|
return () => {
|
|
65
|
-
videoTrack
|
|
62
|
+
videoTrack?.stopObservingElementInfo(elementInfo);
|
|
66
63
|
};
|
|
67
64
|
} else {
|
|
68
65
|
return () => {};
|
|
@@ -70,11 +67,11 @@ export const VideoTrack = /*#__PURE__*/forwardRef(({
|
|
|
70
67
|
}, [videoTrack, elementInfo]);
|
|
71
68
|
let videoView;
|
|
72
69
|
if (!iosPIP || Platform.OS !== 'ios') {
|
|
73
|
-
videoView = /*#__PURE__*/
|
|
70
|
+
videoView = /*#__PURE__*/_jsx(RTCView, {
|
|
74
71
|
style: styles.videoTrack
|
|
75
72
|
// @ts-expect-error
|
|
76
73
|
,
|
|
77
|
-
streamURL:
|
|
74
|
+
streamURL: mediaStream?.toURL() ?? '',
|
|
78
75
|
objectFit: objectFit,
|
|
79
76
|
zOrder: zOrder,
|
|
80
77
|
mirror: mirror
|
|
@@ -83,11 +80,11 @@ export const VideoTrack = /*#__PURE__*/forwardRef(({
|
|
|
83
80
|
ref: ref
|
|
84
81
|
});
|
|
85
82
|
} else {
|
|
86
|
-
videoView = /*#__PURE__*/
|
|
83
|
+
videoView = /*#__PURE__*/_jsx(RTCPIPView, {
|
|
87
84
|
style: styles.videoTrack
|
|
88
85
|
// @ts-expect-error
|
|
89
86
|
,
|
|
90
|
-
streamURL:
|
|
87
|
+
streamURL: mediaStream?.toURL() ?? '',
|
|
91
88
|
objectFit: objectFit,
|
|
92
89
|
zOrder: zOrder,
|
|
93
90
|
mirror: mirror
|
|
@@ -98,18 +95,20 @@ export const VideoTrack = /*#__PURE__*/forwardRef(({
|
|
|
98
95
|
ref: ref
|
|
99
96
|
});
|
|
100
97
|
}
|
|
101
|
-
return /*#__PURE__*/
|
|
98
|
+
return /*#__PURE__*/_jsx(View, {
|
|
102
99
|
style: {
|
|
103
100
|
...style,
|
|
104
101
|
...styles.container
|
|
105
102
|
},
|
|
106
|
-
onLayout: layoutOnChange
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
103
|
+
onLayout: layoutOnChange,
|
|
104
|
+
children: /*#__PURE__*/_jsx(ViewPortDetector, {
|
|
105
|
+
onChange: visibilityOnChange,
|
|
106
|
+
style: styles.videoTrack,
|
|
107
|
+
disabled: !shouldObserveVisibility,
|
|
108
|
+
propKey: videoTrack,
|
|
109
|
+
children: videoView
|
|
110
|
+
})
|
|
111
|
+
});
|
|
113
112
|
});
|
|
114
113
|
const styles = StyleSheet.create({
|
|
115
114
|
container: {},
|
|
@@ -119,21 +118,14 @@ const styles = StyleSheet.create({
|
|
|
119
118
|
}
|
|
120
119
|
});
|
|
121
120
|
class VideoTrackElementInfo {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
_defineProperty(this, "visibilityChangedAt", void 0);
|
|
131
|
-
_defineProperty(this, "pictureInPicture", false);
|
|
132
|
-
_defineProperty(this, "handleResize", void 0);
|
|
133
|
-
_defineProperty(this, "handleVisibilityChanged", void 0);
|
|
134
|
-
_defineProperty(this, "width", () => this._width);
|
|
135
|
-
_defineProperty(this, "height", () => this._height);
|
|
136
|
-
}
|
|
121
|
+
element = {};
|
|
122
|
+
_width = 0;
|
|
123
|
+
_height = 0;
|
|
124
|
+
_observing = false;
|
|
125
|
+
visible = true;
|
|
126
|
+
pictureInPicture = false;
|
|
127
|
+
width = () => this._width;
|
|
128
|
+
height = () => this._height;
|
|
137
129
|
observe() {
|
|
138
130
|
this._observing = true;
|
|
139
131
|
}
|
|
@@ -148,8 +140,7 @@ class VideoTrackElementInfo {
|
|
|
148
140
|
this._width = width;
|
|
149
141
|
this._height = height;
|
|
150
142
|
if (this._observing) {
|
|
151
|
-
|
|
152
|
-
(_this$handleResize = this.handleResize) === null || _this$handleResize === void 0 || _this$handleResize.call(this);
|
|
143
|
+
this.handleResize?.();
|
|
153
144
|
}
|
|
154
145
|
}
|
|
155
146
|
onVisibility(isVisible) {
|
|
@@ -157,8 +148,7 @@ class VideoTrackElementInfo {
|
|
|
157
148
|
this.visible = isVisible;
|
|
158
149
|
this.visibilityChangedAt = Date.now();
|
|
159
150
|
if (this._observing) {
|
|
160
|
-
|
|
161
|
-
(_this$handleVisibilit = this.handleVisibilityChanged) === null || _this$handleVisibilit === void 0 || _this$handleVisibilit.call(this);
|
|
151
|
+
this.handleVisibilityChanged?.();
|
|
162
152
|
}
|
|
163
153
|
}
|
|
164
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Platform","StyleSheet","View","LocalVideoTrack","TrackEvent","RTCView","RTCPIPView","forwardRef","useCallback","useEffect","useMemo","useState","RemoteVideoTrack","ViewPortDetector","VideoTrack","style","trackRef","objectFit","zOrder","mirror","iosPIP","ref","elementInfo","_trackRef$publication","info","VideoTrackElementInfo","id","publication","trackSid","layoutOnChange","event","onLayout","iosPIPEnabled","enabled","visibilityOnChange","isVisible","onVisibility","videoTrack","track","shouldObserveVisibility","isAdaptiveStream","mediaStream","setMediaStream","onRestarted","on","Restarted","off","observeElementInfo","stopObservingElementInfo","videoView","OS","createElement","styles","streamURL","toURL","container","onChange","disabled","propKey","create","flex","width","constructor","_defineProperty","_width","_height","observe","_observing","stopObserving","height","nativeEvent","layout","_this$handleResize","handleResize","call","visible","visibilityChangedAt","Date","now","_this$handleVisibilit","handleVisibilityChanged"],"sources":["VideoTrack.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n type ViewStyle,\n} from 'react-native';\nimport {\n type ElementInfo,\n LocalVideoTrack,\n Track,\n TrackEvent,\n} from 'livekit-client';\nimport {\n RTCView,\n RTCPIPView,\n type RTCIOSPIPOptions,\n} from '@livekit/react-native-webrtc';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { RemoteVideoTrack } from 'livekit-client';\nimport ViewPortDetector from './ViewPortDetector';\nimport type { TrackReference } from '@livekit/components-react';\n\n/**\n * Props for the VideoTrack component.\n * @public\n */\nexport type VideoTrackProps = {\n /**\n * The track reference to display. This should be a TrackReference object\n * or undefined if no track is available.\n */\n trackRef: TrackReference | undefined;\n /**\n * Custom React Native styles for the video container.\n */\n style?: ViewStyle;\n /**\n * Specifies how the video content should be resized to fit its container.\n * 'cover' (default): The video will fill the entire container, potentially cropping the video.\n * 'contain': The entire video will be visible within the container, potentially leaving empty space.\n */\n objectFit?: 'cover' | 'contain' | undefined;\n /**\n * Indicates whether the video should be mirrored during rendering.\n * This is commonly used for front-facing cameras.\n */\n mirror?: boolean;\n /**\n * Specifies the depth-stacking order of this video view in the stacking space of all video views.\n * A larger zOrder value generally causes the view to cover those with lower values.\n *\n * The support for zOrder is platform-dependent and/or\n * implementation-specific. Thus, specifying a value for zOrder is to be\n * thought of as giving a hint rather than as imposing a requirement. For\n * example, video renderers such as RTCView are commonly implemented using\n * OpenGL and OpenGL views may have different numbers of layers in their\n * stacking space. Android has three: a layer bellow the window (aka\n * default), a layer bellow the window again but above the previous layer\n * (aka media overlay), and above the window. Consequently, it is advisable\n * to limit the number of utilized layers in the stacking space to the\n * minimum sufficient for the desired display. For example, a video call\n * application usually needs a maximum of two zOrder values: 0 for the\n * remote video(s) which appear in the background, and 1 for the local\n * video(s) which appear above the remote video(s).\n */\n zOrder?: number;\n\n /**\n * Picture in picture options for this view. Disabled if not supplied.\n *\n * iOS only. Requires iOS 15.0 or above, and the PIP background mode capability.\n *\n * If `iosPIP.enabled` is true, the methods `startIOSPIP` and `stopIOSPIP`\n * can be used to manually trigger the PIP mode.\n *\n * `iosPIP.startAutomatically` can be used to automatically\n * enter PIP when backgrounding the app.\n *\n * `iosPIP.preferredSize` is used to provide a suggested aspect ratio.\n *\n * @example\n * ```tsx\n * import { startIOSPIP, stopIOSPIP } from '@livekit/react-native-webrtc';\n *\n * // Obtain a ref to the view\n * const videoRef = useRef<Component>(null);\n * const videoView = (\n * <VideoTrack\n * ref={videoRef}\n * iosPIP={{\n * enabled: true,\n * startAutomatically: true,\n * preferredSize: {\n * width: 9,\n * height: 16,\n * },\n * }}\n * ...\n * />\n * );\n *\n * // Start/stop manually\n * startIOSPIP(videoRef);\n * stopIOSPIP(videoRef);\n * ```\n *\n */\n iosPIP?: RTCIOSPIPOptions & {\n preferredSize: {\n width: number;\n height: number;\n };\n fallbackView?: ReactNode;\n };\n};\n\ntype RTCViewInstance = InstanceType<typeof RTCView>;\n\n/**\n * VideoTrack component for displaying video tracks in a React Native application.\n * It supports both local and remote video tracks from LiveKit, and handles adaptive streaming for remote tracks.\n *\n * @param props - See VideoTrackProps for details.\n * @returns A React component that renders the given video track.\n * @public\n */\nexport const VideoTrack = forwardRef<RTCViewInstance, VideoTrackProps>(\n (\n {\n style = {},\n trackRef,\n objectFit = 'cover',\n zOrder,\n mirror,\n iosPIP,\n }: VideoTrackProps,\n ref\n ) => {\n const [elementInfo] = useState(() => {\n let info = new VideoTrackElementInfo();\n info.id = trackRef?.publication?.trackSid;\n return info;\n });\n\n const layoutOnChange = useCallback(\n (event: LayoutChangeEvent) => elementInfo.onLayout(event),\n [elementInfo]\n );\n\n const iosPIPEnabled = iosPIP?.enabled ?? false;\n const visibilityOnChange = useCallback(\n (isVisible: boolean) =>\n elementInfo.onVisibility(isVisible || iosPIPEnabled),\n [elementInfo, iosPIPEnabled]\n );\n\n const videoTrack = trackRef?.publication.track;\n\n const shouldObserveVisibility = useMemo(() => {\n return (\n videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream\n );\n }, [videoTrack]);\n\n const [mediaStream, setMediaStream] = useState(videoTrack?.mediaStream);\n useEffect(() => {\n setMediaStream(videoTrack?.mediaStream);\n if (videoTrack instanceof LocalVideoTrack) {\n const onRestarted = (track: Track | null) => {\n setMediaStream(track?.mediaStream);\n };\n videoTrack.on(TrackEvent.Restarted, onRestarted);\n\n return () => {\n videoTrack.off(TrackEvent.Restarted, onRestarted);\n };\n } else {\n return () => {};\n }\n }, [videoTrack]);\n\n useEffect(() => {\n if (\n videoTrack instanceof RemoteVideoTrack &&\n videoTrack.isAdaptiveStream\n ) {\n videoTrack?.observeElementInfo(elementInfo);\n return () => {\n videoTrack?.stopObservingElementInfo(elementInfo);\n };\n } else {\n return () => {};\n }\n }, [videoTrack, elementInfo]);\n\n let videoView;\n if (!iosPIP || Platform.OS !== 'ios') {\n videoView = (\n <RTCView\n style={styles.videoTrack}\n // @ts-expect-error\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n // @ts-ignore\n ref={ref}\n />\n );\n } else {\n videoView = (\n <RTCPIPView\n style={styles.videoTrack}\n // @ts-expect-error\n streamURL={mediaStream?.toURL() ?? ''}\n objectFit={objectFit}\n zOrder={zOrder}\n mirror={mirror}\n // TODO: fix this up in react-native-webrtc side.\n // @ts-expect-error\n iosPIP={iosPIP}\n ref={ref}\n />\n );\n }\n return (\n <View style={{ ...style, ...styles.container }} onLayout={layoutOnChange}>\n <ViewPortDetector\n onChange={visibilityOnChange}\n style={styles.videoTrack}\n disabled={!shouldObserveVisibility}\n propKey={videoTrack}\n >\n {videoView}\n </ViewPortDetector>\n </View>\n );\n }\n);\n\nconst styles = StyleSheet.create({\n container: {},\n videoTrack: {\n flex: 1,\n width: '100%',\n },\n});\n\nclass VideoTrackElementInfo implements ElementInfo {\n element: object = {};\n something?: any;\n id?: string;\n _width = 0;\n _height = 0;\n _observing = false;\n visible: boolean = true;\n visibilityChangedAt: number | undefined;\n pictureInPicture = false;\n handleResize?: (() => void) | undefined;\n handleVisibilityChanged?: (() => void) | undefined;\n width = () => this._width;\n height = () => this._height;\n\n observe(): void {\n this._observing = true;\n }\n\n stopObserving(): void {\n this._observing = false;\n }\n\n onLayout(event: LayoutChangeEvent) {\n let { width, height } = event.nativeEvent.layout;\n this._width = width;\n this._height = height;\n\n if (this._observing) {\n this.handleResize?.();\n }\n }\n\n onVisibility(isVisible: boolean) {\n if (this.visible !== isVisible) {\n this.visible = isVisible;\n this.visibilityChangedAt = Date.now();\n if (this._observing) {\n this.handleVisibilityChanged?.();\n }\n }\n }\n}\n"],"mappings":";;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAEEC,QAAQ,EACRC,UAAU,EACVC,IAAI,QAEC,cAAc;AACrB,SAEEC,eAAe,EAEfC,UAAU,QACL,gBAAgB;AACvB,SACEC,OAAO,EACPC,UAAU,QAEL,8BAA8B;AACrC,SACEC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,QAAQ,QAEH,OAAO;AACd,SAASC,gBAAgB,QAAQ,gBAAgB;AACjD,OAAOC,gBAAgB,MAAM,oBAAoB;;AAGjD;AACA;AACA;AACA;;AA6FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,gBAAGP,UAAU,CAClC,CACE;EACEQ,KAAK,GAAG,CAAC,CAAC;EACVC,QAAQ;EACRC,SAAS,GAAG,OAAO;EACnBC,MAAM;EACNC,MAAM;EACNC;AACe,CAAC,EAClBC,GAAG,KACA;EACH,MAAM,CAACC,WAAW,CAAC,GAAGX,QAAQ,CAAC,MAAM;IAAA,IAAAY,qBAAA;IACnC,IAAIC,IAAI,GAAG,IAAIC,qBAAqB,CAAC,CAAC;IACtCD,IAAI,CAACE,EAAE,GAAGV,QAAQ,aAARA,QAAQ,gBAAAO,qBAAA,GAARP,QAAQ,CAAEW,WAAW,cAAAJ,qBAAA,uBAArBA,qBAAA,CAAuBK,QAAQ;IACzC,OAAOJ,IAAI;EACb,CAAC,CAAC;EAEF,MAAMK,cAAc,GAAGrB,WAAW,CAC/BsB,KAAwB,IAAKR,WAAW,CAACS,QAAQ,CAACD,KAAK,CAAC,EACzD,CAACR,WAAW,CACd,CAAC;EAED,MAAMU,aAAa,GAAG,CAAAZ,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEa,OAAO,KAAI,KAAK;EAC9C,MAAMC,kBAAkB,GAAG1B,WAAW,CACnC2B,SAAkB,IACjBb,WAAW,CAACc,YAAY,CAACD,SAAS,IAAIH,aAAa,CAAC,EACtD,CAACV,WAAW,EAAEU,aAAa,CAC7B,CAAC;EAED,MAAMK,UAAU,GAAGrB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEW,WAAW,CAACW,KAAK;EAE9C,MAAMC,uBAAuB,GAAG7B,OAAO,CAAC,MAAM;IAC5C,OACE2B,UAAU,YAAYzB,gBAAgB,IAAIyB,UAAU,CAACG,gBAAgB;EAEzE,CAAC,EAAE,CAACH,UAAU,CAAC,CAAC;EAEhB,MAAM,CAACI,WAAW,EAAEC,cAAc,CAAC,GAAG/B,QAAQ,CAAC0B,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEI,WAAW,CAAC;EACvEhC,SAAS,CAAC,MAAM;IACdiC,cAAc,CAACL,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEI,WAAW,CAAC;IACvC,IAAIJ,UAAU,YAAYlC,eAAe,EAAE;MACzC,MAAMwC,WAAW,GAAIL,KAAmB,IAAK;QAC3CI,cAAc,CAACJ,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEG,WAAW,CAAC;MACpC,CAAC;MACDJ,UAAU,CAACO,EAAE,CAACxC,UAAU,CAACyC,SAAS,EAAEF,WAAW,CAAC;MAEhD,OAAO,MAAM;QACXN,UAAU,CAACS,GAAG,CAAC1C,UAAU,CAACyC,SAAS,EAAEF,WAAW,CAAC;MACnD,CAAC;IACH,CAAC,MAAM;MACL,OAAO,MAAM,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,CAACN,UAAU,CAAC,CAAC;EAEhB5B,SAAS,CAAC,MAAM;IACd,IACE4B,UAAU,YAAYzB,gBAAgB,IACtCyB,UAAU,CAACG,gBAAgB,EAC3B;MACAH,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEU,kBAAkB,CAACzB,WAAW,CAAC;MAC3C,OAAO,MAAM;QACXe,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEW,wBAAwB,CAAC1B,WAAW,CAAC;MACnD,CAAC;IACH,CAAC,MAAM;MACL,OAAO,MAAM,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,CAACe,UAAU,EAAEf,WAAW,CAAC,CAAC;EAE7B,IAAI2B,SAAS;EACb,IAAI,CAAC7B,MAAM,IAAIpB,QAAQ,CAACkD,EAAE,KAAK,KAAK,EAAE;IACpCD,SAAS,gBACPlD,KAAA,CAAAoD,aAAA,CAAC9C,OAAO;MACNU,KAAK,EAAEqC,MAAM,CAACf;MACd;MAAA;MACAgB,SAAS,EAAE,CAAAZ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEa,KAAK,CAAC,CAAC,KAAI,EAAG;MACtCrC,SAAS,EAAEA,SAAU;MACrBC,MAAM,EAAEA,MAAO;MACfC,MAAM,EAAEA;MACR;MAAA;MACAE,GAAG,EAAEA;IAAI,CACV,CACF;EACH,CAAC,MAAM;IACL4B,SAAS,gBACPlD,KAAA,CAAAoD,aAAA,CAAC7C,UAAU;MACTS,KAAK,EAAEqC,MAAM,CAACf;MACd;MAAA;MACAgB,SAAS,EAAE,CAAAZ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEa,KAAK,CAAC,CAAC,KAAI,EAAG;MACtCrC,SAAS,EAAEA,SAAU;MACrBC,MAAM,EAAEA,MAAO;MACfC,MAAM,EAAEA;MACR;MACA;MAAA;MACAC,MAAM,EAAEA,MAAO;MACfC,GAAG,EAAEA;IAAI,CACV,CACF;EACH;EACA,oBACEtB,KAAA,CAAAoD,aAAA,CAACjD,IAAI;IAACa,KAAK,EAAE;MAAE,GAAGA,KAAK;MAAE,GAAGqC,MAAM,CAACG;IAAU,CAAE;IAACxB,QAAQ,EAAEF;EAAe,gBACvE9B,KAAA,CAAAoD,aAAA,CAACtC,gBAAgB;IACf2C,QAAQ,EAAEtB,kBAAmB;IAC7BnB,KAAK,EAAEqC,MAAM,CAACf,UAAW;IACzBoB,QAAQ,EAAE,CAAClB,uBAAwB;IACnCmB,OAAO,EAAErB;EAAW,GAEnBY,SACe,CACd,CAAC;AAEX,CACF,CAAC;AAED,MAAMG,MAAM,GAAGnD,UAAU,CAAC0D,MAAM,CAAC;EAC/BJ,SAAS,EAAE,CAAC,CAAC;EACblB,UAAU,EAAE;IACVuB,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,MAAMpC,qBAAqB,CAAwB;EAAAqC,YAAA;IAAAC,eAAA,kBAC/B,CAAC,CAAC;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,iBAGX,CAAC;IAAAA,eAAA,kBACA,CAAC;IAAAA,eAAA,qBACE,KAAK;IAAAA,eAAA,kBACC,IAAI;IAAAA,eAAA;IAAAA,eAAA,2BAEJ,KAAK;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,gBAGhB,MAAM,IAAI,CAACC,MAAM;IAAAD,eAAA,iBAChB,MAAM,IAAI,CAACE,OAAO;EAAA;EAE3BC,OAAOA,CAAA,EAAS;IACd,IAAI,CAACC,UAAU,GAAG,IAAI;EACxB;EAEAC,aAAaA,CAAA,EAAS;IACpB,IAAI,CAACD,UAAU,GAAG,KAAK;EACzB;EAEApC,QAAQA,CAACD,KAAwB,EAAE;IACjC,IAAI;MAAE+B,KAAK;MAAEQ;IAAO,CAAC,GAAGvC,KAAK,CAACwC,WAAW,CAACC,MAAM;IAChD,IAAI,CAACP,MAAM,GAAGH,KAAK;IACnB,IAAI,CAACI,OAAO,GAAGI,MAAM;IAErB,IAAI,IAAI,CAACF,UAAU,EAAE;MAAA,IAAAK,kBAAA;MACnB,CAAAA,kBAAA,OAAI,CAACC,YAAY,cAAAD,kBAAA,eAAjBA,kBAAA,CAAAE,IAAA,KAAoB,CAAC;IACvB;EACF;EAEAtC,YAAYA,CAACD,SAAkB,EAAE;IAC/B,IAAI,IAAI,CAACwC,OAAO,KAAKxC,SAAS,EAAE;MAC9B,IAAI,CAACwC,OAAO,GAAGxC,SAAS;MACxB,IAAI,CAACyC,mBAAmB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrC,IAAI,IAAI,CAACX,UAAU,EAAE;QAAA,IAAAY,qBAAA;QACnB,CAAAA,qBAAA,OAAI,CAACC,uBAAuB,cAAAD,qBAAA,eAA5BA,qBAAA,CAAAL,IAAA,KAA+B,CAAC;MAClC;IACF;EACF;AACF","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Platform","StyleSheet","View","LocalVideoTrack","TrackEvent","RTCView","RTCPIPView","forwardRef","useCallback","useEffect","useMemo","useState","RemoteVideoTrack","ViewPortDetector","jsx","_jsx","VideoTrack","style","trackRef","objectFit","zOrder","mirror","iosPIP","ref","elementInfo","info","VideoTrackElementInfo","id","publication","trackSid","layoutOnChange","event","onLayout","iosPIPEnabled","enabled","visibilityOnChange","isVisible","onVisibility","videoTrack","track","shouldObserveVisibility","isAdaptiveStream","mediaStream","setMediaStream","onRestarted","on","Restarted","off","observeElementInfo","stopObservingElementInfo","videoView","OS","styles","streamURL","toURL","container","children","onChange","disabled","propKey","create","flex","width","element","_width","_height","_observing","visible","pictureInPicture","height","observe","stopObserving","nativeEvent","layout","handleResize","visibilityChangedAt","Date","now","handleVisibilityChanged"],"sourceRoot":"../../../src","sources":["components/VideoTrack.tsx"],"mappings":"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","ignoreList":[]}
|