Record a room using the SDK

💡

The recorder service only works on apps hosted on some domain and not on localhost as your web app needs to be connected to the internet to use the recording service.

Walkthrough

Developing an Audio/Video application using Huddle01 SDK

To record a session within your app using Huddle01 SDK, you need first need to setup an audio/video application.

Walkthroughs for setting up an audio/video application using Huddle01 SDK can be found here:
React App
Vanilla

💡

React Native SDK powered apps are not supported for recording at the moment.

Get-Started

Creating a route for recorder to join the room

Once you have setup an audio/video application, you need to create a route for the recorder to join the room like so:

      • [roomId].tsx
      • contact.mdx
    • _app.tsx
    • index.tsx
  • This is what your pages folder should look like after creating the route for recorder to join the room.

    Rendering Audio/Video for Recorder to Consume

    Once you've created the route for recorder to join the room, you need to render the audio/video for recorder to consume.

    The [roomId].tsx file should look like this:

    import { usePeers } from "@huddle01/react/hooks";
     
    const Recorder = () => {
     
      const { peers } = usePeers();
     
      return (
        <div>
          <div className="grid grid-cols-4">
              {Object.values(peers)
                .filter((peer) => peer.cam)
                .map((peer) => (
                  <Video
                    key={peer.peerId}
                    peerId={peer.peerId}
                    track={peer.cam}
                    // debug
                  />
                ))}
              {Object.values(peers)
                .filter((peer) => peer.mic)
                .map((peer) => (
                  <Audio key={peer.peerId} peerId={peer.peerId} track={peer.mic} />
                ))}
            </div>
        </div>
      );
    }
     
    export default Recorder;

    Line 1: Imported the usePeers() hook to get access to peers in the room.
    Line 5: Destructured the peers object containing all the information related to the peers in the room.
    Line 9-25: Rendered the audio/video elemnts for all peers in the room.

    Enable the Recorder Service

    To enable the recorder service you'll need the roomId to which you want to connect to.
    We'll be getting that from the query params in the following way in NextJS:

    import { useRouter } from "next/router";
     
    const Recorder = () => {
      ...
     
      const router = useRouter();
     
       const [roomId, setRoomId] = useState(router.query.roomId?.toString() || "");
     
      useEffect(() => {
        setRoomId(router.query.roomId?.toString() || "");
      }, [router.query.roomId?.toString()]);
     
     
      return <> ... </>
    }

    Here we're storing the roomId in a state variable to pass it down to our recording service.

    import { usePeers } from "@huddle01/react/hooks";
    import { useRecorder } from "@huddle01/react/app-utils";
     
    const Recorder = () => {
     
      const { peers } = usePeers();
     
      const router = useRouter();
      const [roomId, setRoomId] = useState(router.query.roomId?.toString());
      useEffect(() => {
        setRoomId(router.query.roomId?.toString());
      }, [router.query.roomId?.toString()]);
     
      useRecorder(roomId, process.env.NEXT_PUBLIC_PROJECT_ID);
     
      return (
        <div>
          <div className="grid grid-cols-4">
              {Object.values(peers)
                .filter((peer) => peer.cam)
                .map((peer) => (
                  <Video
                    key={peer.peerId}
                    peerId={peer.peerId}
                    track={peer.cam}
                    // debug
                  />
                ))}
              {Object.values(peers)
                .filter((peer) => peer.mic)
                .map((peer) => (
                  <Audio key={peer.peerId} peerId={peer.peerId} track={peer.mic} />
                ))}
            </div>
        </div>
      );
    }
     
    export default Recorder;

    Line 2: Imported the useRecorder() hook to enable the recorder service.
    Line 9-14: Run logic to store roomId from query params (opens in a new tab) and pass it to the recorder service with the Project ID (Get it from here)

    Start and Stop Recording

    Lastly, to start the recording service you can run the startRecording() method in the following way inside your app:

    import { useRecording } from "@huddle01/react/hooks";
     
    const App = () => {
     
      ...
     
      const {
        startRecording,
        stopRecording,
        error,
        data,
      } = useRecording();
     
      useEffect(() => {
        console.log({data});
      }, [data])
     
      return (
        <>
     
          ...
     
          <button
            disabled={!startRecording.isCallable}
            onClick={() => startRecording(`${window.location.href}rec/${roomId}`)}
          >
            {`START_RECORDING error: ${error}`}
          </button>
        </>
      )
    }
     

    Simlarly, to stop the recording service you can run the stopRecording() method in the following way inside your app:

    <button
      disabled={!stopRecording.isCallable}
      onClick={() => stopRecording()}
    >
     STOP_RECORDING
    </button>

    To get access to the recording data once you've stopped the recording service, you can use the data variable returned by the useRecording() hook as shown above.

    That’s a wrap! 🎉

    Audio/Video Infrastructure designed for the developers to empower them ship simple yet powerful Audio/Video Apps.
    support
    company
    Copyright © 2022 Graphene 01, Inc. All Rights Reserved.