A dualirl:// link opens Dual IRL Stream and offers to save one or more stream profiles. A streaming service or a friend can send you one, and you can put one in a note, a message or a QR code. You never have to copy an address and a Stream ID into the profile screen by hand.
What happens when you open a link
- Tap the link. Your phone opens Dual IRL Stream. If it asks which app to use, pick Dual IRL Stream. A link sent to you as text can also be shared to Dual IRL Stream from the share sheet.
- The app shows Import stream profile with every profile the link would save. For each one you see its name, which you can change, whether it is new or replaces one of yours, the server address, whether it is a single connection or bonded over every network, the latency, the codec and whether it includes a Stream ID. The Stream ID itself is not shown.
- Tap Import to save them, or Cancel to save nothing. Nothing is saved until you tap Import.
Only import a link from someone you trust. A profile points your stream at a server, so a link from a stranger could send your video to them.
A link that is damaged or does not make sense shows a message saying so and saves nothing. If a link holds several connections and only some can be used, the app imports those and lists the ones it left out. A connection whose Stream ID or passphrase the app cannot send, such as one with a space or an &, is left out the same way.
What a link looks like
Every link starts with dualirl://set/v1?. set is the action and v1 is the version of this format. The rest is a list of name=value pairs joined by &. Each value is percent-encoded, so a colon is %3A, a slash is %2F and a space is %20.
The parts of a link
A link describes one or more connections. Each connection becomes one profile. The pairs for connections are written like conn[][url]. A connection starts at its conn[][url], and the pairs after it, up to the next conn[][url], belong to it. A link can hold up to 8 connections.
| Part | What it does |
|---|---|
conn[][url] | Required. The server address. srt://host:port makes a single-connection SRT profile. srtla://host:port makes an SRT profile that is bonded over every network. Other kinds of address are not imported. |
conn[][name] | The profile name. If it is missing, the profile is named after the server. |
conn[][srtstreamid] | The Stream ID the server asks for. |
conn[][srtlatency] | The SRT latency in milliseconds. |
conn[][active] | A connection becomes your active profile unless it says off. When several would, the first one wins. |
conn[][overwrite] | on replaces your profile that has exactly the same name, keeping its resolution and bitrate and swapping in the new connection. Without it the link always adds a new profile. |
enc[vid][format] | hevc or h264. Sets the codec of every profile in the link. Without it, new profiles start on H.265 / HEVC. |
Other parts of a link are ignored.
A worked example
This link adds two profiles for one server, one single-connection and one bonded, and makes the bonded one active:
dualirl://set/v1?conn[][url]=srt%3A%2F%2Fingest.example.com%3A6000&conn[][name]=Example%20SRT&conn[][srtstreamid]=publish%3Alive%3Ayourname%3Ayourkey&conn[][active]=off&conn[][overwrite]=on&conn[][url]=srtla%3A%2F%2Fingest.example.com%3A5000&conn[][name]=Example%20Bonded&conn[][srtstreamid]=publish%3Alive%3Ayourname%3Ayourkey&conn[][active]=on&conn[][overwrite]=on
- The first
conn[][url]issrt://ingest.example.com:6000. With the firstconn[][name], it makes a profile called Example SRT. - The second
conn[][url]issrtla://ingest.example.com:5000. With the secondconn[][name], it makes a profile called Example Bonded that streams over every network. - Both carry the Stream ID
publish:live:yourname:yourkey. - The first says
conn[][active]=off, so only Example Bonded becomes your active profile. - Both have
conn[][overwrite]=on. Opening the same link again later replaces those two profiles, which is how you pick up a changed key.
Links from Larix
The app also opens larix://set/v1?… links, which use exactly the same format, so a link made for Larix works here too.