Stream from OBS with RTMP ingest
Create an RTMP ingress, drop the URL and stream key into OBS, and go live. Includes the optional stream password and a player URL you can share.
RTMP is the workhorse
RTMP is the most widely supported way to push a stream from software like OBS or ffmpeg. In StreamHub you create an RTMP ingress, which returns a push URL and a stream key; OBS pushes to it, and the feed becomes a room you can watch and record.
RTMP ingest defaults to transcoding on (multi-layer), which is what the adaptive player and HLS need — so you get scalable playback for free.
Step 1 — create the ingress
curl -s -X POST $BASE/apps/live/ingress -H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"inputType":"rtmp","room":"studio"}'
The response gives you everything OBS needs:
{ "data": {
"rtmp_url": "rtmp://media.example.com:1935/live/abc123",
"stream_key": "abc123",
"player_url": "https://media.example.com/play/live/studio",
"embed_iframe": "<iframe ...></iframe>"
} }
Step 2 — configure OBS
In OBS, open Settings → Stream and choose Custom:
- Server:
rtmp://media.example.com:1935/live - Stream Key:
abc123
Click Start Streaming. Within a moment the stream appears in the app's live tab, and the player_url is watchable.
The same works with ffmpeg:
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv \
rtmp://media.example.com:1935/live/abc123
Optional — password-protect the push
LiveKit has no native RTMP password, so StreamHub adds one. With the rtmpPassword feature enabled on the app, the ingress response includes a stream_password, and you authorize the push before it starts:
curl -s -X POST $BASE/apps/live/ingress/IN_xxx/validate \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"password":"s3cr3t"}'
If an RTMP push starts unauthorized, StreamHub terminates it and fires stream_ended with reason unauthorized_rtmp_password.
Watch and share
The player_url and embed_iframe are public — no token needed — so you can drop the iframe straight into a page. For an interactive audience use the WebRTC player; for a large or mobile audience, the same room is available as HLS at /hls/live/studio/index.m3u8.
One ingress equals one stream: the webhook layer dedupes the ingress event with the participant so your streams list stays clean.