This is useful in unicast (or multicast-routing?) situations where
packets will traverse networks with unusually small MTU.
This option is experimental,
and may change or be removed in a future release.
.TP
This option is experimental,
and may change or be removed in a future release.
.TP
+.B rtp_max_payload \fBYTES\fR
+Don't send RTP packets with a UDP payload larger than
+.I BYTES
+(including the 12-byte RTP header). If you know that you will be transmitting
+RTP over networks with an unusually low MTU size, then it is probably useful to
+set this option.
+.IP
+This option is experimental,
+and may change or be removed in a future release.
+.TP
.B rtp_minbuffer \fIFRAMES\fR
Set
.BR disorder-playrtp (1)'s
.B rtp_minbuffer \fIFRAMES\fR
Set
.BR disorder-playrtp (1)'s
{ C(replay_min), &type_integer, validate_non_negative },
{ C(rtp_always_request), &type_boolean, validate_any },
{ C(rtp_delay_threshold), &type_integer, validate_positive },
{ C(replay_min), &type_integer, validate_non_negative },
{ C(rtp_always_request), &type_boolean, validate_any },
{ C(rtp_delay_threshold), &type_integer, validate_positive },
+ { C(rtp_max_payload), &type_integer, validate_positive },
{ C(rtp_maxbuffer), &type_integer, validate_non_negative },
{ C(rtp_minbuffer), &type_integer, validate_non_negative },
{ C(rtp_mode), &type_string, validate_any },
{ C(rtp_maxbuffer), &type_integer, validate_non_negative },
{ C(rtp_minbuffer), &type_integer, validate_non_negative },
{ C(rtp_mode), &type_string, validate_any },
c->listen.af = -1;
c->connect.af = -1;
c->rtp_mode = xstrdup("auto");
c->listen.af = -1;
c->connect.af = -1;
c->rtp_mode = xstrdup("auto");
+ c->rtp_max_payload = -1;
/** @brief Whether to loop back multicast packets */
int multicast_loop;
/** @brief Whether to loop back multicast packets */
int multicast_loop;
+ /** @brief Maximum size of RTP payload to send
+ *
+ * This is the maximum number of bytes we pass to write(2); to determine
+ * actual packet sizes, add a UDP header and an IP header (and a link layer
+ * header if it's the link layer size you care about).
+ *
+ * Don't make this too big or arithmetic will start to overflow.
+ */
+ long rtp_max_payload;
+
/** @brief Login lifetime in seconds */
long cookie_login_lifetime;
/** @brief Login lifetime in seconds */
long cookie_login_lifetime;
#include "timeval.h"
#include "configuration.h"
#include "timeval.h"
#include "configuration.h"
-/** @brief Bytes to send per network packet
- *
- * This is the maximum number of bytes we pass to write(2); to determine actual
- * packet sizes, add a UDP header and an IP header (and a link layer header if
- * it's the link layer size you care about).
- *
- * Don't make this too big or arithmetic will start to overflow.
- */
-#define NETWORK_BYTES (1500-8/*UDP*/-40/*IP*/-8/*conservatism*/)
+/** @brief Bytes to send per network packet */
+static int rtp_max_payload;
/** @brief RTP payload type */
static int rtp_payload;
/** @brief RTP payload type */
static int rtp_payload;
"multicast-ttl",
"multicast-loop",
"rtp-mode",
"multicast-ttl",
"multicast-loop",
"rtp-mode",
rtp_mode = RTP_UNICAST;
}
}
rtp_mode = RTP_UNICAST;
}
}
+ rtp_max_payload = atoi(uaudio_get("rtp-max-payload", "-1"));
+ if(rtp_max_payload < 0)
+ rtp_max_payload = 1500 - 8/*UDP*/ - 40/*IP*/ - 8/*conservatism*/;
/* Create the sockets */
if(rtp_mode != RTP_REQUEST) {
if((rtp_fd = socket(dres->ai_family,
/* Create the sockets */
if(rtp_mode != RTP_REQUEST) {
if((rtp_fd = socket(dres->ai_family,
userdata,
rtp_play,
256 / uaudio_sample_size,
userdata,
rtp_play,
256 / uaudio_sample_size,
- (NETWORK_BYTES - sizeof(struct rtp_header))
+ (rtp_max_payload - sizeof(struct rtp_header))
/ uaudio_sample_size,
0);
if(config->rtp_verbose)
/ uaudio_sample_size,
0);
if(config->rtp_verbose)
snprintf(buffer, sizeof buffer, "%ld", config->multicast_ttl);
uaudio_set("multicast-ttl", buffer);
uaudio_set("multicast-loop", config->multicast_loop ? "yes" : "no");
snprintf(buffer, sizeof buffer, "%ld", config->multicast_ttl);
uaudio_set("multicast-ttl", buffer);
uaudio_set("multicast-loop", config->multicast_loop ? "yes" : "no");
+ snprintf(buffer, sizeof buffer, "%ld", config->rtp_max_payload);
+ uaudio_set("rtp-max-payload", buffer);
if(config->rtp_verbose)
disorder_info("RTP: configured");
}
if(config->rtp_verbose)
disorder_info("RTP: configured");
}