Live Streaming using RTMP Ingestion
IMPORTANT
- 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.
- On the 100ms Dashboard, click on ‘Create Template’.
- Select ‘Live Streaming’ as your use-case and click on ‘Configure’.
- Choose the "Streaming software (using RTMP-Ingestion)" option when asked, "Where will the Broadcaster stream from?". Then, proceed to the "Select Add-ons" section.
-
Proceed through the rest of the steps by answering the questions according to your preferences.
-
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.
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
- On 100ms, dashboard, click on ‘Create Room’ and configure the room name and template settings.
- Continue to create a new room based on the selected template.
- 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.
- Click on ‘Settings’ in the software interface.
- Click on ‘Stream’ and input RTMP URL in the ‘Server’ field and the stream key in the ‘Stream Key’ field.
-
Following are the recommended settings
a. Configure output settings in the Output tab.
b. Configure audio settings in the Audio tab.
-
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.
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.
Webhook | What does it signify |
---|---|
ingest.start.success | Connection with 100ms ingest server is successfully established. 100ms server will internally initiate a request to start a live stream on the room. |
hls.started.success | Live 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.failure | Connection with 100ms ingest server has failed. The exact reason can be inferred from the error code and error message. |
hls.failure | Any internal failure in the live stream start up process. |
ingest.end.success | Connection 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.success | Live stream has been successfully stopped. Playback is not active from this point onwards. |
hls.recording.success | Recording 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.
- 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
- The peers in the conferencing (WebRTC) room (if any) will not be able to watch the incoming RTMP-Ingested media stream.
- 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.
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.
Note
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.
Note
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.