From patchwork Wed Jul 14 09:07:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 28922 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp213790ios; Wed, 14 Jul 2021 02:08:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwYOeAj8UWk7a5nyzb276BIllianXQ15AfhigkaF310Lcc3vd4nhfIBHePnqsGhRKe2AQhj X-Received: by 2002:a17:906:2b54:: with SMTP id b20mr11404576ejg.17.1626253699199; Wed, 14 Jul 2021 02:08:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626253699; cv=none; d=google.com; s=arc-20160816; b=eQTURYEFGg40YN0l/mfQclLzpz0aVyrnC8UnSRtNjHvp0XM8jEDpJauk82gGL6QB+h NzDQLUIiPXwKox945PptWDJacSVJavb4oqZX2O/irw2T9OwxpteQ4KKXmhaCsdBgA50j nvgn+qbS1vnrpTn9sRLhtgHLa6odwiojKG1e9Dsb7G6Dh6U31L6gLxktar5bsDWNQStJ RmW0oQVw3CeSQQN03N1k7Kxp3B5ZhDVFV2aatQ4AnxsTFP8/pmcwJkX2sYDd90Fu1unH LRnUVhf+4AhSiS50KGoD4oc8kQkUAwHtaswNVZcf7h5lWDz5z2b69aTAbz2U0r1IL2ux +AUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=TqjimS59FF+IqYtYjZ4eVyIgFlWUoqwa9/OOOagzapg=; b=WbDX3JgIBVs+JmsdYTsfZ/LDWinn2PPAYQhNIr3j5/RC1OCYoZLbm/Mrtrne8FfmnY RPEi8lxgQrmiA2/Y9iM/un9PgsTTnIz01ZG6jV8Xu6v4iupsGrIn5kel6Z9SlbBg0HNO XjQEqbEbbT3O89F1CVSy9sAf8DzxA8z5+qnl0afHEqLTvYmnqHN+ZHH6ANyrnnxpn+6C gAMKfLw2fgLhjSODPjT3q4G01TfyAXtuUhNYXXzoH7vSR9CduJCeZMYEDIuRWwHenmux o8QN6Tvb+mTRATZteTItprmGKCZ3Y+7Y1SEmR47pZy+AKBSxMX/PCo1vo4ByGy1VEo/R ckrA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=oBu7WDfq; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f22si2106758ejj.660.2021.07.14.02.08.18; Wed, 14 Jul 2021 02:08:19 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=oBu7WDfq; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 72C9568A21C; Wed, 14 Jul 2021 12:08:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76D7B68A21C for ; Wed, 14 Jul 2021 12:08:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1626253683; bh=qJoaW2D1GPArWEsQgcerTcri/jDLGos2KTSPyIn4/lw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=oBu7WDfqLOk5BPJSwG8UIHUylCIlVa6nAL/sRjlcmAoq88adAXAxPZfCmRs/FjBnN 9Drt/Vnjf/mr+1ruXL33yTPLEX1ZPqF277fl8cWva3ty0oa0rvE3R1FMvLWhmO8SiT avZpTHaLaD8MR4GXIdseK0GUMVSA7YPOBHlELWgI= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.66]) by newxmesmtplogicsvrsza28.qq.com (NewEsmtp) with SMTP id 1EB190A5; Wed, 14 Jul 2021 17:07:43 +0800 X-QQ-mid: xmsmtpt1626253663tka2hld25 Message-ID: X-QQ-XMAILINFO: ND42uzdxTIzrHsMGl0W3BENGhIpa4g4G76Pxdp9Xm7WglgcFxNCvzFvGm5V7sP uHKR1LQqVlM3dHzsG9wffxRk48Ph7wECxCelrHJr/VYpnfOeX91uqVJ2qZUtPade1xZGo5ExHAjE VYt6nnm+RfDR/yIVggShZeroSzAK1inl1ZGZUPbxZTD4DszpUzuPJ4D6Nasdm3vMwKOLPNSo4kzl 3nynoUJxlBMh04XAZqQX4Q19kjXw345ofzlGtwfYYCucQm8DP03gLeR2a3G962+34+SN7wWny3m9 Vme8i0b1Z+P6Mtf0FbSM5xvQsUMR9bUZbSuB36d2KHZwrOgPl4T9Rh9r2C4Udz1EgOsj5mIVO3TJ tLkf/hU9rnTvj6Xeg6H/4lAWxwwT4QzvOH3Sh7BJ1V0Dma5/Swve3NdrVXQVctrmWC9eXO9jCXYe eTWMiXie1vPC5ahn7BgbrMxnUnqFv+TrzzP8K8X6mDkZrAMbeiPXihFyVzHIfxGFL1zHT5EYABqA zcZdMUFqRqvMNgieF7F2WCr9vMPSmtc3OTsM3Q9ck+6yqpX5h/CRkgHjZwxw1Aq1ndDZBQ0m1hY+ X33mgnZdsNVmY2e/O6FGp+cHaHPBU68KuDOEyszmHIWGbbwU2LoGGve0lmWYicXNlC9lG1xwBHp9 s+cWuE0rr+/CzBcbo0jYvOh8eoRUL8LsFiCrmi1qJp9++fnJXiBNHEnggXak6SKHSSU46Ry5Ocuq RA4LLZnnf1w5HoAwENORj/VdOWF2pKQyUGYXGtjYWPKG9bpDuvodk5NoHvykbqAJXUYMMUj6p/FQ 9R751qLoNP4Jl5I/ZQb7xsqrNZma6z5AeMAOV01FxL1MYNXBHyyPHr/8SqbAoU7Nm2cldWUU9PTQ == From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 Jul 2021 17:07:40 +0800 X-OQ-MSGID: <20210714090740.28105-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat/libsrt: add mininputbw option X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wBlEhH5+5G/o --- v2: add doc It's useful when tlpktdrop=0&maxbw=0 and network bandwidth is smaller than input stream rate. Without this option, the estimated input rate can drop to near zero. https://github.com/Haivision/srt/issues/2057 doc/protocols.texi | 4 ++++ libavformat/libsrt.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/doc/protocols.texi b/doc/protocols.texi index 726e5f1c44..f431c15fe4 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -1414,6 +1414,10 @@ if @option{inputbw} is not set while @option{maxbw} is set to relative (0), the actual input rate is evaluated inside the library. Default value is 0. +@item mininputbw=@var{bytes/seconds} +This option is effective only if both @option{maxbw} and @option{inputbw} +are set to 0. It's the minimum value of the estimated input stream rate. + @item iptos=@var{tos} IP Type of Service. Applies to sender only. Default value is 0xB8. diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index 8dee6aa3f3..5113858d97 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -72,6 +72,9 @@ typedef struct SRTContext { int ipttl; int iptos; int64_t inputbw; +#if SRT_VERSION_VALUE >= 0x010403 + int64_t mininputbw; +#endif int oheadbw; int64_t latency; int tlpktdrop; @@ -118,6 +121,9 @@ static const AVOption libsrt_options[] = { { "ipttl", "IP Time To Live", OFFSET(ipttl), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, .flags = D|E }, { "iptos", "IP Type of Service", OFFSET(iptos), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, .flags = D|E }, { "inputbw", "Estimated input stream rate", OFFSET(inputbw), AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX, .flags = D|E }, +#if SRT_VERSION_VALUE >= 0x010403 + { "mininputbw", "Minimum value of the estimated input stream rate", OFFSET(mininputbw), AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX, .flags = D|E }, +#endif { "oheadbw", "MaxBW ceiling based on % over input stream rate", OFFSET(oheadbw), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 100, .flags = D|E }, { "latency", "receiver delay (in microseconds) to absorb bursts of missed packet retransmissions", OFFSET(latency), AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX, .flags = D|E }, { "tsbpddelay", "deprecated, same effect as latency option", OFFSET(latency), AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX, .flags = D|E }, @@ -297,6 +303,9 @@ static int libsrt_set_options_post(URLContext *h, int fd) SRTContext *s = h->priv_data; if ((s->inputbw >= 0 && libsrt_setsockopt(h, fd, SRTO_INPUTBW, "SRTO_INPUTBW", &s->inputbw, sizeof(s->inputbw)) < 0) || +#if SRT_VERSION_VALUE >= 0x010403 + (s->mininputbw >= 0 && libsrt_setsockopt(h, fd, SRTO_MININPUTBW, "SRTO_MININPUTBW", &s->mininputbw, sizeof(s->mininputbw)) < 0) || +#endif (s->oheadbw >= 0 && libsrt_setsockopt(h, fd, SRTO_OHEADBW, "SRTO_OHEADBW", &s->oheadbw, sizeof(s->oheadbw)) < 0)) { return AVERROR(EIO); } @@ -560,6 +569,13 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) if (av_find_info_tag(buf, sizeof(buf), "inputbw", p)) { s->inputbw = strtoll(buf, NULL, 10); } + if (av_find_info_tag(buf, sizeof(buf), "mininputbw", p)) { +#if SRT_VERSION_VALUE >= 0x010403 + s->mininputbw = strtoll(buf, NULL, 10); +#else + av_log(h, AV_LOG_WARNING, "mininputbw unsupported for libsrt version %s\n", SRT_VERSION_STRING); +#endif + } if (av_find_info_tag(buf, sizeof(buf), "oheadbw", p)) { s->oheadbw = strtoll(buf, NULL, 10); }