Skip to content

Stream Ingress

Flex Video can automatically transcode streams pushed to the system. When you publish a stream via RTSP or RTMP, a transcoding pipeline is created automatically and the output is made available on the Flex Video RTSP server.

How It Works

  1. Push a stream to Flex Video's ingest server
  2. A transcoding pipeline is created automatically
  3. The transcoded output is available as an RTSP stream
  4. When you stop publishing, the pipeline is cleaned up

No manual pipeline creation is required.

Supported Protocols

Protocol Ingest URL Default Port
RTSP rtsp://<server>:8554/<stream-name> 8554
RTMP rtmp://<server>:1935/<stream-name> 1935

Replace <server> with your Flex Video server's IP address and <stream-name> with any name you choose.

Examples

OBS Studio

Stream from OBS to Flex Video:

  1. Open OBS Settings > Stream
  2. Set Service to "Custom"
  3. Set Server to rtmp://<server>:1935/live
  4. Set Stream Key to any name (e.g., mystream)
  5. Click Start Streaming

The transcoded output will be available at:

rtsp://<server>:8731/livemystream

RTSP Camera (Push Mode)

Configure an IP camera to push its stream:

  1. Set the camera's RTSP push destination to rtsp://<server>:8554/camera1
  2. The camera starts publishing

The transcoded output will be available at:

rtsp://<server>:8731/camera1

FFmpeg

Push a local file or device as a stream:

# Push a video file
ffmpeg -re -i video.mp4 -c copy -f rtsp rtsp://<server>:8554/test-stream

# Push a USB camera (Linux)
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -f rtsp rtsp://<server>:8554/usbcam

The transcoded output will be available at:

rtsp://<server>:8731/test-stream

Default Transcoding Settings

Ingested streams are transcoded with the following defaults:

Setting Value
Codec H.264
Bitrate 750 kbps
Resolution 1920x1080
Frame Rate 30 fps
KLV Passthrough Enabled
Geolocation Extraction Enabled

Custom Settings

To customize transcoding settings for ingested streams, create a pipeline manually via the Pipelines API or the Web Interface instead.

Stream Name Rules

Stream names are sanitized to create pipeline IDs. Only alphanumeric characters, dashes, and underscores are kept:

Stream Name Pipeline ID
live/camera-1 livecamera-1
stream.test streamtest
cam@123 cam123

Viewing Ingested Streams

Once a stream is being ingested, you can:

  • Web UI: The pipeline will appear on the main pipeline list page
  • API: curl -k https://<server>:3539/flex/pipeline
  • RTSP Player: Connect to rtsp://<server>:8731/<pipeline-id> with an RTSP client. See Receiving & Playback for compatible players and setup.

Troubleshooting

Stream Not Appearing

  1. Check that your stream is actually publishing (OBS shows "Live", ffmpeg shows no errors)
  2. Check the ingest server logs: docker logs flex-mtx
  3. Check the API logs: docker logs flex-api

Pipeline Not Created

  1. Check the API logs: docker logs flex-api
  2. Verify both containers are running: docker ps

Stream Stops Unexpectedly

  1. Check source stream stability
  2. Review pipeline status in the Web UI or via API
  3. Check logs for encoding errors: docker logs flex-api