From: Jack Lau via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> To: ffmpeg-devel@ffmpeg.org Cc: Jack Lau <code@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH] avformat/whip: remind user increase -buffer_size (PR #20579) Date: Mon, 22 Sep 2025 23:23:59 -0000 Message-ID: <175858344032.25.3513122687321718744@463a07221176> (raw) PR #20579 opened by Jack Lau (JackLau) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20579 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20579.patch The udp buffer size might be too small to easily be full temporarily and return WSAEWOULDBLOCK. The udp code will handle the windows error code and convert it to AVERROR(EAGAIN). This issue just can be reproduced on windows. If sleep a interval and retry to send pkt when hit EAGAIN, it will increase latency, and appropriate interval is hard to define. So this patch just remind user increase the buffer size via -buffer_size to avoid this issue. Signed-off-by: Jack Lau <jacklau1222@qq.com> >From 07c0ee59f237e7f47e12224d1948c7f688a36ed7 Mon Sep 17 00:00:00 2001 From: Jack Lau <jacklau1222@qq.com> Date: Wed, 17 Sep 2025 10:25:41 +0800 Subject: [PATCH 1/3] avformat/whip: pass through buffer_size option to udp Signed-off-by: Jack Lau <jacklau1222@qq.com> --- doc/muxers.texi | 3 +++ libavformat/whip.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index 8c45b7d47a..f4caa4d7cb 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -3955,6 +3955,9 @@ Default value is 5000. Set the maximum size, in bytes, of RTP packets that send out. Default value is 1500. +@item buffer_size @var{integer} +Set the buffer size, in bytes, of underlying protocol. + @item authorization @var{string} The optional Bearer token for WHIP Authorization. diff --git a/libavformat/whip.c b/libavformat/whip.c index cfdc861c5b..e4386016a9 100644 --- a/libavformat/whip.c +++ b/libavformat/whip.c @@ -306,6 +306,7 @@ typedef struct WHIPContext { * Note that pion requires a smaller value, for example, 1200. */ int pkt_size; + int buffer_size;/* Underlying protocol send/receive buffer size */ /** * The optional Bearer token for WHIP Authorization. * See https://www.ietf.org/archive/id/draft-ietf-wish-whip-08.html#name-authentication-and-authoriz @@ -1191,8 +1192,9 @@ static int udp_connect(AVFormatContext *s) av_dict_set_int(&opts, "connect", 1, 0); av_dict_set_int(&opts, "fifo_size", 0, 0); - /* Set the max packet size to the buffer size. */ + /* Pass through the pkt_size and buffer_size to underling protocol */ av_dict_set_int(&opts, "pkt_size", whip->pkt_size, 0); + av_dict_set_int(&opts, "buffer_size", whip->buffer_size, 0); ret = ffurl_open_whitelist(&whip->udp, url, AVIO_FLAG_WRITE, &s->interrupt_callback, &opts, s->protocol_whitelist, s->protocol_blacklist, NULL); @@ -1954,6 +1956,7 @@ static int whip_check_bitstream(AVFormatContext *s, AVStream *st, const AVPacket static const AVOption options[] = { { "handshake_timeout", "Timeout in milliseconds for ICE and DTLS handshake.", OFFSET(handshake_timeout), AV_OPT_TYPE_INT, { .i64 = 5000 }, -1, INT_MAX, ENC }, { "pkt_size", "The maximum size, in bytes, of RTP packets that send out", OFFSET(pkt_size), AV_OPT_TYPE_INT, { .i64 = 1200 }, -1, INT_MAX, ENC }, + { "buffer_size", "The buffer size, in bytes, of underlying protocol", OFFSET(buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, ENC }, { "authorization", "The optional Bearer token for WHIP Authorization", OFFSET(authorization), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, ENC }, { "cert_file", "The optional certificate file path for DTLS", OFFSET(cert_file), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, ENC }, { "key_file", "The optional private key file path for DTLS", OFFSET(key_file), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, ENC }, -- 2.49.1 >From 4915fd78ba45f871ec750226b21ae2e5d0a1636e Mon Sep 17 00:00:00 2001 From: Jack Lau <jacklau1222@qq.com> Date: Wed, 17 Sep 2025 10:50:18 +0800 Subject: [PATCH 2/3] avformat/whip: remind user increase -buffer_size The udp buffer size might be too small to easily be full temporarily and return WSAEWOULDBLOCK. The udp code will handle the windows error code and convert it to AVERROR(EAGAIN). This issue just can be reproduced on windows. If sleep a interval and retry to send pkt when hit EAGAIN, it will increase latency, and appropriate interval is hard to define. So this patch just remind user increase the buffer size via -buffer_size to avoid this issue. Signed-off-by: Jack Lau <jacklau1222@qq.com> --- libavformat/whip.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavformat/whip.c b/libavformat/whip.c index e4386016a9..887df5ad41 100644 --- a/libavformat/whip.c +++ b/libavformat/whip.c @@ -1877,8 +1877,10 @@ write_packet: if (ret == AVERROR(EINVAL)) { av_log(whip, AV_LOG_WARNING, "Ignore failed to write packet=%dB, ret=%d\n", pkt->size, ret); ret = 0; + } else if (ret == AVERROR(EAGAIN)) { + av_log(whip, AV_LOG_ERROR, "UDP send blocked, please increase the buffer via -buffer_size\n"); } else - av_log(whip, AV_LOG_ERROR, "Failed to write packet, size=%d\n", pkt->size); + av_log(whip, AV_LOG_ERROR, "Failed to write packet, size=%d, ret=%d\n", pkt->size, ret); goto end; } -- 2.49.1 >From a9690e6522287faa5a9697d506eec06703507ad4 Mon Sep 17 00:00:00 2001 From: Jack Lau <jacklau1222@qq.com> Date: Mon, 22 Sep 2025 16:48:12 +0800 Subject: [PATCH 3/3] doc/muxers: correct default pkt_size value of whip Signed-off-by: Jack Lau <jacklau1222@qq.com> --- doc/muxers.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index f4caa4d7cb..6ad7dad554 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -3953,7 +3953,7 @@ Default value is 5000. @item pkt_size @var{integer} Set the maximum size, in bytes, of RTP packets that send out. -Default value is 1500. +Default value is 1200. @item buffer_size @var{integer} Set the buffer size, in bytes, of underlying protocol. -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org
reply other threads:[~2025-09-22 23:24 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=175858344032.25.3513122687321718744@463a07221176 \ --to=ffmpeg-devel@ffmpeg.org \ --cc=code@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror http://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ http://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git