---slug: /guides/video/interactive-live-streamingx-custom: author: danieleds---# Interactive Live StreamingIn case of large events, scalability is key. If you need to broadcast your livevideo event to a large audience, we have a couple of solutions.As a first option, you can use [RTMPStreaming](/guides/video/streaming-to-youtube-and-other-platforms).With RTMP Streaming, you can stream the audio and video of the video room to anexternal service such as YouTube, from where your audience can watch.Streaming with RTMP works fine in many cases, but sometimes you may need moreflexibility. What if you want to temporarily bring a member from the audience onstage, for example to ask or answer a question? What if you want your own customUI? To address these advanced use cases, we support _Interactive LiveStreaming_.## What is Interactive Live StreamingYou can use Interactive Live Streaming with any of your video rooms. Whenstreaming, a room can have two different kinds of participants: audience andmembers.An _audience participant_ can only watch and listen: their own media is notgoing to be shared. On the other hand, a _member_ is the typical videoconferenceroom member: they can watch and listen, but their own media is also shared withall other participants in the room. Depending on their permissions, members canalso perform other actions, such as changing the layout of the room or playingvideos.When streaming, audience participants can be _promoted_ to members and,vice-versa, members can be _demoted_ to audience participants.:::info Demo ApplicationTo try Interactive Live Streaming in a demo application that we built for you,check out our [GitHubrepo](https://github.com/signalwire/examples/tree/main/Video/Interactive-Live-Streaming).:::## Joining a roomWhen using the [BrowserSDK](docs/sdks/reference/browser-sdk/00-browser-sdk-reference.mdx), the kind of[Video Room Token](pathname:///rest/generate-a-new-video-room-token) that youget determines whether you join the room as audience or as a member.### Joining as audienceTo join as audience, specify join_as: audience when creating a token.bashcurl -L -X POST https://$SPACE_URL/api/video/room_tokens \ -H Content-Type: application/json \ -H Accept: application/json \ -u $PROJECT_ID:$API_TOKEN \ --data-raw { room_name: my_room, user_name: John Smith, join_as: audience }Then use the returned token to initialize a[RoomSession](docs/sdks/reference/browser-sdk/video/video-roomsession.mdx).### Joining as a memberTo join as an audience member, specify join_as: member when creating a token.bashcurl -L -X POST https://$SPACE_URL/api/video/room_tokens \ -H Content-Type: application/json \ -H Accept: application/json \ -u $PROJECT_ID:$API_TOKEN \ --data-raw { room_name: my_room, user_name: John Smith, join_as: member }Then use the returned token to initialize a[RoomSession](docs/sdks/reference/browser-sdk/video/video-roomsession.mdx):jsimport * as SignalWire from @signalwire/js;const roomSession = new SignalWire.Video.RoomSession({ token: