Live Streaming using RTMP Ingestion


  • Free usage is limited to 5 minutes for HD and 15 minutes for non-HD resolution for every live stream for a particular account.
  • This feature has been gated. In case you require access beyond the available free usage, please reach out to us through the chat support on 100ms dashboard with your customer ID, company name, and your use case for RTMP Ingestion.

This guide will help you start a live stream in 100ms from OBS or any external broadcasting application over RTMP.

Create a Template

The first step is to create a template which is suitable for live streaming using RTMP Ingestion.

  1. On the 100ms Dashboard, click on ‘Create Template’.

create template

  1. Select ‘Live Streaming’ as your use-case and click on ‘Configure’.

select live streaming

  1. Choose the "Streaming software (using RTMP-Ingestion)" option when asked, "Where will the Broadcaster stream from?". Then, proceed to the "Select Add-ons" section.

select rtmp in

  1. Proceed through the rest of the steps by answering the questions according to your preferences.

  2. On the last screen, the RTMP Ingest details (stream key and RTMP Endpoint) are displayed for the default room created for the template. Input the stream key, share the viewer role link and start your stream.

rtmp stream key details

Note on editing an existing templates (Not recommended)

Live streaming over RTMP-In can also be enabled for rooms with existing templates that have live streaming enabled. However, this is not recommended as other modifications need to be made for the broadcaster role to join the room without going live from the browser.

Getting stream details

Since the live stream is started for a specific room, a room needs to be created using the Create Room API or through the 100ms Dashboard. Once a room is created, a stream key needs to be generated for the room. Using the stream key and the RTMP Ingest endpoint (URL), any third party application can send a media stream to the room over RTMP. Once a stream key is generated, it remains valid until explicitly reset or disabled by the user.

Stream key along with RTMP Ingest endpoint for a room can be generated and fetched using the below methods.

Create and Join a Room

  1. On 100ms, dashboard, click on ‘Create Room’ and configure the room name and template settings.
  2. Continue to create a new room based on the selected template.
  3. In join your room panel, Click on ‘Stream Key Details’ under ‘Go live using RTMP Ingest’ section to generate and access the stream key and RTMP URL.

Input stream details

Once stream key and RTMP endpoint have been fetched and copied, these need to be inputted in a streaming software that supports RTMP-Out. We’ll be using OBS Studio for our example although you can use any software that supports RTMP-Out.

  1. Click on ‘Settings’ in the software interface.

obs studio interface

  1. Click on ‘Stream’ and input RTMP URL in the ‘Server’ field and the stream key in the ‘Stream Key’ field.

obs studio stream settings

  1. Following are the recommended settings

    a. Configure output settings in the Output tab. OBS Studio output settings

    b. Configure audio settings in the Audio tab. OBS Studio audio settings

  2. Click on ‘OK’ to confirm the details.

Refer to this guide to set up OBS Studio for the desired experience.

Managing the live stream

Starting the live stream

Start your live stream directly from the broadcasting software. In case of OBS Studio, click on the ‘Start Streaming’ button under ‘Controls’ to begin the live stream.

obs studio start live stream

Note on starting the live stream

While starting a live stream with RTMP Ingest, do not use ‘Start live stream’ API or SDK functionality. The live stream will commence automatically upon a successful connection to 100ms Ingest servers by OBS or the external application.

Once the RTMP connection request is initiated from OBS/external application, the following webhooks will be dispatched to indicate the progression of the live stream.

WebhookWhat does it signify
ingest.start.successConnection with 100ms ingest server is successfully established. 100ms server will internally initiate a request to start a live stream on the room.
hls.started.successLive stream on the room has successfully started. Playback is active from this point onwards. Application can enable the viewer to join the room with the 'viewer' role.
ingest.start.failureConnection with 100ms ingest server has failed. The exact reason can be inferred from the error code and error message.
hls.failureAny internal failure in the live stream start up process.
ingest.end.successConnection with 100ms ingest server has been successfully terminated. This is sent on stopping the stream from OBS / external application. Our server will internally signal to stop the live stream on the room
hls.stopped.successLive stream has been successfully stopped. Playback is not active from this point onwards.
hls.recording.successRecording of the live stream is successfully generated.

Previewing your live stream

There is no built-in functionality is available to preview the stream as of now. However, you can preview and watch along by joining in through the viewer-near-realtime role.

Interactivity during live stream

The interactivity between the broadcaster and the viewers will be very limited in case of RTMP-In live streams.

  1. On-stage and off-stage functionality is not supported. Since the media is ingested from an external source and directly streamed through HLS, the viewers of the HLS stream will not be able to see anything going inside the conferencing (WebRTC) room. This feature is meant for a one-way broadcast from a single broadcaster to an audience
  2. The peers in the conferencing (WebRTC) room (if any) will not be able to watch the incoming RTMP-Ingested media stream.
  3. The broadcaster role created for the given template can chat with the viewers, but the experience will be sub-optimal as the stream is running couple of seconds delayed.

Ending the live stream

To instantly terminate the live stream, use 100ms SDK methods or REST APIs,

On stopping the stream from OBS / external streaming application, only the RTMP connection to 100ms ingestion servers will be terminate. Note that this will merely stop the ingest from the external streaming application into 100ms room. The live stream will NOT end and continue to run while a 'disconnection slate' is shown in the playback until the reconnection window expires. The same behaviour applies when the external streaming application faces disconnection with 100ms Ingest servers due to any network interruptions.

disconnection slate

The duration of the live stream’s reconnection window can be configured using the autoStopTimeout field in the Policy API. After the reconnect window elapses, the live stream will be terminated automatically.


Any new RTMP connection initiated from OBS or another streaming app while the live stream is still trying to reconnect, it will be seen as a reconnection attempt to the existing live stream. Once the reconnection is successful, the "disconnection slate" in the live stream will be replaced by the incoming feed from the broadcaster.

After the live stream

Based on your live streaming use-case, you can choose to do any of the following after the live stream has ended.

  • Continue using the same room for your live streams. The older stream key and RTMP URL endpoint will be valid to start future live streams since they do not have an expiry.

  • Reset or disable the stream key for the given room. This can be done using the following methods.

    Reset the stream keys on the 'Room Details' page using the reset button beside the stream key.

    rtmp stream key functions


Lock or disable the room by either using 100ms dashboard or by using the Disable / Enable Room API. This will also render the associated key useless until the room is reactivated.

Have a suggestion? Recommend changes ->

Run in postman

Was this helpful?