From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 598D44D89B for ; Wed, 26 Feb 2025 04:02:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1118A68CF52; Wed, 26 Feb 2025 06:02:01 +0200 (EET) Received: from mail-yb1-f172.google.com (mail-yb1-f172.google.com [209.85.219.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0188868CEEE for ; Wed, 26 Feb 2025 06:01:54 +0200 (EET) Received: by mail-yb1-f172.google.com with SMTP id 3f1490d57ef6-e573136107bso5435037276.3 for ; Tue, 25 Feb 2025 20:01:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740542513; x=1741147313; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UBsiYvMfzltinPvAOwdbw9uIM83JTcZCS00FO8p6ctQ=; b=X9NrJOlWiQ3AVi1OSFq1slrRJb+9R7HVlf/aPNdY2Fyz3YZCI3+KXr3woiGHEU9iry c4uYIfVr0GVb6qytfQ4j6mG3V5fdedRffW2/oAxKAN/6ZDkNpZUYfinTrawgWDtOgXAL bRwSimAQ0euwpndIm9nYwbwCJSAn7nhHGMyezbRFnQQWVlz6el0AzX9u0yjYB/X6ft+N w9wm3epimM3jMPin1FvZtyRKL79VU6UI64WhM+h6T5GkL6Af/nAGH/f3xWjCcqpU3Xon aCugGJrhYAPGJ3YCMoQT13TEdx9p4dtwHyd176+e4K/ZmCYpABbqvzWW74ZVENGuW0E4 jdrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740542513; x=1741147313; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UBsiYvMfzltinPvAOwdbw9uIM83JTcZCS00FO8p6ctQ=; b=DuuYsNpUFE7VTejJsDWzvYnrMaRdtFhskYEtFsnkuL4t3Ue4A6Q+mkK2yMpAz6OLHn jC4ExH71x5mW3QuFsoGy1P43f4VFObzv/Qx1yt4hUwy+OXiLIuk9V570jIIfk7eknuY6 uIgHtmVN43OYPbBtN+4TBtELs8c+as9EqvfWt627ugMf0CncKVQ6/0yW5O3/SqkqV4Ns 4P1Q4Jk3G5/9lTQAwpLUVQePw+HOGFJfNVOThcI/BhlImi0pFojg1CG7Bhp6Uh2+6wPC TXraVNla9IWFOZ2QSw4rAPadylE7hMrli7GWurQjfZ7SuaJurS4vN+9BVlv32Y0v2/YX Ibaw== X-Gm-Message-State: AOJu0Yx9HmicUV85IHo44xCZ2SBqd7c89vJq8W4chPreyvHGNTt8mild tPu3O+RSiSCOv8LgxUVMYrDl/OtSwhZLsPEx3ThU6Je+VZ1Ar8ag+WNvlg== X-Gm-Gg: ASbGncu4Tdr5/PhVLTTPyBjCSKQ/QAVOQFhNiBn1C10nz6spV+CV/aEPIGii02+OiwC mLi7IpHT15CfCXZcP4ORrIHw0SpjwMhtO5kbB/ftadxkN0EI1rNooVjvfNFy1RZRpNyFJ0F0Mds rNuwOqlhyNB8ZGp6KHou+707de7pvMzoQj2R+dzIMRPfHvInXIyDmVfXbSPTqZgfST0jOjwkV9F VWrr7Xq0leN3A2b6XIpueZRkMFsOb7T9KQ9F2JvYQnoVJv+jWeLKz/1rfwwW8BMe0qLG5lsrpBZ GqbtSdyQ12mg3xmhHUGChtELq/rBIVyOp/IgcF/T0kWmWV91DvfdC9SaARCJX/THO1ZQm9S97Gn 9tVVFqZp5daonhJoLyqlg X-Google-Smtp-Source: AGHT+IFk0uqW1o5w5q4Pc/EklILo409DeWqfbRxh4R2DnbYSJTVJCX//CdCurO+Y3NB2UzjmG2tMWA== X-Received: by 2002:a05:6902:140b:b0:e60:898d:452c with SMTP id 3f1490d57ef6-e608a6ce2c7mr1649774276.23.1740542512987; Tue, 25 Feb 2025 20:01:52 -0800 (PST) Received: from localhost.localdomain (108-65-109-112.lightspeed.tukrga.sbcglobal.net. [108.65.109.112]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e607b40d227sm754175276.31.2025.02.25.20.01.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 20:01:51 -0800 (PST) From: Rashad Tatum To: ffmpeg-devel@ffmpeg.org Date: Tue, 25 Feb 2025 23:01:07 -0500 Message-ID: <20250226040116.1056751-3-tatum.rashad@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250226040116.1056751-1-tatum.rashad@gmail.com> References: <20250226040116.1056751-1-tatum.rashad@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 3/3] libavformat/rtsp: Fix playback of sdp files from http urls. 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: Rashad Tatum Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Support wildcard source-filter destinations. Revamp source-filter processing to only happen after the first media description was processed and either when the next one starts or when we have reached the end of the sdp. This handles a wider variety of cases and doesn't rely on any optional media descriptions. --- libavformat/rtsp.c | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index ac17717195..1fbcb20167 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + #include "config_components.h" #include "libavutil/avassert.h" @@ -393,9 +395,10 @@ static void copy_default_source_addrs(struct RTSPSource **addrs, int count, { RTSPSource *rtsp_src, *rtsp_src2; int i; + const char* wildcard_dest = "*"; for (i = 0; i < count; i++) { rtsp_src = addrs[i]; - if (strcmp(rtsp_src->dest_addr, sdp_ip_str) == 0) { + if ((strcmp(rtsp_src->dest_addr, sdp_ip_str) == 0) || (strcmp(rtsp_src->dest_addr, wildcard_dest) == 0)) { rtsp_src2 = av_memdup(rtsp_src, sizeof(*rtsp_src)); if (!rtsp_src2) continue; @@ -425,7 +428,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, { RTSPState *rt = s->priv_data; char buf1[64], st_type[64]; - const char *p, *sdp_ip_str, *dest_addr; + const char *p, *dest_addr; enum AVMediaType codec_type; int payload_type; AVStream *st; @@ -451,7 +454,6 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, if (get_sockaddr(s, buf1, &sdp_ip)) return; - sdp_ip_str = av_strdup(buf1); ttl = 16; if (*p == '/') { p++; @@ -466,19 +468,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, rtsp_st->sdp_ip = sdp_ip; rtsp_st->sdp_ttl = ttl; - copy_default_source_addrs(s1->default_include_source_addrs, - s1->nb_default_include_source_addrs, - &rtsp_st->include_source_addrs, - &rtsp_st->nb_include_source_addrs, - sdp_ip_str); - copy_default_source_addrs(s1->default_exclude_source_addrs, - s1->nb_default_exclude_source_addrs, - &rtsp_st->exclude_source_addrs, - &rtsp_st->nb_exclude_source_addrs, - sdp_ip_str); - } - av_freep(&sdp_ip_str); break; case 's': av_dict_set(&s->metadata, "title", p, 0); @@ -521,6 +511,8 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, rtsp_st->sdp_ip = s1->default_ip; rtsp_st->sdp_ttl = s1->default_ttl; + + get_word(buf1, sizeof(buf1), &p); /* port */ rtsp_st->sdp_port = atoi(buf1); @@ -728,13 +720,31 @@ int ff_sdp_parse(AVFormatContext *s, const char *content) { const char *p; int letter, i; - char buf[SDP_MAX_SIZE], *q; + char buf[SDP_MAX_SIZE], sdp_ip_str[50], *q; + bool parsed_first_media_desc = false; SDPParseState sdp_parse_state = { { 0 } }, *s1 = &sdp_parse_state; p = content; for (;;) { p += strspn(p, SPACE_CHARS); letter = *p; + if(parsed_first_media_desc && (letter == 'm' || letter == '\0')) { + RTSPState *rt = s->priv_data; + RTSPStream *rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1]; + getnameinfo((struct sockaddr*) &rtsp_st->sdp_ip, + sizeof(rtsp_st->sdp_ip), + sdp_ip_str, sizeof(sdp_ip_str), NULL, 0, NI_NUMERICHOST); + copy_default_source_addrs(s1->default_include_source_addrs, + s1->nb_default_include_source_addrs, + &rtsp_st->include_source_addrs, + &rtsp_st->nb_include_source_addrs, + sdp_ip_str); + copy_default_source_addrs(s1->default_exclude_source_addrs, + s1->nb_default_exclude_source_addrs, + &rtsp_st->exclude_source_addrs, + &rtsp_st->nb_exclude_source_addrs, + sdp_ip_str); + } if (letter == '\0') break; p++; @@ -749,7 +759,11 @@ int ff_sdp_parse(AVFormatContext *s, const char *content) p++; } *q = '\0'; + sdp_parse_line(s, s1, letter, buf); + if(letter == 'm') + parsed_first_media_desc = true; + next_line: while (*p != '\n' && *p != '\0') p++; -- 2.48.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".