@@ -107,6 +107,16 @@ The specification and meaning of the fields in the URI depend on the mode.
107
107
The **PORT** part is always mandatory and it designates either the port number
108
108
for the target host or the port number to be bound to read from.
109
109
110
+
The following options are available through URI parameters:
111
+
112
+
- **iptos**: sets the `IP_TOS` socket option
113
+
- **ttl**: sets the `IP_TTL` or `IP_MULTICAST_TTL` option, depending on mode
114
+
- **mcloop**: sets the `IP_MULTICAST_LOOP` option (multicast mode only)
115
+
- **rcvbuf**: sets the `SO_RCVBUF` socket option
116
+
- **sndbuf**: sets the `SO_SNDBUF` socket option
117
+
- **adapter**: sets the local binding address
118
+
- **source**: uses `IP_ADD_SOURCE_MEMBERSHIP`, see below for details
119
+
110
120
For sending to unicast:
111
121
112
122
```yaml
@@ -173,7 +183,7 @@ options that can be set through the parameters.
173
183
SRT can be connected using one of three connection modes:
174
184
175
185
- **caller**: the "agent" (this application) sends the connection request to
176
-
the peer, which must be **listener**, and this way it initiates the
186
+
the peer, which must be **listener**, and this way it initiates the
177
187
connection.
178
188
179
189
- **listener**: the "agent" waits to be contacted by any peer **caller**.
@@ -182,50 +192,73 @@ does not use this ability; after the first connection, it no longer
182
192
accepts new connections.
183
193
184
194
- **rendezvous**: A one-to-one only connection where both parties are
185
-
equivalent and both connect to one another simultaneously. Whoever happened
186
-
to start first (or succeeded to punch through the firewall) is meant to have
195
+
equivalent and both attempt to initiate a connection simultaneously. Whichever party happens
196
+
to start first (or succeeds in punching through the firewall first) is considered to have
187
197
initiated the connection.
188
198
189
199
This mode can be specified explicitly using the **mode** parameter. When it's
190
-
not specified, then it is "deduced" the following way:
200
+
not specified, then it is derived based on the *host* part in the URI and
201
+
the presence of the **adapter** parameter:
191
202
192
-
- `srt://:1234` - the *port* is specified (1234), but *host* is empty. This assumes **listener** mode.
193
-
- `srt://remote.host.com:1234` - both *host* and *port* are specified. This assumes **caller** mode.
203
+
* Listener mode: if you leave the *host* part empty (**adapter** may be specified):
204
+
- `srt://:1234`
205
+
* Caller mode: if you specify *host* part, but not **adapter** parameter:
206
+
- `srt://remote.host.com:1234`
207
+
* Rendezvous mode: if you specify *host* AND **adapter** parameter:
208
+
- `srt://remote.host.com:1234&adapter=my.remote.addr`
194
209
195
-
When the `mode` parameter is specified explicitly, then the interpretation of the `host` part is the following:
210
+
Sometimes the required parameter specification results in a different mode
211
+
than desired; in this case you should specify the mode explicitly.
196
212
197
-
- For caller, it's always the destination host address. If this is empty, it is
198
-
resolved to 0.0.0.0, which usually should mean connecting to the local host
213
+
The interpretation of the *host* and *port* parts is the following:
199
214
200
-
- For listener, it defines the IP address of the local device on which the
201
-
socket should listen, e.g.:
215
+
- In **LISTENER** mode:
216
+
- *host* part: the local IP address to bind (default: 0.0.0.0 - "all devices")
217
+
- *port* part: the local port to bind (mandatory)
218
+
- **adapter** parameter: alternative for *host* part, e.g.:
202
219
203
220
```yaml
204
221
srt://10.10.10.100:5001?mode=listener
205
222
```
206
223
207
-
An alternative method to specify this IP address is the `adapter` parameter:
224
+
or
208
225
209
226
```yaml
210
227
srt://:5001?adapter=10.10.10.100
211
228
```
212
229
213
-
The **rendezvous** mode is not deduced and it has to be specified
214
-
explicitly. Note also special cases of the **host** and **port** parts
215
-
specified in the URI:
216
-
217
-
- **CALLER**: the *host* and *port* parts are mandatory and specify the remote host and port to be contacted.
218
-
- The **port** parameter can be used to enforce the local outgoing port (**not to be confused** with remote port!).
219
-
- The **adapter** parameter is not used.
220
-
- **LISTENER**: the *port* part is mandatory and it specifies the local listening port.
221
-
- The **adapter** parameter can be used to specify the adapter.
222
-
- The *host* part, if specified, can be also used to set the adapter - although in this case **mode=listener** must be set explicitly.
223
-
- The **port** parameter is not used.
224
-
- **RENDEZVOUS**: the *host* and *port* parts are mandatory.
225
-
- The *host* part specifies the remote host to contact.
226
-
- The *port* part specifies **both local and remote port**. Note that the local port is this way both listening port and outgoing port.
227
-
- The **adapter** parameter can be used to specify the adapter.
228
-
- The **port** parameter can be used to specify the local port to bind to.
230
+
- In **CALLER** mode:
231
+
- *host* part: remote IP address to connect to (mandatory)
232
+
- *port* part: remote port to connect to (mandatory)
233
+
- **port** parameter: the local port to bind (default: 0 - "system autoselection")
234
+
- **adapter** parameter: the local IP address to bind (default: 0.0.0.0 - "system selected device")
235
+
236
+
```yaml
237
+
srt://remote.host.com:5001
238
+
```
239
+
240
+
```yaml
241
+
srt://remote.host.com:5001?adapter=local1&port=4001&mode=caller
242
+
```
243
+
244
+
- In **RENDEZVOUS** mode: same as **CALLER** except that the local
245
+
port, if not specified by the **port** parameter, defaults to the
246
+
value of the remote port (specified in the *port* part in the URI).
247
+
248
+
```yaml
249
+
srt://remote.host.com:5001?mode=rendezvous
250
+
```
251
+
(uses `remote.host.com` port 5001 for a remote host and the default
252
+
network device for routing to this host; the connection from the peer is
253
+
expected on that device and port 5001)
254
+
255
+
256
+
```yaml
257
+
srt://remote.host.com:5001?port=4001&adapter=local1
258
+
```
259
+
(uses `remote.host.com` port 5001 for a remote host and the peer
260
+
is expected to connect to `local1` address and port 4001)
261
+
229
262
230
263
**IMPORTANT** information about IPv6.
231
264
@@ -238,14 +271,14 @@ the following restrictions:
238
271
2. In listener mode, if you leave the host empty, the socket is bound to
239
272
`INADDR_ANY` for IPv4 only. If you want to make it listen on IPv6, you need to
240
273
specify the host as `::`.
241
-
NOTE: Don't use square brackets syntax in the adapter specification,
242
-
as in this case only the host is expected.
274
+
NOTE: Don't use square brackets syntax in the **adapter** parameter
275
+
specification, as in this case only the host is expected.
243
276
244
277
3. If you want to listen for connections from both IPv4 and IPv6, mind the
245
278
`ipv6only` option. The default value for this option is system default (see
246
279
system manual for `IPV6_V6ONLY` socket option); if unsure, you might want to
247
280
enforce `ipv6only=0` in order to be able to accept both IPv4 and IPv6
248
-
connections in the same listener.
281
+
connections by the same listener, or set `ipv6only=1` to accept exclusively IPv6.
249
282
250
283
4. In rendezvous mode you may only interconnect both parties using IPv4,
251
284
or both using IPv6. Unlike listener mode, if you want to leave the socket
@@ -271,21 +304,22 @@ Examples:
271
304
connection with local address `inaddr6_any` (IPv6) and port 4000 to a
272
305
destination with port 5000.
273
306
274
-
* `srt://[::1]:5000?adapter=127.0.0.1&mode=rendezvous` - this URI is invalid
275
-
(different IP versions for binding and target address)
307
+
* `srt://[::1]:5000?adapter=127.0.0.1` - this URI is invalid
308
+
(different IP versions for binding and target address in rendezvous mode)
276
309
277
-
Some parameters handled for SRT medium are specific, all others are socket options. The following parameters are handled special way by `srt-live-transmit`:
310
+
Some parameters handled for SRT medium are specific, all others are socket options. The following parameters are handled in a special way by `srt-live-transmit`:
278
311
279
312
- **mode**: enforce caller, listener or rendezvous mode
280
-
- **port**: enforce the **outgoing** port (the port number that will be set in the UDP packet as a source port when sent from this host). This can be used only in **caller mode**.
313
+
- **port**: enforce the **outgoing** port (the port number that will be set in the UDP packet as a source port when sent from this host). Not used in **listener** mode.
281
314
- **blocking**: sets the `SRTO_RCVSYN` for input medium or `SRTO_SNDSYN` for output medium
282
315
- **timeout**: sets `SRTO_RCVTIMEO` for input medium or `SRTO_SNDTIMEO` for output medium
283
-
- **adapter**: sets the adapter for listening in *listener* or *rendezvous* mode
316
+
- **adapter**: sets the local IP address to bind
284
317
285
-
All other parameters are SRT socket options. The following have the following value types:
318
+
All other parameters are SRT socket options. The Values column uses the
319
+
following type specification:
286
320
287
321
- `bool`. Possible values: `yes`/`no`, `on`/`off`, `true`/`false`, `1`/`0`.
288
-
- `bytes` positive integer [1; INT32_MAX].
322
+
- `bytes` positive integer `[1; INT32_MAX]`.
289
323
- `ms` - positive integer value of milliseconds.
290
324
291
325
| URI param | Values | SRT Option | Description |
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4