@livekit/react-native 2.9.6 → 2.9.7
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 +11 -17
- 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 +3 -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 +13 -17
- 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 +4 -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 +1 -0
- 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} +1 -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 -56
- package/src/audio/MediaRecorder.ts +2 -2
- 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/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,6 +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); }
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
4
3
|
import { addListener } from '../events/EventEmitter';
|
|
5
4
|
import { EventTarget, Event, defineEventAttribute } from 'event-target-shim/index';
|
|
6
5
|
import { toByteArray } from 'base64-js';
|
|
@@ -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
|
}
|
|
@@ -104,10 +100,10 @@ export class MediaRecorder extends EventTarget {
|
|
|
104
100
|
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/track_event MDN} for details.
|
|
105
101
|
*/
|
|
106
102
|
class BlobEvent extends Event {
|
|
103
|
+
/** @eventProperty */
|
|
104
|
+
|
|
107
105
|
constructor(type, eventInitDict) {
|
|
108
106
|
super(type, eventInitDict);
|
|
109
|
-
/** @eventProperty */
|
|
110
|
-
_defineProperty(this, "data", void 0);
|
|
111
107
|
this.data = eventInitDict.data;
|
|
112
108
|
}
|
|
113
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["addListener","EventTarget","Event","defineEventAttribute","toByteArray","LiveKitModule","log","MediaRecorder","
|
|
1
|
+
{"version":3,"names":["addListener","EventTarget","Event","defineEventAttribute","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","type","eventInitDict","proto","prototype"],"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":"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","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":";;AAAA,SAEEA,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;AAHA,SAAAC,GAAA,IAAAC,IAAA;AAgGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,gBAAGT,UAAU,CAClC,CACE;EACEU,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,GAAGb,QAAQ,CAAC,MAAM;IACnC,IAAIc,IAAI,GAAG,IAAIC,qBAAqB,CAAC,CAAC;IACtCD,IAAI,CAACE,EAAE,GAAGT,QAAQ,EAAEU,WAAW,EAAEC,QAAQ;IACzC,OAAOJ,IAAI;EACb,CAAC,CAAC;EAEF,MAAMK,cAAc,GAAGtB,WAAW,CAC/BuB,KAAwB,IAAKP,WAAW,CAACQ,QAAQ,CAACD,KAAK,CAAC,EACzD,CAACP,WAAW,CACd,CAAC;EAED,MAAMS,aAAa,GAAGX,MAAM,EAAEY,OAAO,IAAI,KAAK;EAC9C,MAAMC,kBAAkB,GAAG3B,WAAW,CACnC4B,SAAkB,IACjBZ,WAAW,CAACa,YAAY,CAACD,SAAS,IAAIH,aAAa,CAAC,EACtD,CAACT,WAAW,EAAES,aAAa,CAC7B,CAAC;EAED,MAAMK,UAAU,GAAGpB,QAAQ,EAAEU,WAAW,CAACW,KAAK;EAE9C,MAAMC,uBAAuB,GAAG9B,OAAO,CAAC,MAAM;IAC5C,OACE4B,UAAU,YAAY1B,gBAAgB,IAAI0B,UAAU,CAACG,gBAAgB;EAEzE,CAAC,EAAE,CAACH,UAAU,CAAC,CAAC;EAEhB,MAAM,CAACI,WAAW,EAAEC,cAAc,CAAC,GAAGhC,QAAQ,CAAC2B,UAAU,EAAEI,WAAW,CAAC;EACvEjC,SAAS,CAAC,MAAM;IACdkC,cAAc,CAACL,UAAU,EAAEI,WAAW,CAAC;IACvC,IAAIJ,UAAU,YAAYnC,eAAe,EAAE;MACzC,MAAMyC,WAAW,GAAIL,KAAmB,IAAK;QAC3CI,cAAc,CAACJ,KAAK,EAAEG,WAAW,CAAC;MACpC,CAAC;MACDJ,UAAU,CAACO,EAAE,CAACzC,UAAU,CAAC0C,SAAS,EAAEF,WAAW,CAAC;MAEhD,OAAO,MAAM;QACXN,UAAU,CAACS,GAAG,CAAC3C,UAAU,CAAC0C,SAAS,EAAEF,WAAW,CAAC;MACnD,CAAC;IACH,CAAC,MAAM;MACL,OAAO,MAAM,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,CAACN,UAAU,CAAC,CAAC;EAEhB7B,SAAS,CAAC,MAAM;IACd,IACE6B,UAAU,YAAY1B,gBAAgB,IACtC0B,UAAU,CAACG,gBAAgB,EAC3B;MACAH,UAAU,EAAEU,kBAAkB,CAACxB,WAAW,CAAC;MAC3C,OAAO,MAAM;QACXc,UAAU,EAAEW,wBAAwB,CAACzB,WAAW,CAAC;MACnD,CAAC;IACH,CAAC,MAAM;MACL,OAAO,MAAM,CAAC,CAAC;IACjB;EACF,CAAC,EAAE,CAACc,UAAU,EAAEd,WAAW,CAAC,CAAC;EAE7B,IAAI0B,SAAS;EACb,IAAI,CAAC5B,MAAM,IAAItB,QAAQ,CAACmD,EAAE,KAAK,KAAK,EAAE;IACpCD,SAAS,gBACPnC,IAAA,CAACV,OAAO;MACNY,KAAK,EAAEmC,MAAM,CAACd;MACd;MAAA;MACAe,SAAS,EAAEX,WAAW,EAAEY,KAAK,CAAC,CAAC,IAAI,EAAG;MACtCnC,SAAS,EAAEA,SAAU;MACrBC,MAAM,EAAEA,MAAO;MACfC,MAAM,EAAEA;MACR;MAAA;MACAE,GAAG,EAAEA;IAAI,CACV,CACF;EACH,CAAC,MAAM;IACL2B,SAAS,gBACPnC,IAAA,CAACT,UAAU;MACTW,KAAK,EAAEmC,MAAM,CAACd;MACd;MAAA;MACAe,SAAS,EAAEX,WAAW,EAAEY,KAAK,CAAC,CAAC,IAAI,EAAG;MACtCnC,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,oBACER,IAAA,CAACb,IAAI;IAACe,KAAK,EAAE;MAAE,GAAGA,KAAK;MAAE,GAAGmC,MAAM,CAACG;IAAU,CAAE;IAACvB,QAAQ,EAAEF,cAAe;IAAA0B,QAAA,eACvEzC,IAAA,CAACF,gBAAgB;MACf4C,QAAQ,EAAEtB,kBAAmB;MAC7BlB,KAAK,EAAEmC,MAAM,CAACd,UAAW;MACzBoB,QAAQ,EAAE,CAAClB,uBAAwB;MACnCmB,OAAO,EAAErB,UAAW;MAAAkB,QAAA,EAEnBN;IAAS,CACM;EAAC,CACf,CAAC;AAEX,CACF,CAAC;AAED,MAAME,MAAM,GAAGnD,UAAU,CAAC2D,MAAM,CAAC;EAC/BL,SAAS,EAAE,CAAC,CAAC;EACbjB,UAAU,EAAE;IACVuB,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,MAAMpC,qBAAqB,CAAwB;EACjDqC,OAAO,GAAW,CAAC,CAAC;EAGpBC,MAAM,GAAG,CAAC;EACVC,OAAO,GAAG,CAAC;EACXC,UAAU,GAAG,KAAK;EAClBC,OAAO,GAAY,IAAI;EAEvBC,gBAAgB,GAAG,KAAK;EAGxBN,KAAK,GAAGA,CAAA,KAAM,IAAI,CAACE,MAAM;EACzBK,MAAM,GAAGA,CAAA,KAAM,IAAI,CAACJ,OAAO;EAE3BK,OAAOA,CAAA,EAAS;IACd,IAAI,CAACJ,UAAU,GAAG,IAAI;EACxB;EAEAK,aAAaA,CAAA,EAAS;IACpB,IAAI,CAACL,UAAU,GAAG,KAAK;EACzB;EAEAlC,QAAQA,CAACD,KAAwB,EAAE;IACjC,IAAI;MAAE+B,KAAK;MAAEO;IAAO,CAAC,GAAGtC,KAAK,CAACyC,WAAW,CAACC,MAAM;IAChD,IAAI,CAACT,MAAM,GAAGF,KAAK;IACnB,IAAI,CAACG,OAAO,GAAGI,MAAM;IAErB,IAAI,IAAI,CAACH,UAAU,EAAE;MACnB,IAAI,CAACQ,YAAY,GAAG,CAAC;IACvB;EACF;EAEArC,YAAYA,CAACD,SAAkB,EAAE;IAC/B,IAAI,IAAI,CAAC+B,OAAO,KAAK/B,SAAS,EAAE;MAC9B,IAAI,CAAC+B,OAAO,GAAG/B,SAAS;MACxB,IAAI,CAACuC,mBAAmB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrC,IAAI,IAAI,CAACX,UAAU,EAAE;QACnB,IAAI,CAACY,uBAAuB,GAAG,CAAC;MAClC;IACF;EACF;AACF","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 { StyleSheet, View } from 'react-native';
|
|
6
4
|
import { LocalVideoTrack, TrackEvent } from 'livekit-client';
|
|
7
5
|
import { RTCView } from '@livekit/react-native-webrtc';
|
|
@@ -12,7 +10,7 @@ import ViewPortDetector from './ViewPortDetector';
|
|
|
12
10
|
/**
|
|
13
11
|
* @deprecated use `VideoTrack` and `VideoTrackProps` instead.
|
|
14
12
|
*/
|
|
15
|
-
|
|
13
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
14
|
/**
|
|
17
15
|
* @deprecated use `VideoTrack` and `VideoTrackProps` instead.
|
|
18
16
|
*/
|
|
@@ -25,7 +23,7 @@ export const VideoView = ({
|
|
|
25
23
|
}) => {
|
|
26
24
|
const [elementInfo] = useState(() => {
|
|
27
25
|
let info = new VideoViewElementInfo();
|
|
28
|
-
info.id = videoTrack
|
|
26
|
+
info.id = videoTrack?.sid;
|
|
29
27
|
info.something = videoTrack;
|
|
30
28
|
return info;
|
|
31
29
|
});
|
|
@@ -34,12 +32,12 @@ export const VideoView = ({
|
|
|
34
32
|
const shouldObserveVisibility = useMemo(() => {
|
|
35
33
|
return videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream;
|
|
36
34
|
}, [videoTrack]);
|
|
37
|
-
const [mediaStream, setMediaStream] = useState(videoTrack
|
|
35
|
+
const [mediaStream, setMediaStream] = useState(videoTrack?.mediaStream);
|
|
38
36
|
useEffect(() => {
|
|
39
|
-
setMediaStream(videoTrack
|
|
37
|
+
setMediaStream(videoTrack?.mediaStream);
|
|
40
38
|
if (videoTrack instanceof LocalVideoTrack) {
|
|
41
39
|
const onRestarted = track => {
|
|
42
|
-
setMediaStream(track
|
|
40
|
+
setMediaStream(track?.mediaStream);
|
|
43
41
|
};
|
|
44
42
|
videoTrack.on(TrackEvent.Restarted, onRestarted);
|
|
45
43
|
return () => {
|
|
@@ -51,34 +49,36 @@ export const VideoView = ({
|
|
|
51
49
|
}, [videoTrack]);
|
|
52
50
|
useEffect(() => {
|
|
53
51
|
if (videoTrack instanceof RemoteVideoTrack && videoTrack.isAdaptiveStream) {
|
|
54
|
-
videoTrack
|
|
52
|
+
videoTrack?.observeElementInfo(elementInfo);
|
|
55
53
|
return () => {
|
|
56
|
-
videoTrack
|
|
54
|
+
videoTrack?.stopObservingElementInfo(elementInfo);
|
|
57
55
|
};
|
|
58
56
|
} else {
|
|
59
57
|
return () => {};
|
|
60
58
|
}
|
|
61
59
|
}, [videoTrack, elementInfo]);
|
|
62
|
-
return /*#__PURE__*/
|
|
60
|
+
return /*#__PURE__*/_jsx(View, {
|
|
63
61
|
style: {
|
|
64
62
|
...style,
|
|
65
63
|
...styles.container
|
|
66
64
|
},
|
|
67
|
-
onLayout: layoutOnChange
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
65
|
+
onLayout: layoutOnChange,
|
|
66
|
+
children: /*#__PURE__*/_jsx(ViewPortDetector, {
|
|
67
|
+
onChange: visibilityOnChange,
|
|
68
|
+
style: styles.videoView,
|
|
69
|
+
disabled: !shouldObserveVisibility,
|
|
70
|
+
propKey: videoTrack,
|
|
71
|
+
children: /*#__PURE__*/_jsx(RTCView, {
|
|
72
|
+
style: styles.videoView
|
|
73
|
+
// @ts-expect-error
|
|
74
|
+
,
|
|
75
|
+
streamURL: mediaStream?.toURL() ?? '',
|
|
76
|
+
objectFit: objectFit,
|
|
77
|
+
zOrder: zOrder,
|
|
78
|
+
mirror: mirror
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
82
|
};
|
|
83
83
|
const styles = StyleSheet.create({
|
|
84
84
|
container: {},
|
|
@@ -88,21 +88,14 @@ const styles = StyleSheet.create({
|
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
90
|
class VideoViewElementInfo {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
_defineProperty(this, "visibilityChangedAt", void 0);
|
|
100
|
-
_defineProperty(this, "pictureInPicture", false);
|
|
101
|
-
_defineProperty(this, "handleResize", void 0);
|
|
102
|
-
_defineProperty(this, "handleVisibilityChanged", void 0);
|
|
103
|
-
_defineProperty(this, "width", () => this._width);
|
|
104
|
-
_defineProperty(this, "height", () => this._height);
|
|
105
|
-
}
|
|
91
|
+
element = {};
|
|
92
|
+
_width = 0;
|
|
93
|
+
_height = 0;
|
|
94
|
+
_observing = false;
|
|
95
|
+
visible = true;
|
|
96
|
+
pictureInPicture = false;
|
|
97
|
+
width = () => this._width;
|
|
98
|
+
height = () => this._height;
|
|
106
99
|
observe() {
|
|
107
100
|
this._observing = true;
|
|
108
101
|
}
|
|
@@ -117,8 +110,7 @@ class VideoViewElementInfo {
|
|
|
117
110
|
this._width = width;
|
|
118
111
|
this._height = height;
|
|
119
112
|
if (this._observing) {
|
|
120
|
-
|
|
121
|
-
(_this$handleResize = this.handleResize) === null || _this$handleResize === void 0 || _this$handleResize.call(this);
|
|
113
|
+
this.handleResize?.();
|
|
122
114
|
}
|
|
123
115
|
}
|
|
124
116
|
onVisibility(isVisible) {
|
|
@@ -126,8 +118,7 @@ class VideoViewElementInfo {
|
|
|
126
118
|
this.visible = isVisible;
|
|
127
119
|
this.visibilityChangedAt = Date.now();
|
|
128
120
|
if (this._observing) {
|
|
129
|
-
|
|
130
|
-
(_this$handleVisibilit = this.handleVisibilityChanged) === null || _this$handleVisibilit === void 0 || _this$handleVisibilit.call(this);
|
|
121
|
+
this.handleVisibilityChanged?.();
|
|
131
122
|
}
|
|
132
123
|
}
|
|
133
124
|
}
|