@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
JavaScript
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