***
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].