#define RTP_PACKETS 128
#define RTP_PAYLOAD (7*188+12)
-#define RTP_TCP_PAYLOAD (87*188+12+4) /* cca 16kB */
+#define RTP_TCP_MIN_PAYLOAD (7*188+12+4) /* fit ethernet packet */
+#define RTP_TCP_MAX_PAYLOAD (348*188+12+4) /* cca 64kB */
#define RTCP_PAYLOAD (1420)
#define RTP_TCP_BUFFER_SIZE (64*1024*1024)
satip_rtp_session_t *rtp = calloc(1, sizeof(*rtp));
size_t len;
socklen_t socklen;
- int dscp;
+ int dscp, payload;
if (rtp == NULL)
return NULL;
rtp->subs = subs;
rtp->sq = sq;
rtp->hc = hc;
- rtp->tcp_payload = RTP_TCP_PAYLOAD;
+ payload = satip_server_conf.satip_rtptcpsize * 188 + 12 + 4;
+ rtp->tcp_payload = MINMAX(payload, RTP_TCP_MIN_PAYLOAD, RTP_TCP_MAX_PAYLOAD);
rtp->tcp_buffer_size = 16*1024*1024;
rtp->no_data_cb = no_data_cb;
rtp->no_data_opaque = no_data_opaque;
return strtab2htsmsg(tab, 1, lang);
}
+static htsmsg_t *satip_server_class_rtptcpsize_list ( void *o, const char *lang )
+{
+ static const struct strtab tab[] = {
+ { N_("1316 bytes"), 1316/188 },
+ { N_("2632 bytes"), 2632/188 },
+ { N_("5264 bytes"), 5264/188 },
+ { N_("7896 bytes"), 7896/188 },
+ { N_("16356 bytes"), 16356/188 },
+ { N_("32712 bytes"), 32712/188 },
+ { N_("65424 bytes"), 65424/188 },
+ };
+ return strtab2htsmsg(tab, 1, lang);
+}
+
CLASS_DOC(satip_server)
PROP_DOC(satip_muxhandling)
.opts = PO_EXPERT | PO_DOC_NLIST,
.group = 1,
},
+ {
+ .type = PT_INT,
+ .id = "satip_rtptcpsize",
+ .name = N_("RTP over TCP payload"),
+ .desc = N_("Select the payload size for RTP contents used "
+ "in the TCP embedded data mode. Some implementations "
+ "like ffmpeg and VideoLAN have maximum limit 7896 "
+ "bytes. The recommended value for tvheadend is "
+ "16356 or 32712 bytes."),
+ .off = offsetof(struct satip_server_conf, satip_rtptcpsize),
+ .list = satip_server_class_rtptcpsize_list,
+ .group = 1,
+ },
{
.type = PT_STR,
.id = "satip_nat_ip",
http_server_ip = NULL;
satip_server_bootid = time(NULL);
satip_server_conf.satip_deviceid = 1;
+ satip_server_conf.satip_rtptcpsize = 7896/188;
satip_server_bindaddr = bindaddr ? strdup(bindaddr) : NULL;
satip_server_rtsp_port_locked = rtsp_port > 0;