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
| Source | Use | Example |
|---|---|---|
| HTTP/HTTPS | HLS, DASH, Smooth Streaming, or HTTP-TS | https://source.example/live/index.m3u8 |
| UDP/RTP | Unicast or multicast transport stream | udp://239.10.10.10:5000?localaddr=192.0.2.10 |
| RTSP | Camera or contribution source | rtsp://user:password@source.example:554/path |
| RTMP/RTMPS | Existing RTMP publisher | rtmp://source.example/app/name |
| SRT | Reliable contribution over an unreliable network | srt://source.example.com:9000?mode=caller&latency=120000 |
| TCP | Raw TCP contribution | tcp://source.example:9000 |
| DVB | Service discovered by an Engine Adapter | dvb://server=1&adapter=2&sid=101 |
| Local RTMP publish | Let a publisher such as OBS push into Engine | rtmplocal://a-unique-token-at-least-16-characters |
| Video capture | V4L2 video with an optional ALSA input | v4l2://v4l2=/dev/video0&alsa=auto |
| Local file | File readable by the selected server | /data/input.ts |
Add Sources
- Put the preferred URL first and backup URLs below it. Engine tries them in that order.
- Prefix a saved URL with
#to skip it without deleting it. - Start with Copy video/audio and one output.
- 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
- Open Stream → Add Stream and select an Engine server that can reach YouTube.
- Paste the YouTube video or live URL into Source Stream. Start with Copy video/audio and one output.
- 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
- In Chrome, install Get cookies.txt LOCALLY. Open
chrome://extensions, select Details for the extension, and turn on Allow in incognito. - Open a new incognito window, sign in to YouTube, then open
https://www.youtube.com/robots.txtin the same tab. - Export the
youtube.comcookies in Netscapecookies.txtformat with the extension. Close the incognito window after export. - Transfer the file securely to the Engine server selected for the Stream. Keep it private and readable by the Engine service.
- In the Stream settings, add
cookies=/absolute/path/to/cookies.txtto 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:
| Field | Effect |
|---|---|
| HTTP User Agent | Sets the request User-Agent |
| HTTP Referer | Sets the request Referer |
| HTTP Headers | Adds headers; separate lines with literal \r\n |
| Proxy | Tries the selected Engine proxy definitions |
| HTTP Local Address | Binds 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=1Engine removes recognized Engine options before opening the source. Unrecognized parameters remain in the upstream URL. Names are case-sensitive.
| Parameter | Values | Effect |
|---|---|---|
decryption_key | KID:KEY or comma-separated pairs | Source decryption keys for supported manifests |
ignore_subtitles | 0 or 1 | Ignore manifest subtitle tracks |
segment_with_manifest_params | 0 or 1 | Copy manifest parameters to segment requests |
segment_with_proxy | 0 or 1 | Use the source proxy for segments |
http_proxy | Proxy URL | Override the proxy for this HTTP source |
http_persistent | 0 or 1 | Control persistent HTTP connections |
headers | Name: value\r\nName2: value | Send source HTTP headers |
stream_loop | -1 or non-negative count | Loop a finite source |
language | Language tag | Set 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=1Keep 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:
- append
?stream_loop=-1to the file source; - enable Rate Emulation so Engine reads the file at media speed;
- 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.