UNPKG

@huddle01/react

Version:

The Huddle01 React SDK offers a comprehensive suite of hooks, methods and event listeners that allow for seamless real-time audio and video communication with minimal coding required.

115 lines (113 loc) 3.16 kB
import { useHuddle01_default } from "./chunk-6UAH4WUQ.js"; // src/hooks/useLocalAudio.ts import { useCallback, useEffect, useState } from "react"; var useLocalAudio = (props) => { const { huddleClient } = useHuddle01_default(); const localPeer = huddleClient.localPeer; const [stream, setStream] = useState( localPeer.getStream({ label: "audio" }) ); const [isAudioOn, setIsAudioOn] = useState( stream?.getAudioTracks()?.[0]?.enabled ?? false ); const [isProducing, setIdProducing] = useState(false); const handleStreamFetched = useCallback( (data) => { if (data.mediaKind === "mic") { setStream(data.stream); const isEnabled = data.stream.getAudioTracks()?.[0]?.enabled ?? false; setIsAudioOn(isEnabled); } }, [] ); const handleStreamPlayable = useCallback( (data) => { if (data.label === "audio") { setStream(localPeer.getStream({ label: "audio" })); setIsAudioOn(true); setIdProducing(true); if (props?.onProduceStart) props?.onProduceStart(data.producer); } }, [props?.onProduceStart] ); const handleStreamClosed = useCallback( (data) => { if (data.label === "audio") { setStream(null); setIsAudioOn(false); setIdProducing(false); if (props?.onProduceClose) props?.onProduceClose(data.label); } }, [props?.onProduceClose] ); const handleStreamPaused = useCallback( (data) => { if (data.label === "audio") { setIsAudioOn(false); if (props?.onProducePaused) props?.onProducePaused(); } }, [] ); useEffect(() => { localPeer.on("stream-fetched", handleStreamFetched); localPeer.on("stream-playable", handleStreamPlayable); localPeer.on("stream-closed", handleStreamClosed); localPeer.on("stream-paused", handleStreamPaused); return () => { localPeer.off("stream-fetched", handleStreamFetched); localPeer.off("stream-playable", handleStreamPlayable); localPeer.off("stream-closed", handleStreamClosed); localPeer.off("stream-paused", handleStreamPaused); }; }, []); const track = stream?.getAudioTracks()[0] || null; const enableAudio = useCallback( (data) => { return localPeer.enableAudio(data); }, [localPeer] ); const disableAudio = useCallback(() => { return localPeer.disableAudio(); }, [localPeer]); const pauseAudio = useCallback(() => { return localPeer.pauseAudio(); }, [localPeer]); const resumeAudio = useCallback(() => { return localPeer.resumeAudio(); }, [localPeer]); const replaceAudioStream = useCallback( (stream2) => { return localPeer.replaceAudioStream(stream2); }, [localPeer] ); const changeAudioSource = useCallback( (deviceId) => { return localPeer.changeAudioSource(deviceId); }, [localPeer] ); return { stream, track, isAudioOn, isProducing, enableAudio, disableAudio, pauseAudio, resumeAudio, replaceAudioStream, changeAudioSource }; }; export { useLocalAudio }; //# sourceMappingURL=chunk-I4MTTRNU.js.map