> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # RoomSession A RoomSession allows you to start and control video sessions. For example, the following code joins a video session and listens for new members joining: ```javascript const roomSession = new SignalWire.Video.RoomSession({ token: "", rootElement: document.getElementById("myVideoElement"), }); roomSession.on("member.joined", (e) => { console.log(`${e.member.name} joined`); }); roomSession.join(); ``` ### Obtaining a token The room token is obtained from the REST API from your backend server. ### Request POST https\://%7BYour\_Space\_Name%7D.signalwire.com/api/video/room\_tokens ```curl curl -X POST https://{your_space_name}.signalwire.com/api/video/room_tokens \ -H "Content-Type: application/json" \ -u ":" \ -d '{ "room_name": "my_room" }' ``` ```python import requests url = "https://{your_space_name}.signalwire.com/api/video/room_tokens" payload = { "room_name": "my_room" } headers = { "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers, auth=("", "")) print(response.json()) ``` ```javascript const url = 'https://{your_space_name}.signalwire.com/api/video/room_tokens'; const credentials = btoa(":"); const options = { method: 'POST', headers: { Authorization: `Basic ${credentials}`, 'Content-Type': 'application/json' }, body: '{"room_name":"my_room"}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://{your_space_name}.signalwire.com/api/video/room_tokens" payload := strings.NewReader("{\n \"room_name\": \"my_room\"\n}") req, _ := http.NewRequest("POST", url, payload) req.SetBasicAuth("", "") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://{your_space_name}.signalwire.com/api/video/room_tokens") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request.basic_auth("", "") request["Content-Type"] = 'application/json' request.body = "{\n \"room_name\": \"my_room\"\n}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://{your_space_name}.signalwire.com/api/video/room_tokens") .basicAuth("", "") .header("Content-Type", "application/json") .body("{\n \"room_name\": \"my_room\"\n}") .asString(); ``` ```php request('POST', 'https://{your_space_name}.signalwire.com/api/video/room_tokens', [ 'body' => '{ "room_name": "my_room" }', 'headers' => [ 'Content-Type' => 'application/json', ], 'auth' => ['', ''], ]); echo $response->getBody(); ``` ```csharp using RestSharp; using RestSharp.Authenticators; var client = new RestClient("https://{your_space_name}.signalwire.com/api/video/room_tokens"); client.Authenticator = new HttpBasicAuthenticator("", ""); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"room_name\": \"my_room\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let credentials = Data(":".utf8).base64EncodedString() let headers = [ "Authorization": "Basic \(credentials)", "Content-Type": "application/json" ] let parameters = ["room_name": "my_room"] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://{your_space_name}.signalwire.com/api/video/room_tokens")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` Please refer to the [Create Room Token](/docs/apis/rest/video/room-tokens/create-room-token) endpoint reference to learn how to obtain Video Room tokens. ## Constructor Creates a new RoomSession. Note that the room will not be joined until [join](#join) has been called. ```javascript const roomSession = new SignalWire.Video.RoomSession({ token: "", // ... }); ``` ### Parameters The RoomSession constructor accepts the following parameters: **`token`** `string` — required SignalWire video room token (get one from the [REST APIs](/docs/apis/rest/video/room-tokens/create-room-token)) --- **`rootElement`** `HTMLElement` HTML element in which to display the video stream. --- **`applyLocalVideoOverlay`** `boolean` — default: true Whether to apply the local-overlay on top of your video. --- **`iceServers`** `RTCIceServer[]` List of [ICE servers](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer). --- **`localStream`** `MediaStream` A custom [media stream](https://developer.mozilla.org/en-US/docs/Web/API/MediaStream) to use in place of a camera. --- **`logLevel`** `'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent'` Logging level. --- **`speakerId`** `string` Id of the speaker device to use for audio output. If undefined, picks a default speaker. --- **`stopCameraWhileMuted`** `boolean` — default: true Whether to stop the camera when the member is muted. --- **`stopMicrophoneWhileMuted`** `boolean` — default: true Whether to stop the microphone when the member is muted. --- **`audio`** `boolean | MediaTrackConstraints` — deprecated, default: true Audio constraints to use when joining the room. *Deprecated: please use the equivalent parameter in [join](/docs/browser-sdk/v3/js/reference/video/room-session/join).* --- **`video`** `boolean | MediaTrackConstraints` — deprecated, default: true Video constraints to use when joining the room. *Deprecated: please use the equivalent parameter in [join](/docs/browser-sdk/v3/js/reference/video/room-session/join).* --- ## Properties The RoomSession class has the following properties: **`active`** `boolean` Whether the connection is currently active. *Read-only.* --- **`cameraId`** `string | null` The id of the video device, or null if not available. *Read-only.* --- **`cameraLabel`** `string | null` The label of the video device, or null if not available. *Read-only.* --- **`deviceList`** `RoomSessionDevice[]` Contains any additional devices added via [addCamera](/docs/browser-sdk/v3/js/reference/video/room-session/add-camera), [addMicrophone](/docs/browser-sdk/v3/js/reference/video/room-session/add-microphone), or [addDevice](/docs/browser-sdk/v3/js/reference/video/room-session/add-device). *Read-only.* --- **`interactivityMode`** `'audience' | 'member'` The current interactivity mode (*member* or *audience*) for the local member. Member participants are allowed to transmit their own audio and/or video to the rest of the room (as in a typical video conference), while audience participants can only view and/or listen. See [join](/docs/browser-sdk/v3/js/reference/video/room-session/join). *Read-only.* --- **`localAudioTrack`** `MediaStreamTrack | null` Provides access to the local audio [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack). *Read-only.* --- **`localStream`** `MediaStream | undefined` Provides access to the local [MediaStream](https://developer.mozilla.org/en-US/docs/Web/API/MediaStream). *Read-only.* --- **`localVideoTrack`** `MediaStreamTrack | null` Provides access to the local video [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack). *Read-only.* --- **`localOverlay`** `LocalOverlay` Provides access to the local video overlay. Use this for example to mirror the local video. *Read-only.* --- **`memberId`** `string` The id of the current member within the room. *Read-only.* --- **`microphoneId`** `string | null` The id of the audio input device, or null if not available. *Read-only.* --- **`microphoneLabel`** `string | null` The label of the audio input device, or null if not available. *Read-only.* --- **`permissions`** `string[]` The list of permissions currently available to the local member. *Read-only.* --- **`previewUrl`** `string` If the Room has been created with the property `enable_room_previews` set to `true`, this field contains the URL to the room preview. *Read-only.* --- **`remoteStream`** `MediaStream | undefined` Provides access to the remote [MediaStream](https://developer.mozilla.org/en-US/docs/Web/API/MediaStream). *Read-only.* --- **`roomId`** `string` The unique identifier for the room. *Read-only.* --- **`roomSessionId`** `string` The unique identifier for the room session. *Read-only.* --- **`screenShareList`** `RoomSessionScreenShare[]` Contains any local screen shares added to the room via [startScreenShare](/docs/browser-sdk/v3/js/reference/video/room-session/start-screen-share). *Read-only.* --- ## Methods #### [join](/docs/browser-sdk/v3/js/reference/video/room-session/join) Join the room session #### [leave](/docs/browser-sdk/v3/js/reference/video/room-session/leave) Leave the room session #### [destroy](/docs/browser-sdk/v3/js/reference/video/room-session/destroy) Destroy the room session #### [addCamera](/docs/browser-sdk/v3/js/reference/video/room-session/add-camera) Add a camera device to the room #### [addMicrophone](/docs/browser-sdk/v3/js/reference/video/room-session/add-microphone) Add a microphone device to the room #### [addDevice](/docs/browser-sdk/v3/js/reference/video/room-session/add-device) Add a media device to the room #### [updateCamera](/docs/browser-sdk/v3/js/reference/video/room-session/update-camera) Update the camera device #### [updateMicrophone](/docs/browser-sdk/v3/js/reference/video/room-session/update-microphone) Update the microphone device #### [updateSpeaker](/docs/browser-sdk/v3/js/reference/video/room-session/update-speaker) Update the speaker device #### [audioMute](/docs/browser-sdk/v3/js/reference/video/room-session/audio-mute) Mute the microphone #### [audioUnmute](/docs/browser-sdk/v3/js/reference/video/room-session/audio-unmute) Unmute the microphone #### [videoMute](/docs/browser-sdk/v3/js/reference/video/room-session/video-mute) Mute the video #### [videoUnmute](/docs/browser-sdk/v3/js/reference/video/room-session/video-unmute) Unmute the video #### [deaf](/docs/browser-sdk/v3/js/reference/video/room-session/deaf) Stop receiving audio from the room #### [undeaf](/docs/browser-sdk/v3/js/reference/video/room-session/undeaf) Resume receiving audio from the room #### [getMembers](/docs/browser-sdk/v3/js/reference/video/room-session/get-members) Get list of members in the room #### [removeMember](/docs/browser-sdk/v3/js/reference/video/room-session/remove-member) Remove a member from the room #### [removeAllMembers](/docs/browser-sdk/v3/js/reference/video/room-session/remove-all-members) Remove all members from the room #### [hangupAll](/docs/browser-sdk/v3/js/reference/video/room-session/hangup-all) Disconnect all members from the room #### [promote](/docs/browser-sdk/v3/js/reference/video/room-session/promote) Promote audience member to member #### [demote](/docs/browser-sdk/v3/js/reference/video/room-session/demote) Demote member to audience #### [startRecording](/docs/browser-sdk/v3/js/reference/video/room-session/start-recording) Start recording the room #### [getRecordings](/docs/browser-sdk/v3/js/reference/video/room-session/get-recordings) Get list of active recordings #### [startStream](/docs/browser-sdk/v3/js/reference/video/room-session/start-stream) Start streaming the room #### [getStreams](/docs/browser-sdk/v3/js/reference/video/room-session/get-streams) Get list of active streams #### [play](/docs/browser-sdk/v3/js/reference/video/room-session/play) Play media in the room #### [getPlaybacks](/docs/browser-sdk/v3/js/reference/video/room-session/get-playbacks) Get list of active playbacks #### [startScreenShare](/docs/browser-sdk/v3/js/reference/video/room-session/start-screen-share) Start screen sharing #### [setLayout](/docs/browser-sdk/v3/js/reference/video/room-session/set-layout) Set the room layout #### [getLayouts](/docs/browser-sdk/v3/js/reference/video/room-session/get-layouts) Get available room layouts #### [setMemberPosition](/docs/browser-sdk/v3/js/reference/video/room-session/set-member-position) Set position for a member in the layout #### [setPositions](/docs/browser-sdk/v3/js/reference/video/room-session/set-positions) Set positions for multiple members #### [getMeta](/docs/browser-sdk/v3/js/reference/video/room-session/get-meta) Get room metadata #### [setMeta](/docs/browser-sdk/v3/js/reference/video/room-session/set-meta) Set room metadata #### [updateMeta](/docs/browser-sdk/v3/js/reference/video/room-session/update-meta) Update room metadata #### [deleteMeta](/docs/browser-sdk/v3/js/reference/video/room-session/delete-meta) Delete room metadata #### [getMemberMeta](/docs/browser-sdk/v3/js/reference/video/room-session/get-member-meta) Get member metadata #### [setMemberMeta](/docs/browser-sdk/v3/js/reference/video/room-session/set-member-meta) Set member metadata #### [updateMemberMeta](/docs/browser-sdk/v3/js/reference/video/room-session/update-member-meta) Update member metadata #### [deleteMemberMeta](/docs/browser-sdk/v3/js/reference/video/room-session/delete-member-meta) Delete member metadata #### [setInputVolume](/docs/browser-sdk/v3/js/reference/video/room-session/set-input-volume) Set input volume level #### [setOutputVolume](/docs/browser-sdk/v3/js/reference/video/room-session/set-output-volume) Set output volume level #### [setInputSensitivity](/docs/browser-sdk/v3/js/reference/video/room-session/set-input-sensitivity) Set input sensitivity level #### [setHideVideoMuted](/docs/browser-sdk/v3/js/reference/video/room-session/set-hide-video-muted) Hide video for muted members #### [setPrioritizeHandraise](/docs/browser-sdk/v3/js/reference/video/room-session/set-prioritize-handraise) Prioritize members with raised hands #### [setRaisedHand](/docs/browser-sdk/v3/js/reference/video/room-session/set-raised-hand) Raise or lower hand #### [setLocalStream](/docs/browser-sdk/v3/js/reference/video/room-session/set-local-stream) Set local media stream #### [lock](/docs/browser-sdk/v3/js/reference/video/room-session/lock) Lock the room #### [unlock](/docs/browser-sdk/v3/js/reference/video/room-session/unlock) Unlock the room #### [sendDigits](/docs/browser-sdk/v3/js/reference/video/room-session/send-digits) Send DTMF digits #### [on](/docs/browser-sdk/v3/js/reference/video/room-session/on) Subscribe to an event #### [once](/docs/browser-sdk/v3/js/reference/video/room-session/once) Subscribe to an event once #### [off](/docs/browser-sdk/v3/js/reference/video/room-session/off) Unsubscribe from an event #### [removeAllListeners](/docs/browser-sdk/v3/js/reference/video/room-session/remove-all-listeners) Remove all event listeners #### [\~\~createScreenShareObject\~\~](/docs/browser-sdk/v3/js/reference/video/room-session/create-screen-share-object) *Create screen share object* #### [\~\~hideVideoMuted\~\~](/docs/browser-sdk/v3/js/reference/video/room-session/hide-video-muted) *Hide muted video* #### [\~\~showVideoMuted\~\~](/docs/browser-sdk/v3/js/reference/video/room-session/show-video-muted) *Show muted video* ## Events #### [Events](/docs/browser-sdk/v3/js/reference/video/room-session/events) Events emitted by the RoomSession class. ## Docs - [Events](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/events.md) - [addCamera](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/add-camera.md): addCamera method for the RoomSession class. - [addDevice](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/add-device.md): addDevice method for the RoomSession class. - [addMicrophone](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/add-microphone.md): addMicrophone method for the RoomSession class. - [audioMute](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/audio-mute.md): audioMute method for the RoomSession class. - [audioUnmute](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/audio-unmute.md): audioUnmute method for the RoomSession class. - [createScreenShareObject](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/create-screen-share-object.md): createScreenShareObject method for the RoomSession class. - [deaf](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/deaf.md): deaf method for the RoomSession class. - [deleteMemberMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/delete-member-meta.md): deleteMemberMeta method for the RoomSession class. - [deleteMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/delete-meta.md): deleteMeta method for the RoomSession class. - [demote](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/demote.md): demote method for the RoomSession class. - [destroy](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/destroy.md): destroy method for the RoomSession class. - [getLayouts](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-layouts.md): getLayouts method for the RoomSession class. - [getMemberMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-member-meta.md): getMemberMeta method for the RoomSession class. - [getMembers](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-members.md): getMembers method for the RoomSession class. - [getMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-meta.md): getMeta method for the RoomSession class. - [getPlaybacks](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-playbacks.md): getPlaybacks method for the RoomSession class. - [getRecordings](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-recordings.md): getRecordings method for the RoomSession class. - [getStreams](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/get-streams.md): getStreams method for the RoomSession class. - [hangupAll](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/hangup-all.md): hangupAll method for the RoomSession class. - [hideVideoMuted](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/hide-video-muted.md): hideVideoMuted method for the RoomSession class. - [join](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/join.md): join method for the RoomSession class. - [leave](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/leave.md): leave method for the RoomSession class. - [lock](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/lock.md): lock method for the RoomSession class. - [off](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/off.md): off method for the RoomSession class. - [on](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/on.md): on method for the RoomSession class. - [once](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/once.md): once method for the RoomSession class. - [play](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/play.md): play method for the RoomSession class. - [promote](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/promote.md): promote method for the RoomSession class. - [removeAllListeners](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/remove-all-listeners.md): removeAllListeners method for the RoomSession class. - [removeAllMembers](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/remove-all-members.md): removeAllMembers method for the RoomSession class. - [removeMember](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/remove-member.md): removeMember method for the RoomSession class. - [sendDigits](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/send-digits.md): sendDigits method for the RoomSession class. - [setHideVideoMuted](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-hide-video-muted.md): setHideVideoMuted method for the RoomSession class. - [setInputSensitivity](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-input-sensitivity.md): setInputSensitivity method for the RoomSession class. - [setInputVolume](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-input-volume.md): setInputVolume method for the RoomSession class. - [setLayout](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-layout.md): setLayout method for the RoomSession class. - [setLocalStream](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-local-stream.md): setLocalStream method for the RoomSession class. - [setMemberMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-member-meta.md): setMemberMeta method for the RoomSession class. - [setMemberPosition](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-member-position.md): setMemberPosition method for the RoomSession class. - [setMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-meta.md): setMeta method for the RoomSession class. - [setOutputVolume](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-output-volume.md): setOutputVolume method for the RoomSession class. - [setPositions](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-positions.md): setPositions method for the RoomSession class. - [setPrioritizeHandraise](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-prioritize-handraise.md): setPrioritizeHandraise method for the RoomSession class. - [setRaisedHand](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/set-raised-hand.md): setRaisedHand method for the RoomSession class. - [showVideoMuted](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/show-video-muted.md): showVideoMuted method for the RoomSession class. - [startRecording](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/start-recording.md): startRecording method for the RoomSession class. - [startScreenShare](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/start-screen-share.md): startScreenShare method for the RoomSession class. - [startStream](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/start-stream.md): startStream method for the RoomSession class. - [undeaf](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/undeaf.md): undeaf method for the RoomSession class. - [unlock](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/unlock.md): unlock method for the RoomSession class. - [updateCamera](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/update-camera.md): updateCamera method for the RoomSession class. - [updateMemberMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/update-member-meta.md): updateMemberMeta method for the RoomSession class. - [updateMeta](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/update-meta.md): updateMeta method for the RoomSession class. - [updateMicrophone](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/update-microphone.md): updateMicrophone method for the RoomSession class. - [updateSpeaker](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/update-speaker.md): updateSpeaker method for the RoomSession class. - [videoMute](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/video-mute.md): videoMute method for the RoomSession class. - [videoUnmute](https://signalwire.com/docs/browser-sdk/v3/js/reference/video/room-session/video-unmute.md): videoUnmute method for the RoomSession class.