implemented mute and play/hold logic

Signed-off-by: heyhiru <hirentimbadiya74@gmail.com>
Este commit está contenido en:
heyhiru
2023-11-12 18:58:40 +05:30
padre 07f49663ad
commit bab17fa7b7
Se han modificado 2 ficheros con 49 adiciones y 9 borrados

Ver fichero

@@ -6,17 +6,19 @@ import peer from '@/service/peer';
const RoomPage = () => { const RoomPage = () => {
const socket = useSocket(); const socket = useSocket();
const [remoteSocketId, setRemoteSocketId] = useState(null); const [remoteSocketId, setRemoteSocketId] = useState(null);
const [myStream, setMyStream] = useState(null) const [myStream, setMyStream] = useState(null);
const [remoteStream, setRemoteStream] = useState(null) const [remoteStream, setRemoteStream] = useState(null);
const [isAudioMute, setIsAudioMute] = useState(false);
const [isVideoOnHold, setIsVideoOnHold] = useState(false);
const handleUserJoined = useCallback(({ email, id }) => { const handleUserJoined = useCallback(({ email, id }) => {
console.log(`Email ${email} joined the room!`); //! console.log(`Email ${email} joined the room!`);
setRemoteSocketId(id); setRemoteSocketId(id);
}, []); }, []);
const handleIncomingCall = useCallback(async ({ from, offer }) => { const handleIncomingCall = useCallback(async ({ from, offer }) => {
setRemoteSocketId(from); setRemoteSocketId(from);
// console.log(`incoming call from ${from} with offer ${offer}`); //! console.log(`incoming call from ${from} with offer ${offer}`);
const stream = await navigator.mediaDevices.getUserMedia({ const stream = await navigator.mediaDevices.getUserMedia({
audio: true, audio: true,
video: true video: true
@@ -35,7 +37,7 @@ const RoomPage = () => {
const handleCallAccepted = useCallback(({ from, ans }) => { const handleCallAccepted = useCallback(({ from, ans }) => {
peer.setLocalDescription(ans); peer.setLocalDescription(ans);
// console.log("Call Accepted"); //! console.log("Call Accepted");
sendStreams(); sendStreams();
}, [sendStreams]); }, [sendStreams]);
@@ -87,7 +89,8 @@ const RoomPage = () => {
socket.off("peer:nego:final", handleNegoFinal); socket.off("peer:nego:final", handleNegoFinal);
}; };
}, },
[socket, [
socket,
handleUserJoined, handleUserJoined,
handleIncomingCall, handleIncomingCall,
handleCallAccepted, handleCallAccepted,
@@ -101,19 +104,40 @@ const RoomPage = () => {
video: true video: true
}); });
if (isAudioMute) {
const audioTracks = stream.getAudioTracks();
audioTracks.forEach(track => track.enabled = false);
}
const videoTracks = stream.getVideoTracks();
if (isVideoOnHold) {
videoTracks.forEach(track => track.enabled = false);
}
//! create offer //! create offer
const offer = await peer.getOffer(); const offer = await peer.getOffer();
//* send offer to remote user //* send offer to remote user
socket.emit("user:call", { to: remoteSocketId, offer }) socket.emit("user:call", { to: remoteSocketId, offer })
// set my stream // set my stream
setMyStream(stream); setMyStream(stream);
}, [remoteSocketId, socket]); }, [remoteSocketId, socket, isAudioMute, isVideoOnHold]);
const handleToggleAudio = () => {
peer.toggleAudio();
setIsAudioMute(!isAudioMute);
};
const handleToggleVideo = () => {
peer.toggleVideo();
setIsVideoOnHold(!isVideoOnHold);
}
return ( return (
<div className='flex flex-col items-center justify-center'> <div className='flex flex-col items-center justify-center'>
<h1 className='font-bold text-7xl md:text-5xl p-3'>RoomPage</h1> <h1 className='font-bold text-7xl md:text-5xl p-3'>RoomPage</h1>
<h4 className='font-bold text-4xl md:text-xl p-3 mb-4'>{remoteSocketId ? "Connected" : "No One In Room"}</h4> <h4 className='font-bold text-4xl md:text-xl p-3 mb-4'>{remoteSocketId ? "Connected" : "No One In Room"}</h4>
{myStream && {(myStream || remoteStream) &&
<button className='callButton' onClick={sendStreams}> <button className='callButton' onClick={sendStreams}>
Send Stream Send Stream
</button> </button>
@@ -133,10 +157,16 @@ const RoomPage = () => {
<ReactPlayer <ReactPlayer
url={myStream} url={myStream}
playing playing
muted muted={isAudioMute}
height={300} height={300}
width={500} width={500}
/> />
<button className='joinButton' onClick={handleToggleAudio}>
{isAudioMute ? "Unmute" : "Mute"}
</button>
<button className='joinButton' onClick={handleToggleVideo}>
{isVideoOnHold ? "Resume Video" : "Hold Video"}
</button>
</div> </div>
} }
{ {

Ver fichero

@@ -34,6 +34,16 @@ class PeerService {
return offer; return offer;
} }
} }
toggleAudio = () => {
const audioTracks = this.peer.getSenders().find(sender => sender.track.kind === 'audio').track;
audioTracks.enabled = !audioTracks.enabled;
};
toggleVideo = () => {
const videoTracks = this.peer.getSenders().find(sender => sender.track.kind === 'video').track;
videoTracks.enabled = !videoTracks.enabled;
};
} }
export default new PeerService(); export default new PeerService();