*** id: 69959db7-5107-4e26-9d51-214249c083a1 title: RoomSessionRecording keywords: 'SignalWire, Realtime SDK, Node.js, video recording, record room' slug: /node/reference/video/room-session-recording sidebar-title: RoomSessionRecording description: >- RoomSessionRecording reference representing a recording of a video room session. Access recording ID, state, duration, and start/end timestamps. max-toc-depth: 3 ---------------- [video-roomsession]: /docs/server-sdk/v4/node/reference/video/room-session [video-roomsessionrecording]: /docs/server-sdk/v4/node/reference/video/room-session-recording Represents a specific recording of a room session. ## **Properties** The unique ID of this recording. The ID of the room associated to this recording. The ID of the room session associated to this recording. Current state. Duration, if available. Start time, if available. End time, if available. Whether the recording has ended. Returns `true` if the state is `"completed"`. ## **Methods** ### pause ▸ **pause**(): `Promise` Pauses the recording. #### Returns `Promise` #### Example In this example, we start a recording and pause it after 5 seconds. This example assumes you have already created a [`RoomSession`][video-roomsession] and members are joining. ```javascript import { SignalWire } from "@signalwire/realtime-api"; // Initialize the SignalWire client const client = await SignalWire({ project: "ProjectID Here", token: "Token Here" }); // Access video client from the main client const videoClient = client.video; // Setup listener for when a room starts await videoClient.listen({ onRoomStarted: async (roomSession) => { console.log("Room started", roomSession.displayName); let roomRecording = roomSession.startRecording({ listen: { onStarted: () => { console.log("Recording started"); }, onEnded: (recording) => { console.log(`Recording ended. Recording State: ${recording.state}. Recording Id: ${recording.id}`); }, } }) await roomSession.listen({ onRecordingUpdated: (recording) => { console.log(`Recording State: ${recording.state}. Recording Id: ${recording.id}`); }, onMemberJoined: async (member) => { console.log("Member joined", member.name); }, onMemberLeft: (member) => { console.log("Member left", member.name); }, }) // Pausing the recording after 5 seconds setTimeout(async () => { console.log("Stopping recording"); await roomRecording.pause(); }, 5000); }, onRoomEnded: async (roomSession) => { console.log("Room ended", roomSession.displayName); } }); ``` *** ### resume ▸ **resume**(): `Promise` Resumes the recording. #### Returns `Promise` #### Example In this example, we start a recording and pause it after 5 seconds. Then we resume the recording after another 5 seconds of being paused. This example assumes you have already created a [`RoomSession`][video-roomsession] and members are joining. ```javascript import { SignalWire } from "@signalwire/realtime-api"; // Initialize the SignalWire client const client = await SignalWire({ project: "ProjectID Here", token: "Token Here" }); // Access video client from the main client const videoClient = client.video; // Setup listener for when a room starts await videoClient.listen({ onRoomStarted: async (roomSession) => { console.log("Room started", roomSession.displayName); let roomRecording = roomSession.startRecording({ listen: { onStarted: () => { console.log("Recording started"); }, onEnded: (recording) => { console.log(`Recording ended. Recording State: ${recording.state}. Recording Id: ${recording.id}`); }, } }) await roomSession.listen({ onRecordingUpdated: (recording) => { console.log(`Recording State: ${recording.state}. Recording Id: ${recording.id}`); }, onMemberJoined: async (member) => { console.log("Member joined", member.name); }, onMemberLeft: (member) => { console.log("Member left", member.name); }, }) // Pause the recording after 5 seconds setTimeout(async () => { console.log("Pausing recording"); await roomRecording.pause(); // Resume the recording after 5 seconds setTimeout(() => { console.log("Resuming recording"); roomRecording.resume(); }, 5000); }, 5000); }, onRoomEnded: async (roomSession) => { console.log("Room ended", roomSession.displayName); } }); ``` *** ### stop ▸ **stop**(): `Promise` Stops the recording. #### Returns `Promise` #### Example In this example, we start a recording and stop it after 5 seconds. This example assumes you have already created a [`RoomSession`][video-roomsession] and members are joining. ```javascript import { SignalWire } from "@signalwire/realtime-api"; // Initialize the SignalWire client const client = await SignalWire({ project: "ProjectID Here", token: "Token Here" }); // Access video client from the main client const videoClient = client.video; // Setup listener for when a room starts await videoClient.listen({ onRoomStarted: async (roomSession) => { console.log("Room started", roomSession.displayName); let roomRecording = roomSession.startRecording({ listen: { onStarted: () => { console.log("Recording started"); }, onEnded: (recording) => { console.log(`Recording ended. Recording State: ${recording.state}. Recording Id: ${recording.id}`); }, } }) await roomSession.listen({ onRecordingUpdated: (recording) => { console.log(`Recording State: ${recording.state}. Recording Id: ${recording.id}`); }, onMemberJoined: async (member) => { console.log("Member joined", member.name); }, onMemberLeft: (member) => { console.log("Member left", member.name); }, }) // Stopping the recording after 5 seconds setTimeout(async () => { console.log("Stopping recording"); await roomRecording.stop(); }, 5000); }, onRoomEnded: async (roomSession) => { console.log("Room ended", roomSession.displayName); } }); ``` *** ## **Events** ### onStarted ▸ **RoomSessionRecording**(`{ listen: {onStarted: Callback }}`) Emitted when the recording starts. #### Parameters The recording that started. See [`RoomSessionRecording`][video-roomsessionrecording]. ### onUpdated ▸ **RoomSessionRecording**(`{ listen: {onUpdated: Callback }}`) Emitted when the recording is updated. #### Parameters The recording that updated. See [`RoomSessionRecording`][video-roomsessionrecording]. ### onEnded ▸ **RoomSessionRecording**(`{ listen: {onEnded: Callback }}`) Emitted when the recording ends. #### Parameters The recording that ended. See [`RoomSessionRecording`][video-roomsessionrecording].