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.

88 lines (86 loc) 2.53 kB
import { useHuddle01_default } from "./chunk-6UAH4WUQ.js"; // src/hooks/useLocalVideo.ts import { useCallback, useEffect, useState } from "react"; var useLocalVideo = (props) => { const { huddleClient } = useHuddle01_default(); const localPeer = huddleClient.localPeer; const [stream, setStream] = useState( localPeer.getStream({ label: "video" }) ); const [isVideoOn, setIsVideoOn] = useState( stream?.getVideoTracks()?.[0]?.enabled ?? false ); const [isProducing, setIdProducing] = useState(false); const handleStreamFetched = useCallback( (data) => { if (data.mediaKind === "cam") { setStream(data.stream); const isEnabled = data.stream.getVideoTracks()?.[0]?.enabled ?? false; setIsVideoOn(isEnabled); } }, [] ); const handleStreamClosed = useCallback( (data) => { if (data.label === "video") { setStream(null); setIsVideoOn(false); setIdProducing(false); if (props?.onProduceClose) props?.onProduceClose(data.reason); } }, [props?.onProduceClose] ); const handleStreamPlayable = useCallback( (data) => { if (data.label === "video") { setStream(localPeer.getStream({ label: "video" })); setIsVideoOn(true); setIdProducing(true); if (props?.onProduceStart) props?.onProduceStart(data.producer); } }, [props?.onProduceStart] ); useEffect(() => { localPeer.on("stream-fetched", handleStreamFetched); localPeer.on("stream-playable", handleStreamPlayable); localPeer.on("stream-closed", handleStreamClosed); return () => { localPeer.off("stream-fetched", handleStreamFetched); localPeer.off("stream-playable", handleStreamPlayable); localPeer.off("stream-closed", handleStreamClosed); }; }, []); const enableVideo = useCallback( (data) => localPeer.enableVideo(data), [localPeer] ); const disableVideo = useCallback(() => localPeer.disableVideo(), [localPeer]); const track = stream?.getVideoTracks()[0] || null; const replaceVideoStream = useCallback( (stream2) => localPeer.replaceVideoStream(stream2), [localPeer] ); const changeVideoSource = useCallback( (deviceId) => localPeer.changeVideoSource(deviceId), [localPeer] ); return { stream, track, isVideoOn, isProducing, enableVideo, disableVideo, replaceVideoStream, changeVideoSource }; }; export { useLocalVideo }; //# sourceMappingURL=chunk-HYNMEX4R.js.map