From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 0D1F54C334 for ; Thu, 8 Jan 2026 20:58:16 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'ULawlB141EFGvef9nSx+rVtCZ6QEWpD52yh1M0f/qfs=', expected b'Mo9KSICiICIIMW8u6F00/EBIXu0kUTn9HZHtBQ2gNuM=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1767905886; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=ULawlB141EFGvef9nSx+rVtCZ6QEWpD52yh1M0f/qfs=; b=1jEN6h4MnEibeh8uSF+T8NbKwPKVTsBWhPMl8O6CAeZWK44g8oN88AlsFJ8XcxEvifwUE 5IXreOUJ3B9YD1LxU8ETPQadz5XhcQhx2Klap+Ouh8pG29jOVVmfAFufzq7nfbRMZojKTUo 64Ff/ZkKP84Z2HiMzQ2F8MQtrf3vOQZqaF3F6t46xLP5X22Si3pMRm8rLwFwWNbpcyeWjRJ IJh2ZwjA2hAZ1tXsgYPkSrgtueK6s1mMVNmDX224W8+U3Xjt6rrZ30tvlVm5zWamYr21aSR ZxP5yA8tHCBp3iSgEIHJWywpbl+rms5dXggx4E5U29cs0+6JLZ2VF1qVnQkA== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 4F72A690D7A; Thu, 8 Jan 2026 22:58:06 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1767905870; b=eoHGYTxFA12EL9kS/D7RpZ4kFd03SSbIrHZ45UbzAqIcl7s9+OYbFTIbcbZ859QS/EDiU BbpE96lO8GFqAjR8CBxz+SXQ5/Ovqqkj1KSqr8gFPJyXo5ce47E+qzifJ1pUYw73fR4gQlL EZgeLvRE/oA3fjLdUu/Q3rDHsJ9mYCofgpSR+M24OF5ScHK/ioup3s/uz6HbAJqhUauO680 Jg7pKr4uFzU9jwi6ob0hutBeB4fc+lbFo1RGtK6gSsAfNBIc77zi5M4qgGzS5QY+EdFhJUJ /ub289HOfvL+hn5i78A9K/DJEaIBjRsvCbz23dnwZ4eIqGArZdZgtS3qAVLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1767905870; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=D+ALpzuzWOI89WCo4fw/Daym7OpxLur629855XT5Bvc=; b=n+EagrlZJiMG32TQN7/vKSjIlrKeH3ms5HWUt2OM+SD4UdJH3C0OQ5NIAKx9nL+BK06GE vwFzOTL0jbi1RSIDm9Is32xpTiztCsWnuOZa3dCTCX0WzXMb7WR7iJzv7GOcLRleVR9tNJY ZA8ySFuUYaDK5PsNacok7Lxzt3mo7jVd4Yms0hBoPx2W586HNEq+D+RfcKg3c2VA51BGwtM d/gX2NsEG4lRF74m3CzjL3euRbGfn1AczdsDvzgLufEKunXKLFKcldXEtg1xZabpvdn0jnm gYPhx3W7RZghUR0Sgz3vb0n5u6wEsqtiBUUnmI0y48XCvgXDHociqV3TNZuw== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1767905863; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=Mo9KSICiICIIMW8u6F00/EBIXu0kUTn9HZHtBQ2gNuM=; b=sN5K2Snoq8pXx64AaO8qV9IcMBK2w9jGNrXFPXHzJY88tD2w32Imf7QKQAR7DOSNTnOI1 NQCN3t6bXwYng5rnAf484QpYPpB0IRbiz7z30uYP55RVd/tvRmrE4w5x3ZUMwrAbU/hxmid qkxBrz5ZslRaCElFR5kBNXgjBZiMhMhvVqOpe4DlqthEDVC4Zs3RqGhbL2i6PYj9knAsw66 Jayji/EjkcHaCRikyFBBo/L8xyWQMt15yOY7HvEoJEktwAkN58WDNXyQbCGsLlciQ6QR+xI kct/VYGrHAq2r+v27MYuBF93y/h2omOGezGchUy5qnmVAS6y6tS8nt/b6NVw== Received: from f7c34508609e (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 6D582690C74 for ; Thu, 8 Jan 2026 22:57:43 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Thu, 08 Jan 2026 20:57:42 -0000 Message-ID: <176790586357.25.14246101184594857677@4457048688e7> Message-ID-Hash: Z5R6U3OHWHZVPWCPAMIT7JCB5HP7AOV7 X-Message-ID-Hash: Z5R6U3OHWHZVPWCPAMIT7JCB5HP7AOV7 X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PR] libavformat/libsrt: Allow for specifying different port and adapter in SRT Rendezvous mode. (PR #21415) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: colekas via ffmpeg-devel Cc: colekas Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21415 opened by colekas URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21415 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21415.patch According to https://github.com/Haivision/srt/blob/master/docs/apps/srt-live-transmit.md#medium-srt a local port and adapter can be specified to allow for NAT traversal when setting up a Rendezvous mode connection. Slight re-working from this patch from 2018 - https://patchwork.ffmpeg.org/project/ffmpeg/patch/DB8PR09MB29692763876CD366A90BC048C5AA0@DB8PR09MB2969.eurprd09.prod.outlook.com/ >>From ced2f184d9b38fd854992a740101461a32bc5886 Mon Sep 17 00:00:00 2001 From: Christopher Olekas Date: Thu, 8 Jan 2026 15:47:53 -0500 Subject: [PATCH] libavformat/libsrt: Allow for specifying different port and adapter in SRT Rendezvous mode. According to https://github.com/Haivision/srt/blob/master/docs/apps/srt-live-transmit.md#medium-srt a local port and adapter can be specified to allow for NAT traversal when setting up a Rendezvous mode connection. --- libavformat/libsrt.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index ba04d9f782..d490244efc 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -93,6 +93,8 @@ typedef struct SRTContext { SRT_TRANSTYPE transtype; int linger; int tsbpd; + char *adapter; + int port; } SRTContext; #define D AV_OPT_FLAG_DECODING_PARAM @@ -146,6 +148,8 @@ static const AVOption libsrt_options[] = { { "file", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = SRTT_FILE }, INT_MIN, INT_MAX, .flags = D|E, .unit = "transtype" }, { "linger", "Number of seconds that the socket waits for unsent data when closing", OFFSET(linger), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E }, { "tsbpd", "Timestamp-based packet delivery", OFFSET(tsbpd), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, .flags = D|E }, + { "adapter", "IP address of network card to use in rendezvous mode", OFFSET(adapter), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E }, + { "port", "Local port to use in rendezvous mode", OFFSET(port), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 65535, .flags = D|E }, { NULL } }; @@ -384,13 +388,14 @@ static int libsrt_set_options_pre(URLContext *h, int fd) static int libsrt_setup(URLContext *h, const char *uri, int flags) { struct addrinfo hints = { 0 }, *ai, *cur_ai; - int port, fd; + int port, fd = -1; SRTContext *s = h->priv_data; int ret; char hostname[1024],proto[1024],path[1024]; char portstr[10]; int64_t open_timeout = 0; int eid; + struct sockaddr_in la = { 0 }; av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port, path, sizeof(path), uri); @@ -418,6 +423,22 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) cur_ai = ai; + if (s->mode == SRT_MODE_RENDEZVOUS) { + // Copy remote port to local address struct in case port is not set + if (cur_ai->ai_family == AF_INET) { + struct sockaddr_in *sin = (struct sockaddr_in *)cur_ai->ai_addr; + la.sin_family = AF_INET; + la.sin_port = sin->sin_port; + } + + if (s->port != -1) { + la.sin_port = htons(s->port); + } + if (s->adapter != NULL) { + la.sin_addr.s_addr = inet_addr(s->adapter); + } + } + restart: #if SRT_VERSION_VALUE >= 0x010401 @@ -461,7 +482,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) if (ret < 0) goto fail1; if (s->mode == SRT_MODE_RENDEZVOUS) { - if (srt_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen)) { + if (srt_bind(fd, (struct sockaddr *)&la, sizeof(struct sockaddr_in))) { ret = libsrt_neterrno(h); srt_epoll_release(write_eid); goto fail1; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org