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