4949 // BITRATE_DECR_MIN + cur_bitrate/BITRATE_DECR_SCALE
5050
5151// settings ranges
52+ #define TS_PKT_SIZE 188
53+ #define REDUCED_SRT_PKT_SIZE ((TS_PKT_SIZE)*6)
54+ #define DEFAULT_SRT_PKT_SIZE ((TS_PKT_SIZE)*7)
5255#define MAX_AV_DELAY 10000
5356#define MIN_SRT_LATENCY 100
5457#define MAX_SRT_LATENCY 10000
@@ -82,6 +85,7 @@ int cur_bitrate = MIN_BITRATE;
8285char * bitrate_filename = NULL ;
8386
8487int srt_latency = DEF_SRT_LATENCY ;
88+ int srt_pkt_size = DEFAULT_SRT_PKT_SIZE ;
8589
8690uint64_t getms () {
8791 struct timespec time = {0 , 0 };
@@ -173,8 +177,7 @@ int read_bitrate_file() {
173177 return -2 ;
174178}
175179
176- #define SRT_PKT_SIZE 1316
177- #define RTT_TO_BS (rtt ) ((throughput / 8) * (rtt) / SRT_PKT_SIZE)
180+ #define RTT_TO_BS (rtt ) ((throughput / 8) * (rtt) / srt_pkt_size)
178181void update_bitrate (SRT_TRACEBSTATS * stats , uint64_t ctime ) {
179182 /*
180183 * Send buffer size stats
@@ -326,7 +329,7 @@ gboolean connection_housekeeping() {
326329}
327330
328331GstFlowReturn new_buf_cb (GstAppSink * sink , gpointer user_data ) {
329- static char pkt [SRT_PKT_SIZE ];
332+ static char pkt [DEFAULT_SRT_PKT_SIZE ];
330333 static int pkt_len = 0 ;
331334 GstFlowReturn code = GST_FLOW_OK ;
332335
@@ -339,16 +342,16 @@ GstFlowReturn new_buf_cb(GstAppSink *sink, gpointer user_data) {
339342 buffer = gst_sample_get_buffer (sample );
340343 gst_buffer_map (buffer , & map , GST_MAP_READ );
341344
342- // We send SRT_PKT_SIZE size packets, splitting and merging samples if needed
345+ // We send srt_pkt_size size packets, splitting and merging samples if needed
343346 int sample_sz = map .size ;
344347 do {
345- int copy_sz = min (SRT_PKT_SIZE - pkt_len , sample_sz );
348+ int copy_sz = min (srt_pkt_size - pkt_len , sample_sz );
346349 memcpy ((void * )pkt + pkt_len , map .data , copy_sz );
347350 pkt_len += copy_sz ;
348351
349- if (pkt_len == SRT_PKT_SIZE ) {
350- int nb = srt_send (sock , pkt , SRT_PKT_SIZE );
351- if (nb != SRT_PKT_SIZE ) {
352+ if (pkt_len == srt_pkt_size ) {
353+ int nb = srt_send (sock , pkt , srt_pkt_size );
354+ if (nb != srt_pkt_size ) {
352355 if (!quit ) {
353356 fprintf (stderr , "The SRT connection failed, exiting\n" );
354357 stop ();
@@ -453,6 +456,7 @@ void exit_syntax() {
453456 fprintf (stderr , " -d <delay> Audio-video delay in milliseconds\n" );
454457 fprintf (stderr , " -s <streamid> SRT stream ID\n" );
455458 fprintf (stderr , " -l <latency> SRT latency in milliseconds\n" );
459+ fprintf (stderr , " -r Reduced SRT packet size\n" );
456460 fprintf (stderr , " -b <bitrate file> Bitrate settings file, see below\n\n" );
457461 fprintf (stderr , "Bitrate settings file syntax:\n" );
458462 fprintf (stderr , "MIN BITRATE (bps)\n" );
@@ -575,7 +579,7 @@ int main(int argc, char** argv) {
575579 char * stream_id = NULL ;
576580 srt_latency = DEF_SRT_LATENCY ;
577581
578- while ((opt = getopt (argc , argv , "d:b:s:l:v " )) != -1 ) {
582+ while ((opt = getopt (argc , argv , "d:b:s:l:rv " )) != -1 ) {
579583 switch (opt ) {
580584 case 'b' :
581585 bitrate_filename = optarg ;
@@ -598,6 +602,9 @@ int main(int argc, char** argv) {
598602 exit_syntax ();
599603 }
600604 break ;
605+ case 'r' :
606+ srt_pkt_size = REDUCED_SRT_PKT_SIZE ;
607+ break ;
601608 case 'v' :
602609 printf (VERSION "\n" );
603610 exit (EXIT_SUCCESS );
0 commit comments