Skip to content
Source Protocols and URL Options

Source Protocols and URL Options

Enter the upstream address in Source Stream. The selected Engine server—not the browser—must be able to open it.

Source Forms

SourceUseExample
HTTP/HTTPSHLS, DASH, Smooth Streaming, or HTTP-TShttps://source.example/live/index.m3u8
UDP/RTPUnicast or multicast transport streamudp://239.10.10.10:5000?localaddr=192.0.2.10
RTSPCamera or contribution sourcertsp://user:password@source.example:554/path
RTMP/RTMPSExisting RTMP publisherrtmp://source.example/app/name
SRTReliable contribution over an unreliable networksrt://source.example.com:9000?mode=caller&latency=120000
TCPRaw TCP contributiontcp://source.example:9000
DVBService discovered by an Engine Adapterdvb://server=1&adapter=2&sid=101
Local RTMP publishLet a publisher such as OBS push into Enginertmplocal://a-unique-token-at-least-16-characters
Video captureV4L2 video with an optional ALSA inputv4l2://v4l2=/dev/video0&alsa=auto
Local fileFile readable by the selected server/data/input.ts

Add Sources

  1. Put the preferred URL first and backup URLs below it. Engine tries them in that order.
  2. Prefix a saved URL with # to skip it without deleting it.
  3. Start with Copy video/audio and one output.
  4. Confirm the selected input, bitrate, programs, tracks, timestamps, and failover before adding processing.

For DVB, use the satellite-dish selector. For local RTMP, use a unique 16–128 character token containing letters, numbers, ., _, or -, then publish to rtmp://server:port/stream/<token>.

YouTube Sources

  1. Open Stream → Add Stream and select an Engine server that can reach YouTube.
  2. Paste the YouTube video or live URL into Source Stream. Start with Copy video/audio and one output.
  3. Save, start, and check the Stream log and playback.

Engine uses yt-dlp to resolve YouTube pages. If the log says Sign in to confirm you're not a bot, a cookies file may help.

Export and Use YouTube Cookies

  1. In Chrome, install Get cookies.txt LOCALLY. Open chrome://extensions, select Details for the extension, and turn on Allow in incognito.
  2. Open a new incognito window, sign in to YouTube, then open https://www.youtube.com/robots.txt in the same tab.
  3. Export the youtube.com cookies in Netscape cookies.txt format with the extension. Close the incognito window after export.
  4. Transfer the file securely to the Engine server selected for the Stream. Keep it private and readable by the Engine service.
  5. In the Stream settings, add cookies=/absolute/path/to/cookies.txt to the YouTube URL in Source Stream. Use ? if the URL has no query string, or & if it already has one. Save and start or restart the Stream.

For example: https://www.youtube.com/watch?v=VIDEO_ID&cookies=/absolute/path/to/cookies.txt. The parameter names a file on the selected Engine server; do not paste the cookie contents into the URL. If the cookies expire, export them again and replace the file.

YouTube Sources After a Restart

The management page and other sources can become ready while YouTube support is still starting. YouTube source checks and Streams wait for that preparation to finish.

Changed in Engine 1.0.1+

Video Website Sources

Engine uses yt-dlp for URLs matched by a dedicated extractor in the bundled yt-dlp and plugins. Other URLs are opened directly as media sources. For a page with an embedded video and no dedicated extractor, enter the direct media URL.

Changed in Engine 1.0.5+

HTTP Request Settings

Use the fields beside Source Stream instead of embedding ordinary request settings in the URL:

FieldEffect
HTTP User AgentSets the request User-Agent
HTTP RefererSets the request Referer
HTTP HeadersAdds headers; separate lines with literal \r\n
ProxyTries the selected Engine proxy definitions
HTTP Local AddressBinds the request to one interface address on the selected server

Change one field at a time. A proxy or local address must be reachable from the server running the Stream.

Query Parameters

Start with ? and separate parameters with &:

https://source.example/manifest.mpd?token=value&ignore_subtitles=1

Engine removes recognized Engine options before opening the source. Unrecognized parameters remain in the upstream URL. Names are case-sensitive.

ParameterValuesEffect
decryption_keyKID:KEY or comma-separated pairsSource decryption keys for supported manifests
ignore_subtitles0 or 1Ignore manifest subtitle tracks
segment_with_manifest_params0 or 1Copy manifest parameters to segment requests
segment_with_proxy0 or 1Use the source proxy for segments
http_proxyProxy URLOverride the proxy for this HTTP source
http_persistent0 or 1Control persistent HTTP connections
headersName: value\r\nName2: valueSend source HTTP headers
stream_loop-1 or non-negative countLoop a finite source
languageLanguage tagSet language for .srt or .ass input

Protocol-native parameters are preserved, for example:

srt://source.example.com:9000?mode=caller&latency=120000&streamid=channel-1
udp://239.10.10.10:5000?localaddr=192.0.2.10&reuse=1

Keep tokens, headers, proxy credentials, and decryption keys out of screenshots and logs.

Live HLS and DASH URL Updates

Integrations that update a running HLS or DASH source URL can also update request settings. The new URL can include headers, http_proxy, http_persistent, and decryption_key. Omitted settings keep their current values. An empty headers, http_proxy, or decryption_key clears that setting; http_persistent must be 0 or 1.

Engine 1.0.2+

Percent-encode parameter values, especially spaces, &, +, and line breaks in headers. Literal \r\n header separators are also accepted. Source signature parameters remain unchanged.

Use updates to renew the address of the same source. Audio, video, subtitles, and segment numbering must remain compatible. New settings take effect at segment boundaries. Invalid updates keep the current source and can be replaced with a corrected URL. Switching to a different channel or codec requires a restart.

KID:KEY updates keep the current and previous key lists to cover overlapping segments during key rotation. Repeating the same mappings does not discard the previous list. The current list takes precedence for the same KID. An empty decryption_key clears both lists. When a KID encountered while reading media has no matching key, Engine logs an error and continues processing the encrypted media. This can cause decoding errors or a black picture. Include older KIDs explicitly if playback spans more than two key updates.

Loop a Finite File

To use a local media file as a continuous live source:

  1. append ?stream_loop=-1 to the file source;
  2. enable Rate Emulation so Engine reads the file at media speed;
  3. start with one Copy output and verify the loop boundary.

Use a non-negative stream_loop value for a finite repeat count. Do not enable Rate Emulation for a normal live source.