From patchwork Tue Aug 28 21:27:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 10165 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp8104173jap; Tue, 28 Aug 2018 14:27:24 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaYlW4vpi2VUuch2UYguVWM+kj2QVYLlbAHrgF9GLXfl4Eyrz7oaCmGc3LoRxx7ml+m6QMn X-Received: by 2002:adf:f7c4:: with SMTP id a4-v6mr2445275wrq.86.1535491644787; Tue, 28 Aug 2018 14:27:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535491644; cv=none; d=google.com; s=arc-20160816; b=X4A0do39qm30kLjuzdmX8X/Og26KKTYXtRa2Fm7TgUcEHV0QIlD71v2dyJa/oThFef CN08M/LwKKNWVo5COk02kI2Ha4iiKmgL3vabF5+YmuzzHAg5A1bf7nBdQ5eo4RB6Gj+j T/Xb6gawHfcnoSSFPjKwsrzLIkRl8lfHo1CyTjGCNu5wz4Fk6GiKSAKYIeekSR3WjmNS sCzgClIz1J2sAS15vCXsjTeKt340dr/BC84gD32eFLEsrPRaE6Blqj7JwsXhArTfXGg1 oZk4hxDeTFU0BwXCcyYP9i01sMlHdPxLanN7JTHycx1dWqFf8HG669EU2zxKhw3cvU31 sAfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:message-id:in-reply-to:to:from :date:delivered-to:arc-authentication-results; bh=ks1pt/7I98/ux+Wpi59wAxJOVkViIJDUX8BLv8MLf9U=; b=GUnr+DiAZvRPn6IjtYdh3SSDMn8/mkpOEoYYGZRDcWZ+09erCAxEbCcKPiF8ztgiEL XD8jQ5GEvw0KcLJk8ccEIexL8oDcEqT43jT05njVlQ8iU4CUfp3Dd3T1lPnrjlhQ8a/X Z5L8rf5me65AOYcn5ID7tffsa1nB+Efb8QK8gY/hVh5I8i4y+RcwOdae47sKb3ua73pz bZ/lJmKmUfXJg3H//ODC8VrXhMYcSLfLyfAwo7AhaQjLePBBqaBQocZzK3ARtbHyHZ9K /KSi+DXo29EnakiXiviFbXrcvOng/TX1D4EktegxQpSHv7vm4RGST144WAFK/oWQJuZH WWwA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b6-v6si1640286wrm.186.2018.08.28.14.27.24; Tue, 28 Aug 2018 14:27:24 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 372F7689E7A; Wed, 29 Aug 2018 00:27:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8B4E568049B for ; Wed, 29 Aug 2018 00:27:12 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 76F1DE12C1 for ; Tue, 28 Aug 2018 23:27:16 +0200 (CEST) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uAj9KIaCVTRe for ; Tue, 28 Aug 2018 23:27:15 +0200 (CEST) Received: from iq (iq [217.27.212.140]) by iq.passwd.hu (Postfix) with ESMTPS id 07269E117C for ; Tue, 28 Aug 2018 23:27:15 +0200 (CEST) Date: Tue, 28 Aug 2018 23:27:14 +0200 (CEST) From: Marton Balint X-X-Sender: cus@iq To: FFmpeg development discussions and patches In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (LSU 67 2015-01-07) MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] make work (live) libsrt X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" On Sat, 25 Aug 2018, Tudor Suciu wrote: > Hello Marton, > > The new version takes into account your remarks, modifications. I checked the srt API, and we are doing this all wrong. The SRTO_PAYLOADSIZE socket parameter defines the maximum allowed packet size. So we should query this parameter, and set UrlContext->max_packet_size accordingly. And should simply set SRTO_PACKETSIZE to our pkt_size parameter if we don't want the libsrt default 1356. I have attached a new patch. Let me know what you think. Thanks, Marton From eac0d702fd91de1f62bb9c001ce83ce5f178993e Mon Sep 17 00:00:00 2001 From: Tudor Suciu Date: Sat, 25 Aug 2018 14:06:57 +0200 Subject: [PATCH] avformat/libsrt: add pkt_size parameter to libsrt Also make sure we set the URL context max packet size accordingly. Signed-off-by: Marton Balint --- configure | 2 +- doc/protocols.texi | 6 ++++++ libavformat/libsrt.c | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 3cf9412947..27a594f246 100755 --- a/configure +++ b/configure @@ -6112,7 +6112,7 @@ enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnap enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init -enabled libsrt && require_pkg_config libsrt "srt >= 1.2.0" srt/srt.h srt_socket +enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg diff --git a/doc/protocols.texi b/doc/protocols.texi index e9091e068c..4c5e972a04 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -1263,6 +1263,12 @@ Not required on receiver (set to 0), key size obtained from sender in HaiCrypt handshake. Default value is 0. +@item pkt_size=@var{bytes} +Set maximum SRT payload size, expressed in bytes. Default is -1 (automatic), +which typically means 1316 as that is the libsrt default for live mode. Libsrt +can also support payload sizes up to 1456 bytes. (MTU(1500) - UDP.hdr(28) - +SRT.hdr(16)) + @item recv_buffer_size=@var{bytes} Set receive buffer size, expressed in bytes. diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index 0f9529d263..9260c1bf37 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -48,6 +48,7 @@ typedef struct SRTContext { int64_t listen_timeout; int recv_buffer_size; int send_buffer_size; + int pkt_size; int64_t maxbw; int pbkeylen; @@ -73,6 +74,7 @@ static const AVOption libsrt_options[] = { { "listen_timeout", "Connection awaiting timeout", OFFSET(listen_timeout), AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX, .flags = D|E }, { "send_buffer_size", "Socket send buffer size (in bytes)", OFFSET(send_buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E }, { "recv_buffer_size", "Socket receive buffer size (in bytes)", OFFSET(recv_buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E }, + { "pkt_size", "Maximum SRT packet size", OFFSET(pkt_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E }, { "maxbw", "Maximum bandwidth (bytes per second) that the connection can use", OFFSET(maxbw), AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX, .flags = D|E }, { "pbkeylen", "Crypto key len in bytes {16,24,32} Default: 16 (128-bit)", OFFSET(pbkeylen), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 32, .flags = D|E }, { "passphrase", "Crypto PBKDF2 Passphrase size[0,10..64] 0:disable crypto", OFFSET(passphrase), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E }, @@ -240,6 +242,15 @@ static int libsrt_setsockopt(URLContext *h, int fd, SRT_SOCKOPT optname, const c return 0; } +static int libsrt_getsockopt(URLContext *h, int fd, SRT_SOCKOPT optname, const char * optnamestr, void * optval, int * optlen) +{ + if (srt_getsockopt(fd, 0, optname, optval, optlen) < 0) { + av_log(h, AV_LOG_ERROR, "failed to get option %s on socket: %s\n", optnamestr, srt_getlasterror_str()); + return AVERROR(EIO); + } + return 0; +} + /* - The "POST" options can be altered any time on a connected socket. They MAY have also some meaning when set prior to connecting; such option is SRTO_RCVSYN, which makes connect/accept call asynchronous. @@ -276,6 +287,7 @@ static int libsrt_set_options_pre(URLContext *h, int fd) (tsbpddelay >= 0 && libsrt_setsockopt(h, fd, SRTO_TSBPDDELAY, "SRTO_TSBPDELAY", &tsbpddelay, sizeof(tsbpddelay)) < 0) || (s->tlpktdrop >= 0 && libsrt_setsockopt(h, fd, SRTO_TLPKTDROP, "SRTO_TLPKDROP", &s->tlpktdrop, sizeof(s->tlpktdrop)) < 0) || (s->nakreport >= 0 && libsrt_setsockopt(h, fd, SRTO_NAKREPORT, "SRTO_NAKREPORT", &s->nakreport, sizeof(s->nakreport)) < 0) || + (s->pkt_size >= 0 && libsrt_setsockopt(h, fd, SRTO_PAYLOADSIZE, "SRTO_PAYLOADSIZE", &s->pkt_size, sizeof(s->pkt_size)) < 0) || (connect_timeout >= 0 && libsrt_setsockopt(h, fd, SRTO_CONNTIMEO, "SRTO_CONNTIMEO", &connect_timeout, sizeof(connect_timeout)) <0 )) { return AVERROR(EIO); } @@ -384,6 +396,17 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) s->fd = fd; freeaddrinfo(ai); + + if (flags & AVIO_FLAG_WRITE) { + int packet_size = 0; + int optlen = sizeof(packet_size); + ret = libsrt_getsockopt(h, fd, SRTO_PAYLOADSIZE, "SRTO_PAYLOADSIZE", &packet_size, &optlen); + if (ret < 0) + goto fail; + if (packet_size > 0) + h->max_packet_size = packet_size; + } + return 0; fail: @@ -442,6 +465,9 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) if (av_find_info_tag(buf, sizeof(buf), "oheadbw", p)) { s->oheadbw = strtoll(buf, NULL, 10); } + if (av_find_info_tag(buf, sizeof(buf), "pkt_size", p)) { + s->pkt_size = strtol(buf, NULL, 10); + } if (av_find_info_tag(buf, sizeof(buf), "tsbpddelay", p)) { s->tsbpddelay = strtol(buf, NULL, 10); } -- 2.16.4