@livekit/react-native 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/android/build.gradle +2 -1
- package/android/src/main/java/com/livekit/reactnative/LiveKitReactNative.kt +61 -5
- package/android/src/main/java/com/livekit/reactnative/LivekitReactNativeModule.kt +81 -4
- package/android/src/main/java/com/livekit/reactnative/audio/events/Events.kt +6 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/AudioFormat.kt +2 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/AudioProcessingController.kt +27 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/AudioProcessorInterface.kt +52 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/AudioRecordSamplesDispatcher.kt +72 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/AudioSinkManager.kt +75 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/CustomAudioProcessingFactory.kt +78 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/MultibandVolumeProcessor.kt +181 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/VolumeProcessor.kt +67 -0
- package/android/src/main/java/com/livekit/reactnative/audio/processing/fft/FFTAudioAnalyzer.kt +224 -0
- package/ios/LKAudioProcessingAdapter.h +26 -0
- package/ios/LKAudioProcessingAdapter.m +117 -0
- package/ios/LKAudioProcessingManager.h +34 -0
- package/ios/LKAudioProcessingManager.m +63 -0
- package/ios/LivekitReactNative-Bridging-Header.h +2 -0
- package/ios/LivekitReactNative.h +9 -4
- package/ios/LivekitReactNative.m +83 -5
- package/ios/Logging.swift +4 -0
- package/ios/audio/AVAudioPCMBuffer.swift +136 -0
- package/ios/audio/AudioProcessing.swift +163 -0
- package/ios/audio/AudioRendererManager.swift +72 -0
- package/ios/audio/FFTProcessor.swift +147 -0
- package/ios/audio/MultibandVolumeAudioRenderer.swift +65 -0
- package/ios/audio/RingBuffer.swift +51 -0
- package/ios/audio/VolumeAudioRenderer.swift +48 -0
- package/lib/commonjs/LKNativeModule.js +18 -0
- package/lib/commonjs/LKNativeModule.js.map +1 -0
- package/lib/commonjs/components/BarVisualizer.js +192 -0
- package/lib/commonjs/components/BarVisualizer.js.map +1 -0
- package/lib/commonjs/events/EventEmitter.js +45 -0
- package/lib/commonjs/events/EventEmitter.js.map +1 -0
- package/lib/commonjs/hooks/useMultibandTrackVolume.js +64 -0
- package/lib/commonjs/hooks/useMultibandTrackVolume.js.map +1 -0
- package/lib/commonjs/hooks/useTrackVolume.js +45 -0
- package/lib/commonjs/hooks/useTrackVolume.js.map +1 -0
- package/lib/commonjs/hooks.js +24 -0
- package/lib/commonjs/hooks.js.map +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/LKNativeModule.js +12 -0
- package/lib/module/LKNativeModule.js.map +1 -0
- package/lib/module/components/BarVisualizer.js +182 -0
- package/lib/module/components/BarVisualizer.js.map +1 -0
- package/lib/module/events/EventEmitter.js +36 -0
- package/lib/module/events/EventEmitter.js.map +1 -0
- package/lib/module/hooks/useMultibandTrackVolume.js +58 -0
- package/lib/module/hooks/useMultibandTrackVolume.js.map +1 -0
- package/lib/module/hooks/useTrackVolume.js +39 -0
- package/lib/module/hooks/useTrackVolume.js.map +1 -0
- package/lib/module/hooks.js +2 -0
- package/lib/module/hooks.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/LKNativeModule.d.ts +3 -0
- package/lib/typescript/lib/commonjs/components/BarVisualizer.d.ts +32 -0
- package/lib/typescript/lib/commonjs/events/EventEmitter.d.ts +4 -0
- package/lib/typescript/lib/commonjs/hooks/useMultibandTrackVolume.d.ts +8 -0
- package/lib/typescript/lib/commonjs/hooks/useTrackVolume.d.ts +8 -0
- package/lib/typescript/lib/module/LKNativeModule.d.ts +2 -0
- package/lib/typescript/lib/module/components/BarVisualizer.d.ts +10 -0
- package/lib/typescript/lib/module/events/EventEmitter.d.ts +3 -0
- package/lib/typescript/lib/module/hooks/useMultibandTrackVolume.d.ts +7 -0
- package/lib/typescript/lib/module/hooks/useTrackVolume.d.ts +7 -0
- package/lib/typescript/lib/module/hooks.d.ts +2 -0
- package/lib/typescript/lib/module/index.d.ts +1 -0
- package/lib/typescript/src/LKNativeModule.d.ts +2 -0
- package/lib/typescript/src/components/BarVisualizer.d.ts +49 -0
- package/lib/typescript/src/events/EventEmitter.d.ts +6 -0
- package/lib/typescript/src/hooks/useMultibandTrackVolume.d.ts +31 -0
- package/lib/typescript/src/hooks/useTrackVolume.d.ts +9 -0
- package/lib/typescript/src/hooks.d.ts +2 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/livekit-react-native.podspec +1 -1
- package/package.json +7 -6
- package/src/LKNativeModule.ts +19 -0
- package/src/components/BarVisualizer.tsx +252 -0
- package/src/events/EventEmitter.ts +51 -0
- package/src/hooks/useMultibandTrackVolume.ts +97 -0
- package/src/hooks/useTrackVolume.ts +62 -0
- package/src/hooks.ts +2 -0
- package/src/index.tsx +3 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Track } from 'livekit-client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { addListener, removeListener } from '../events/EventEmitter';
|
|
4
|
+
import LiveKitModule from '../LKNativeModule';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A hook for tracking the volume of an audio track.
|
|
8
|
+
*
|
|
9
|
+
* @param trackOrTrackReference
|
|
10
|
+
* @returns A number between 0-1 representing the volume.
|
|
11
|
+
*/
|
|
12
|
+
export function useTrackVolume(trackOrTrackReference) {
|
|
13
|
+
var _trackOrTrackReferenc;
|
|
14
|
+
const track = trackOrTrackReference instanceof Track ? trackOrTrackReference : trackOrTrackReference === null || trackOrTrackReference === void 0 || (_trackOrTrackReferenc = trackOrTrackReference.publication) === null || _trackOrTrackReferenc === void 0 ? void 0 : _trackOrTrackReferenc.track;
|
|
15
|
+
const mediaStreamTrack = track === null || track === void 0 ? void 0 : track.mediaStreamTrack;
|
|
16
|
+
let [volume, setVolume] = useState(0.0);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
let listener = Object();
|
|
19
|
+
let reactTag = null;
|
|
20
|
+
if (mediaStreamTrack) {
|
|
21
|
+
reactTag = LiveKitModule.createVolumeProcessor(mediaStreamTrack._peerConnectionId ?? -1, mediaStreamTrack.id);
|
|
22
|
+
addListener(listener, 'LK_VOLUME_PROCESSED', event => {
|
|
23
|
+
if (event.volume && reactTag && event.id === reactTag) {
|
|
24
|
+
setVolume(event.volume);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return () => {
|
|
29
|
+
if (mediaStreamTrack) {
|
|
30
|
+
removeListener(listener);
|
|
31
|
+
if (reactTag) {
|
|
32
|
+
LiveKitModule.deleteVolumeProcessor(reactTag, mediaStreamTrack._peerConnectionId ?? -1, mediaStreamTrack.id);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}, [mediaStreamTrack]);
|
|
37
|
+
return volume;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=useTrackVolume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Track","useEffect","useState","addListener","removeListener","LiveKitModule","useTrackVolume","trackOrTrackReference","_trackOrTrackReferenc","track","publication","mediaStreamTrack","volume","setVolume","listener","Object","reactTag","createVolumeProcessor","_peerConnectionId","id","event","deleteVolumeProcessor"],"sources":["useTrackVolume.ts"],"sourcesContent":["import { type TrackReferenceOrPlaceholder } from '@livekit/components-react';\nimport {\n Track,\n type LocalAudioTrack,\n type RemoteAudioTrack,\n} from 'livekit-client';\nimport { useEffect, useState } from 'react';\nimport { addListener, removeListener } from '../events/EventEmitter';\nimport LiveKitModule from '../LKNativeModule';\n\n/**\n * A hook for tracking the volume of an audio track.\n *\n * @param trackOrTrackReference\n * @returns A number between 0-1 representing the volume.\n */\nexport function useTrackVolume(\n trackOrTrackReference?:\n | LocalAudioTrack\n | RemoteAudioTrack\n | TrackReferenceOrPlaceholder\n) {\n const track =\n trackOrTrackReference instanceof Track\n ? trackOrTrackReference\n : <LocalAudioTrack | RemoteAudioTrack | undefined>(\n trackOrTrackReference?.publication?.track\n );\n\n const mediaStreamTrack = track?.mediaStreamTrack;\n\n let [volume, setVolume] = useState(0.0);\n useEffect(() => {\n let listener = Object();\n let reactTag: string | null = null;\n if (mediaStreamTrack) {\n reactTag = LiveKitModule.createVolumeProcessor(\n mediaStreamTrack._peerConnectionId ?? -1,\n mediaStreamTrack.id\n );\n addListener(listener, 'LK_VOLUME_PROCESSED', (event: any) => {\n if (event.volume && reactTag && event.id === reactTag) {\n setVolume(event.volume);\n }\n });\n }\n return () => {\n if (mediaStreamTrack) {\n removeListener(listener);\n if (reactTag) {\n LiveKitModule.deleteVolumeProcessor(\n reactTag,\n mediaStreamTrack._peerConnectionId ?? -1,\n mediaStreamTrack.id\n );\n }\n }\n };\n }, [mediaStreamTrack]);\n\n return volume;\n}\n"],"mappings":"AACA,SACEA,KAAK,QAGA,gBAAgB;AACvB,SAASC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,WAAW,EAAEC,cAAc,QAAQ,wBAAwB;AACpE,OAAOC,aAAa,MAAM,mBAAmB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAC5BC,qBAG+B,EAC/B;EAAA,IAAAC,qBAAA;EACA,MAAMC,KAAK,GACTF,qBAAqB,YAAYP,KAAK,GAClCO,qBAAqB,GAEnBA,qBAAqB,aAArBA,qBAAqB,gBAAAC,qBAAA,GAArBD,qBAAqB,CAAEG,WAAW,cAAAF,qBAAA,uBAAlCA,qBAAA,CAAoCC,KACrC;EAEP,MAAME,gBAAgB,GAAGF,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEE,gBAAgB;EAEhD,IAAI,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGX,QAAQ,CAAC,GAAG,CAAC;EACvCD,SAAS,CAAC,MAAM;IACd,IAAIa,QAAQ,GAAGC,MAAM,CAAC,CAAC;IACvB,IAAIC,QAAuB,GAAG,IAAI;IAClC,IAAIL,gBAAgB,EAAE;MACpBK,QAAQ,GAAGX,aAAa,CAACY,qBAAqB,CAC5CN,gBAAgB,CAACO,iBAAiB,IAAI,CAAC,CAAC,EACxCP,gBAAgB,CAACQ,EACnB,CAAC;MACDhB,WAAW,CAACW,QAAQ,EAAE,qBAAqB,EAAGM,KAAU,IAAK;QAC3D,IAAIA,KAAK,CAACR,MAAM,IAAII,QAAQ,IAAII,KAAK,CAACD,EAAE,KAAKH,QAAQ,EAAE;UACrDH,SAAS,CAACO,KAAK,CAACR,MAAM,CAAC;QACzB;MACF,CAAC,CAAC;IACJ;IACA,OAAO,MAAM;MACX,IAAID,gBAAgB,EAAE;QACpBP,cAAc,CAACU,QAAQ,CAAC;QACxB,IAAIE,QAAQ,EAAE;UACZX,aAAa,CAACgB,qBAAqB,CACjCL,QAAQ,EACRL,gBAAgB,CAACO,iBAAiB,IAAI,CAAC,CAAC,EACxCP,gBAAgB,CAACQ,EACnB,CAAC;QACH;MACF;IACF,CAAC;EACH,CAAC,EAAE,CAACR,gBAAgB,CAAC,CAAC;EAEtB,OAAOC,MAAM;AACf","ignoreList":[]}
|
package/lib/module/hooks.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { useConnectionState, useDataChannel, useIsSpeaking, useLocalParticipant, useLocalParticipantPermissions, useParticipantInfo, useParticipants, useRemoteParticipants, useRemoteParticipant, useSpeakingParticipants, useSortedParticipants, useChat, useIsEncrypted, useRoomInfo, useIsMuted, useParticipantTracks, useLiveKitRoom, RoomContext, useRoomContext, ParticipantContext, useParticipantContext, TrackRefContext, useTrackRefContext, useTracks, isTrackReference, useEnsureTrackRef, useTrackMutedIndicator, useVisualStableUpdate } from '@livekit/components-react';
|
|
2
2
|
export * from './hooks/useE2EEManager';
|
|
3
|
+
export * from './hooks/useTrackVolume';
|
|
4
|
+
export * from './hooks/useMultibandTrackVolume';
|
|
3
5
|
//# sourceMappingURL=hooks.js.map
|
package/lib/module/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useConnectionState","useDataChannel","useIsSpeaking","useLocalParticipant","useLocalParticipantPermissions","useParticipantInfo","useParticipants","useRemoteParticipants","useRemoteParticipant","useSpeakingParticipants","useSortedParticipants","useChat","useIsEncrypted","useRoomInfo","useIsMuted","useParticipantTracks","useLiveKitRoom","RoomContext","useRoomContext","ParticipantContext","useParticipantContext","TrackRefContext","useTrackRefContext","useTracks","isTrackReference","useEnsureTrackRef","useTrackMutedIndicator","useVisualStableUpdate"],"sources":["hooks.ts"],"sourcesContent":["export {\n useConnectionState,\n useDataChannel,\n useIsSpeaking,\n useLocalParticipant,\n useLocalParticipantPermissions,\n useParticipantInfo,\n useParticipants,\n useRemoteParticipants,\n useRemoteParticipant,\n useSpeakingParticipants,\n useSortedParticipants,\n useChat,\n useIsEncrypted,\n useRoomInfo,\n useIsMuted,\n useParticipantTracks,\n useLiveKitRoom,\n RoomContext,\n useRoomContext,\n ParticipantContext,\n useParticipantContext,\n TrackRefContext,\n useTrackRefContext,\n useTracks,\n isTrackReference,\n useEnsureTrackRef,\n useTrackMutedIndicator,\n useVisualStableUpdate,\n} from '@livekit/components-react';\nexport type {\n UseLocalParticipantOptions,\n UseParticipantInfoOptions,\n UseParticipantsOptions,\n UseRemoteParticipantOptions,\n UseRemoteParticipantsOptions,\n UseTracksOptions,\n TrackReference,\n TrackReferenceOrPlaceholder,\n UseVisualStableUpdateOptions,\n} from '@livekit/components-react';\n\nexport type { ReceivedDataMessage } from '@livekit/components-core';\nexport * from './hooks/useE2EEManager';\nexport type { UseRNE2EEManagerOptions } from './hooks/useE2EEManager';\n"],"mappings":"AAAA,SACEA,kBAAkB,EAClBC,cAAc,EACdC,aAAa,EACbC,mBAAmB,EACnBC,8BAA8B,EAC9BC,kBAAkB,EAClBC,eAAe,EACfC,qBAAqB,EACrBC,oBAAoB,EACpBC,uBAAuB,EACvBC,qBAAqB,EACrBC,OAAO,EACPC,cAAc,EACdC,WAAW,EACXC,UAAU,EACVC,oBAAoB,EACpBC,cAAc,EACdC,WAAW,EACXC,cAAc,EACdC,kBAAkB,EAClBC,qBAAqB,EACrBC,eAAe,EACfC,kBAAkB,EAClBC,SAAS,EACTC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,qBAAqB,QAChB,2BAA2B;AAclC,cAAc,wBAAwB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useConnectionState","useDataChannel","useIsSpeaking","useLocalParticipant","useLocalParticipantPermissions","useParticipantInfo","useParticipants","useRemoteParticipants","useRemoteParticipant","useSpeakingParticipants","useSortedParticipants","useChat","useIsEncrypted","useRoomInfo","useIsMuted","useParticipantTracks","useLiveKitRoom","RoomContext","useRoomContext","ParticipantContext","useParticipantContext","TrackRefContext","useTrackRefContext","useTracks","isTrackReference","useEnsureTrackRef","useTrackMutedIndicator","useVisualStableUpdate"],"sources":["hooks.ts"],"sourcesContent":["export {\n useConnectionState,\n useDataChannel,\n useIsSpeaking,\n useLocalParticipant,\n useLocalParticipantPermissions,\n useParticipantInfo,\n useParticipants,\n useRemoteParticipants,\n useRemoteParticipant,\n useSpeakingParticipants,\n useSortedParticipants,\n useChat,\n useIsEncrypted,\n useRoomInfo,\n useIsMuted,\n useParticipantTracks,\n useLiveKitRoom,\n RoomContext,\n useRoomContext,\n ParticipantContext,\n useParticipantContext,\n TrackRefContext,\n useTrackRefContext,\n useTracks,\n isTrackReference,\n useEnsureTrackRef,\n useTrackMutedIndicator,\n useVisualStableUpdate,\n} from '@livekit/components-react';\nexport type {\n UseLocalParticipantOptions,\n UseParticipantInfoOptions,\n UseParticipantsOptions,\n UseRemoteParticipantOptions,\n UseRemoteParticipantsOptions,\n UseTracksOptions,\n TrackReference,\n TrackReferenceOrPlaceholder,\n UseVisualStableUpdateOptions,\n} from '@livekit/components-react';\n\nexport type { ReceivedDataMessage } from '@livekit/components-core';\nexport * from './hooks/useE2EEManager';\nexport * from './hooks/useTrackVolume';\nexport * from './hooks/useMultibandTrackVolume';\nexport type { UseRNE2EEManagerOptions } from './hooks/useE2EEManager';\n"],"mappings":"AAAA,SACEA,kBAAkB,EAClBC,cAAc,EACdC,aAAa,EACbC,mBAAmB,EACnBC,8BAA8B,EAC9BC,kBAAkB,EAClBC,eAAe,EACfC,qBAAqB,EACrBC,oBAAoB,EACpBC,uBAAuB,EACvBC,qBAAqB,EACrBC,OAAO,EACPC,cAAc,EACdC,WAAW,EACXC,UAAU,EACVC,oBAAoB,EACpBC,cAAc,EACdC,WAAW,EACXC,cAAc,EACdC,kBAAkB,EAClBC,qBAAqB,EACrBC,eAAe,EACfC,kBAAkB,EAClBC,SAAS,EACTC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,qBAAqB,QAChB,2BAA2B;AAclC,cAAc,wBAAwB;AACtC,cAAc,wBAAwB;AACtC,cAAc,iCAAiC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import AudioSession, { AndroidAudioTypePresets, getDefaultAppleAudioConfiguratio
|
|
|
5
5
|
import { PixelRatio, Platform } from 'react-native';
|
|
6
6
|
import RNE2EEManager from './e2ee/RNE2EEManager';
|
|
7
7
|
import RNKeyProvider from './e2ee/RNKeyProvider';
|
|
8
|
+
import { setupNativeEvents } from './events/EventEmitter';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Registers the required globals needed for LiveKit to work.
|
|
@@ -21,6 +22,7 @@ export function registerGlobals() {
|
|
|
21
22
|
shimArrayAt();
|
|
22
23
|
shimAsyncIterator();
|
|
23
24
|
shimIterator();
|
|
25
|
+
setupNativeEvents();
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
/**
|
|
@@ -83,6 +85,7 @@ function shimIterator() {
|
|
|
83
85
|
shim();
|
|
84
86
|
}
|
|
85
87
|
export * from './hooks';
|
|
88
|
+
export * from './components/BarVisualizer';
|
|
86
89
|
export * from './components/LiveKitRoom';
|
|
87
90
|
export * from './components/VideoTrack';
|
|
88
91
|
export * from './components/VideoView'; // deprecated
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerGlobals","webrtcRegisterGlobals","setupURLPolyfill","AudioSession","AndroidAudioTypePresets","getDefaultAppleAudioConfigurationForMode","PixelRatio","Platform","RNE2EEManager","RNKeyProvider","iosCategoryEnforce","livekitRegisterGlobals","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimAsyncIterator","shimIterator","OS","getUserMediaFunc","global","navigator","mediaDevices","getUserMedia","constraints","audio","setAppleAudioConfiguration","audioCategory","lkGlobal","platform","devicePixelRatio","get","LiveKitReactNativeGlobal","_window","window","undefined","userAgent","product","allSettled","require","shim","Array","prototype","at"],"sources":["index.tsx"],"sourcesContent":["import { registerGlobals as webrtcRegisterGlobals } from '@livekit/react-native-webrtc';\nimport { setupURLPolyfill } from 'react-native-url-polyfill';\nimport './polyfills/EncoderDecoderTogether.min.js';\nimport AudioSession, {\n AndroidAudioTypePresets,\n type AndroidAudioTypeOptions,\n type AppleAudioCategory,\n type AppleAudioCategoryOption,\n type AppleAudioConfiguration,\n type AppleAudioMode,\n type AudioTrackState,\n getDefaultAppleAudioConfigurationForMode,\n} from './audio/AudioSession';\nimport type { AudioConfiguration } from './audio/AudioSession';\nimport { PixelRatio, Platform } from 'react-native';\nimport { type LiveKitReactNativeInfo } from 'livekit-client';\nimport type { LogLevel, SetLogLevelOptions } from './logger';\nimport RNE2EEManager from './e2ee/RNE2EEManager';\nimport RNKeyProvider, { type RNKeyProviderOptions } from './e2ee/RNKeyProvider';\n\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n */\nexport function registerGlobals() {\n webrtcRegisterGlobals();\n iosCategoryEnforce();\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n shimAsyncIterator();\n shimIterator();\n}\n\n/**\n * Enforces changing to playAndRecord category prior to obtaining microphone.\n */\nfunction iosCategoryEnforce() {\n if (Platform.OS === 'ios') {\n // @ts-ignore\n let getUserMediaFunc = global.navigator.mediaDevices.getUserMedia;\n // @ts-ignore\n global.navigator.mediaDevices.getUserMedia = async (constraints: any) => {\n if (constraints.audio) {\n await AudioSession.setAppleAudioConfiguration({\n audioCategory: 'playAndRecord',\n });\n }\n\n return await getUserMediaFunc(constraints);\n };\n }\n}\n\nfunction livekitRegisterGlobals() {\n let lkGlobal: LiveKitReactNativeInfo = {\n platform: Platform.OS,\n devicePixelRatio: PixelRatio.get(),\n };\n\n // @ts-ignore\n global.LiveKitReactNativeGlobal = lkGlobal;\n}\n\nfunction fixWebrtcAdapter() {\n // @ts-ignore\n if (window?.navigator !== undefined) {\n // @ts-ignore\n const { navigator } = window;\n if (navigator.userAgent === undefined) {\n navigator.userAgent = navigator.product ?? 'Unknown';\n }\n }\n}\n\nfunction shimPromiseAllSettled() {\n var allSettled = require('promise.allsettled');\n allSettled.shim();\n}\n\nfunction shimArrayAt() {\n // Some versions of RN don't have Array.prototype.at, which is used by sdp-transform\n if (!Array.prototype.at) {\n var at = require('array.prototype.at');\n at.shim();\n }\n}\n\nfunction shimAsyncIterator() {\n var shim = require('well-known-symbols/Symbol.asyncIterator/shim');\n shim();\n}\n\nfunction shimIterator() {\n var shim = require('well-known-symbols/Symbol.iterator/shim');\n shim();\n}\nexport * from './hooks';\nexport * from './components/LiveKitRoom';\nexport * from './components/VideoTrack';\nexport * from './components/VideoView'; // deprecated\nexport * from './useParticipant'; // deprecated\nexport * from './useRoom'; // deprecated\nexport * from './logger';\nexport * from './audio/AudioManager';\n\nexport {\n AudioSession,\n RNE2EEManager,\n RNKeyProvider,\n AndroidAudioTypePresets,\n getDefaultAppleAudioConfigurationForMode,\n};\nexport type {\n AudioConfiguration,\n AndroidAudioTypeOptions,\n AppleAudioCategory,\n AppleAudioCategoryOption,\n AppleAudioConfiguration,\n AppleAudioMode,\n AudioTrackState,\n LogLevel,\n SetLogLevelOptions,\n RNKeyProviderOptions,\n};\n"],"mappings":"AAAA,SAASA,eAAe,IAAIC,qBAAqB,QAAQ,8BAA8B;AACvF,SAASC,gBAAgB,QAAQ,2BAA2B;AAC5D,OAAO,2CAA2C;AAClD,OAAOC,YAAY,IACjBC,uBAAuB,EAOvBC,wCAAwC,QACnC,sBAAsB;AAE7B,SAASC,UAAU,EAAEC,QAAQ,QAAQ,cAAc;AAGnD,OAAOC,aAAa,MAAM,sBAAsB;AAChD,OAAOC,aAAa,MAAqC,sBAAsB
|
|
1
|
+
{"version":3,"names":["registerGlobals","webrtcRegisterGlobals","setupURLPolyfill","AudioSession","AndroidAudioTypePresets","getDefaultAppleAudioConfigurationForMode","PixelRatio","Platform","RNE2EEManager","RNKeyProvider","setupNativeEvents","iosCategoryEnforce","livekitRegisterGlobals","fixWebrtcAdapter","shimPromiseAllSettled","shimArrayAt","shimAsyncIterator","shimIterator","OS","getUserMediaFunc","global","navigator","mediaDevices","getUserMedia","constraints","audio","setAppleAudioConfiguration","audioCategory","lkGlobal","platform","devicePixelRatio","get","LiveKitReactNativeGlobal","_window","window","undefined","userAgent","product","allSettled","require","shim","Array","prototype","at"],"sources":["index.tsx"],"sourcesContent":["import { registerGlobals as webrtcRegisterGlobals } from '@livekit/react-native-webrtc';\nimport { setupURLPolyfill } from 'react-native-url-polyfill';\nimport './polyfills/EncoderDecoderTogether.min.js';\nimport AudioSession, {\n AndroidAudioTypePresets,\n type AndroidAudioTypeOptions,\n type AppleAudioCategory,\n type AppleAudioCategoryOption,\n type AppleAudioConfiguration,\n type AppleAudioMode,\n type AudioTrackState,\n getDefaultAppleAudioConfigurationForMode,\n} from './audio/AudioSession';\nimport type { AudioConfiguration } from './audio/AudioSession';\nimport { PixelRatio, Platform } from 'react-native';\nimport { type LiveKitReactNativeInfo } from 'livekit-client';\nimport type { LogLevel, SetLogLevelOptions } from './logger';\nimport RNE2EEManager from './e2ee/RNE2EEManager';\nimport RNKeyProvider, { type RNKeyProviderOptions } from './e2ee/RNKeyProvider';\nimport { setupNativeEvents } from './events/EventEmitter';\n\n/**\n * Registers the required globals needed for LiveKit to work.\n *\n * Must be called before using LiveKit.\n */\nexport function registerGlobals() {\n webrtcRegisterGlobals();\n iosCategoryEnforce();\n livekitRegisterGlobals();\n setupURLPolyfill();\n fixWebrtcAdapter();\n shimPromiseAllSettled();\n shimArrayAt();\n shimAsyncIterator();\n shimIterator();\n setupNativeEvents();\n}\n\n/**\n * Enforces changing to playAndRecord category prior to obtaining microphone.\n */\nfunction iosCategoryEnforce() {\n if (Platform.OS === 'ios') {\n // @ts-ignore\n let getUserMediaFunc = global.navigator.mediaDevices.getUserMedia;\n // @ts-ignore\n global.navigator.mediaDevices.getUserMedia = async (constraints: any) => {\n if (constraints.audio) {\n await AudioSession.setAppleAudioConfiguration({\n audioCategory: 'playAndRecord',\n });\n }\n\n return await getUserMediaFunc(constraints);\n };\n }\n}\n\nfunction livekitRegisterGlobals() {\n let lkGlobal: LiveKitReactNativeInfo = {\n platform: Platform.OS,\n devicePixelRatio: PixelRatio.get(),\n };\n\n // @ts-ignore\n global.LiveKitReactNativeGlobal = lkGlobal;\n}\n\nfunction fixWebrtcAdapter() {\n // @ts-ignore\n if (window?.navigator !== undefined) {\n // @ts-ignore\n const { navigator } = window;\n if (navigator.userAgent === undefined) {\n navigator.userAgent = navigator.product ?? 'Unknown';\n }\n }\n}\n\nfunction shimPromiseAllSettled() {\n var allSettled = require('promise.allsettled');\n allSettled.shim();\n}\n\nfunction shimArrayAt() {\n // Some versions of RN don't have Array.prototype.at, which is used by sdp-transform\n if (!Array.prototype.at) {\n var at = require('array.prototype.at');\n at.shim();\n }\n}\n\nfunction shimAsyncIterator() {\n var shim = require('well-known-symbols/Symbol.asyncIterator/shim');\n shim();\n}\n\nfunction shimIterator() {\n var shim = require('well-known-symbols/Symbol.iterator/shim');\n shim();\n}\nexport * from './hooks';\nexport * from './components/BarVisualizer';\nexport * from './components/LiveKitRoom';\nexport * from './components/VideoTrack';\nexport * from './components/VideoView'; // deprecated\nexport * from './useParticipant'; // deprecated\nexport * from './useRoom'; // deprecated\nexport * from './logger';\nexport * from './audio/AudioManager';\n\nexport {\n AudioSession,\n RNE2EEManager,\n RNKeyProvider,\n AndroidAudioTypePresets,\n getDefaultAppleAudioConfigurationForMode,\n};\nexport type {\n AudioConfiguration,\n AndroidAudioTypeOptions,\n AppleAudioCategory,\n AppleAudioCategoryOption,\n AppleAudioConfiguration,\n AppleAudioMode,\n AudioTrackState,\n LogLevel,\n SetLogLevelOptions,\n RNKeyProviderOptions,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const __esModule: boolean;
|
|
2
|
+
/**
|
|
3
|
+
* @beta
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Visualizes audio signals from a TrackReference as bars.
|
|
7
|
+
* If the `state` prop is set, it automatically transitions between VoiceAssistant states.
|
|
8
|
+
* @beta
|
|
9
|
+
*
|
|
10
|
+
* @remarks For VoiceAssistant state transitions this component requires a voice assistant agent running with livekit-agents \>= 0.9.0
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* function SimpleVoiceAssistant() {
|
|
15
|
+
* const { state, audioTrack } = useVoiceAssistant();
|
|
16
|
+
* return (
|
|
17
|
+
* <BarVisualizer
|
|
18
|
+
* state={state}
|
|
19
|
+
* trackRef={audioTrack}
|
|
20
|
+
* />
|
|
21
|
+
* );
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function BarVisualizer({ style, state, barCount, trackRef, options }: {
|
|
26
|
+
style?: {} | undefined;
|
|
27
|
+
state: any;
|
|
28
|
+
barCount?: number | undefined;
|
|
29
|
+
trackRef: any;
|
|
30
|
+
options: any;
|
|
31
|
+
}): any;
|
|
32
|
+
export function useBarAnimator(state: any, columns: any, interval: any): any;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const __esModule: boolean;
|
|
2
|
+
/**
|
|
3
|
+
* A hook for tracking the volume of an audio track across multiple frequency bands.
|
|
4
|
+
*
|
|
5
|
+
* @param trackOrTrackReference
|
|
6
|
+
* @returns A number array containing the volume for each frequency band.
|
|
7
|
+
*/
|
|
8
|
+
export function useMultibandTrackVolume(trackOrTrackReference: any, options?: {}): any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function BarVisualizer({ style, state, barCount, trackRef, options }: {
|
|
2
|
+
style?: {} | undefined;
|
|
3
|
+
state: any;
|
|
4
|
+
barCount?: number | undefined;
|
|
5
|
+
trackRef: any;
|
|
6
|
+
options: any;
|
|
7
|
+
}): React.CElement<import("react-native").ViewProps, View>;
|
|
8
|
+
export function useBarAnimator(state: any, columns: any, interval: any): never[];
|
|
9
|
+
import { View } from 'react-native';
|
|
10
|
+
import React from 'react';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A hook for tracking the volume of an audio track across multiple frequency bands.
|
|
3
|
+
*
|
|
4
|
+
* @param trackOrTrackReference
|
|
5
|
+
* @returns A number array containing the volume for each frequency band.
|
|
6
|
+
*/
|
|
7
|
+
export function useMultibandTrackVolume(trackOrTrackReference: any, options?: {}): never[];
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export * from "./hooks/useE2EEManager";
|
|
2
|
+
export * from "./hooks/useTrackVolume";
|
|
3
|
+
export * from "./hooks/useMultibandTrackVolume";
|
|
2
4
|
export { useConnectionState, useDataChannel, useIsSpeaking, useLocalParticipant, useLocalParticipantPermissions, useParticipantInfo, useParticipants, useRemoteParticipants, useRemoteParticipant, useSpeakingParticipants, useSortedParticipants, useChat, useIsEncrypted, useRoomInfo, useIsMuted, useParticipantTracks, useLiveKitRoom, RoomContext, useRoomContext, ParticipantContext, useParticipantContext, TrackRefContext, useTrackRefContext, useTracks, isTrackReference, useEnsureTrackRef, useTrackMutedIndicator, useVisualStableUpdate } from "@livekit/components-react";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type AgentState, type TrackReferenceOrPlaceholder } from '@livekit/components-react';
|
|
2
|
+
import { type ColorValue, type DimensionValue, type ViewStyle } from 'react-native';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
export type BarVisualizerOptions = {
|
|
5
|
+
/** decimal values from 0 to 1 */
|
|
6
|
+
maxHeight?: number;
|
|
7
|
+
/** decimal values from 0 to 1 */
|
|
8
|
+
minHeight?: number;
|
|
9
|
+
barColor?: ColorValue;
|
|
10
|
+
barWidth?: DimensionValue;
|
|
11
|
+
barBorderRadius?: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* @beta
|
|
15
|
+
*/
|
|
16
|
+
export interface BarVisualizerProps {
|
|
17
|
+
/** If set, the visualizer will transition between different voice assistant states */
|
|
18
|
+
state?: AgentState;
|
|
19
|
+
/** Number of bars that show up in the visualizer */
|
|
20
|
+
barCount?: number;
|
|
21
|
+
trackRef?: TrackReferenceOrPlaceholder;
|
|
22
|
+
options?: BarVisualizerOptions;
|
|
23
|
+
/**
|
|
24
|
+
* Custom React Native styles for the container.
|
|
25
|
+
*/
|
|
26
|
+
style?: ViewStyle;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Visualizes audio signals from a TrackReference as bars.
|
|
30
|
+
* If the `state` prop is set, it automatically transitions between VoiceAssistant states.
|
|
31
|
+
* @beta
|
|
32
|
+
*
|
|
33
|
+
* @remarks For VoiceAssistant state transitions this component requires a voice assistant agent running with livekit-agents \>= 0.9.0
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```tsx
|
|
37
|
+
* function SimpleVoiceAssistant() {
|
|
38
|
+
* const { state, audioTrack } = useVoiceAssistant();
|
|
39
|
+
* return (
|
|
40
|
+
* <BarVisualizer
|
|
41
|
+
* state={state}
|
|
42
|
+
* trackRef={audioTrack}
|
|
43
|
+
* />
|
|
44
|
+
* );
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare const BarVisualizer: ({ style, state, barCount, trackRef, options, }: BarVisualizerProps) => React.JSX.Element;
|
|
49
|
+
export declare const useBarAnimator: (state: AgentState | undefined, columns: number, interval: number) => number[];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function setupNativeEvents(): void;
|
|
2
|
+
type EventHandler = (event: unknown) => void;
|
|
3
|
+
type Listener = unknown;
|
|
4
|
+
export declare function addListener(listener: Listener, eventName: string, eventHandler: EventHandler): void;
|
|
5
|
+
export declare function removeListener(listener: Listener): void;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type TrackReferenceOrPlaceholder } from '@livekit/components-react';
|
|
2
|
+
import { type LocalAudioTrack, type RemoteAudioTrack } from 'livekit-client';
|
|
3
|
+
/**
|
|
4
|
+
* Interface for configuring options for the useMultibandTrackVolume hook.
|
|
5
|
+
* @alpha
|
|
6
|
+
*/
|
|
7
|
+
export interface MultiBandTrackVolumeOptions {
|
|
8
|
+
/**
|
|
9
|
+
* the number of bands to split the audio into
|
|
10
|
+
*/
|
|
11
|
+
bands?: number;
|
|
12
|
+
/**
|
|
13
|
+
* cut off frequency on the lower end
|
|
14
|
+
*/
|
|
15
|
+
minFrequency?: number;
|
|
16
|
+
/**
|
|
17
|
+
* cut off frequency on the higher end
|
|
18
|
+
*/
|
|
19
|
+
maxFrequency?: number;
|
|
20
|
+
/**
|
|
21
|
+
* update should run every x ms
|
|
22
|
+
*/
|
|
23
|
+
updateInterval?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A hook for tracking the volume of an audio track across multiple frequency bands.
|
|
27
|
+
*
|
|
28
|
+
* @param trackOrTrackReference
|
|
29
|
+
* @returns A number array containing the volume for each frequency band.
|
|
30
|
+
*/
|
|
31
|
+
export declare function useMultibandTrackVolume(trackOrTrackReference?: LocalAudioTrack | RemoteAudioTrack | TrackReferenceOrPlaceholder, options?: MultiBandTrackVolumeOptions): number[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type TrackReferenceOrPlaceholder } from '@livekit/components-react';
|
|
2
|
+
import { type LocalAudioTrack, type RemoteAudioTrack } from 'livekit-client';
|
|
3
|
+
/**
|
|
4
|
+
* A hook for tracking the volume of an audio track.
|
|
5
|
+
*
|
|
6
|
+
* @param trackOrTrackReference
|
|
7
|
+
* @returns A number between 0-1 representing the volume.
|
|
8
|
+
*/
|
|
9
|
+
export declare function useTrackVolume(trackOrTrackReference?: LocalAudioTrack | RemoteAudioTrack | TrackReferenceOrPlaceholder): number;
|
|
@@ -2,4 +2,6 @@ export { useConnectionState, useDataChannel, useIsSpeaking, useLocalParticipant,
|
|
|
2
2
|
export type { UseLocalParticipantOptions, UseParticipantInfoOptions, UseParticipantsOptions, UseRemoteParticipantOptions, UseRemoteParticipantsOptions, UseTracksOptions, TrackReference, TrackReferenceOrPlaceholder, UseVisualStableUpdateOptions, } from '@livekit/components-react';
|
|
3
3
|
export type { ReceivedDataMessage } from '@livekit/components-core';
|
|
4
4
|
export * from './hooks/useE2EEManager';
|
|
5
|
+
export * from './hooks/useTrackVolume';
|
|
6
|
+
export * from './hooks/useMultibandTrackVolume';
|
|
5
7
|
export type { UseRNE2EEManagerOptions } from './hooks/useE2EEManager';
|
|
@@ -11,6 +11,7 @@ import RNKeyProvider, { type RNKeyProviderOptions } from './e2ee/RNKeyProvider';
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function registerGlobals(): void;
|
|
13
13
|
export * from './hooks';
|
|
14
|
+
export * from './components/BarVisualizer';
|
|
14
15
|
export * from './components/LiveKitRoom';
|
|
15
16
|
export * from './components/VideoTrack';
|
|
16
17
|
export * from './components/VideoView';
|
|
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
|
|
|
13
13
|
s.platforms = { :ios => "10.0" }
|
|
14
14
|
s.source = { :git => "https://github.com/livekit/client-sdk-react-native.git", :tag => "#{s.version}" }
|
|
15
15
|
|
|
16
|
-
s.source_files = "ios/**/*.{h,m,mm}"
|
|
16
|
+
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
17
17
|
|
|
18
18
|
s.framework = 'AVFAudio'
|
|
19
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livekit/react-native",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "LiveKit for React Native",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -42,13 +42,14 @@
|
|
|
42
42
|
"android"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@livekit/components-react": "^2.
|
|
45
|
+
"@livekit/components-react": "^2.8.1",
|
|
46
46
|
"array.prototype.at": "^1.1.1",
|
|
47
|
-
"
|
|
48
|
-
"livekit-client": "^2.
|
|
47
|
+
"events": "^3.3.0",
|
|
48
|
+
"livekit-client": "^2.9.0",
|
|
49
49
|
"loglevel": "^1.8.0",
|
|
50
50
|
"promise.allsettled": "^1.0.5",
|
|
51
51
|
"react-native-url-polyfill": "^1.3.0",
|
|
52
|
+
"typed-emitter": "^2.1.0",
|
|
52
53
|
"well-known-symbols": "^4.0.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
@@ -56,7 +57,7 @@
|
|
|
56
57
|
"@babel/preset-env": "^7.20.0",
|
|
57
58
|
"@babel/runtime": "^7.20.0",
|
|
58
59
|
"@commitlint/config-conventional": "^16.2.1",
|
|
59
|
-
"@livekit/react-native-webrtc": "^125.0.
|
|
60
|
+
"@livekit/react-native-webrtc": "^125.0.8",
|
|
60
61
|
"@react-native/babel-preset": "0.74.84",
|
|
61
62
|
"@react-native/eslint-config": "0.74.84",
|
|
62
63
|
"@react-native/metro-config": "0.74.84",
|
|
@@ -82,7 +83,7 @@
|
|
|
82
83
|
"typescript": "5.0.4"
|
|
83
84
|
},
|
|
84
85
|
"peerDependencies": {
|
|
85
|
-
"@livekit/react-native-webrtc": "^125.0.
|
|
86
|
+
"@livekit/react-native-webrtc": "^125.0.8",
|
|
86
87
|
"react": "*",
|
|
87
88
|
"react-native": "*"
|
|
88
89
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NativeModules, Platform } from 'react-native';
|
|
2
|
+
const LINKING_ERROR =
|
|
3
|
+
`The package '@livekit/react-native' doesn't seem to be linked. Make sure: \n\n` +
|
|
4
|
+
Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
|
|
5
|
+
'- You rebuilt the app after installing the package\n' +
|
|
6
|
+
'- You are not using Expo managed workflow\n';
|
|
7
|
+
|
|
8
|
+
const LiveKitModule = NativeModules.LivekitReactNative
|
|
9
|
+
? NativeModules.LivekitReactNative
|
|
10
|
+
: new Proxy(
|
|
11
|
+
{},
|
|
12
|
+
{
|
|
13
|
+
get() {
|
|
14
|
+
throw new Error(LINKING_ERROR);
|
|
15
|
+
},
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export default LiveKitModule;
|