From patchwork Tue Dec 22 00:36:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 24610 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 9C4A444B7CB for ; Tue, 22 Dec 2020 02:42:04 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 68D5568A882; Tue, 22 Dec 2020 02:42:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-il1-f195.google.com (mail-il1-f195.google.com [209.85.166.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 75F9B68A878 for ; Tue, 22 Dec 2020 02:41:57 +0200 (EET) Received: by mail-il1-f195.google.com with SMTP id q1so10539165ilt.6 for ; Mon, 21 Dec 2020 16:41:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=083d9c3QJRuG2WUO4RF9KcPbOniTCjbvbfX5Te/07Y8=; b=Sr1XcKhArU3YfAEV8qi0xyH3Kegpcr7p/ahb+aZuYRso0mTwKX6S3zVKiJ3KBKsbrn pdxcCvgTnsNs3+KpClLNNkhh4IV0NzyMtCF2SJTD+ilHnP6bd4oB0SuGRm0vM7C87kH2 W30NDII2gvdpO+FZrZHQJ0COLUXv1z6BgFKXOi5XUYGX9O8FXiDaIhg7GyBPhcs8qScC I675geEh2fzxXZAQQ+O6lRqKxPHZEDwsZyZk8pdhKtNjk29bixeGsg9BUU0DQvoVdxy1 5Bpv2zAESMKOHBPv/SUQk//ZfdDbq2HYqaPGQp1HNMODbVK1ozAUdWZd0ccilRTCsBHD armg== X-Gm-Message-State: AOAM5327mlGCJaOBpR0abzXTwyBTMEw5a1Guf6yKqTwEHgHBeyfEG9Ov 2Tro7AMrh/r4SMEP298vGBKtR6Tc3KQF6+4c X-Google-Smtp-Source: ABdhPJxtDhVij4WVGsJNBw6wGm0cd1DdO9X0NP6hWNJGmQQLoniNIeW/etXFiu5IgeujP4qyq8QcxA== X-Received: by 2002:a63:4566:: with SMTP id u38mr17566942pgk.423.1608597386131; Mon, 21 Dec 2020 16:36:26 -0800 (PST) Received: from tmm1-imac.lan (ip72-194-222-34.sb.sd.cox.net. [72.194.222.34]) by smtp.gmail.com with ESMTPSA id z7sm18320780pfq.193.2020.12.21.16.36.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Dec 2020 16:36:25 -0800 (PST) From: Aman Karmani To: ffmpeg-devel@ffmpeg.org Date: Mon, 21 Dec 2020 16:36:00 -0800 Message-Id: <20201222003600.27621-3-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201222003600.27621-1-ffmpeg@tmm1.net> References: <20201222003600.27621-1-ffmpeg@tmm1.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avformat/rtsp: add satip_raw flag to receive raw mpegts stream 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 Cc: Aman Karmani Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Karmani This can be used to receive the raw mpegts stream from a SAT>IP server, by letting avformat handle the RTSP/RTP/UDP negotiation and setup, but then simply passing the MP2T stream through instead of demuxing it further. For example, this command would demux/remux the mpegts stream: ffmpeg -i 'satip://192.168.1.99:554/?src=1&freq=12188&pol=h&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=27500&fec=34&pids=0,17,18,167,136,47,71' -map 0 -c copy -f mpegts -y remux.ts Whereas this command would simply save the original stream with the original PIDs and PAT/PMT/etc: ffmpeg -rtsp_flags satip_raw -i 'satip://192.168.1.99:554/?src=1&freq=12188&pol=h&ro=0.35&msys=dvbs&mtype=qpsk&plts=off&sr=27500&fec=34&pids=0,17,18,167,136,47,71' -map 0 -c copy -f mpegtsraw -y raw.ts Signed-off-by: Aman Karmani --- libavformat/rtsp.c | 6 +++++- libavformat/rtsp.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 4a863dbac3..d3864c0c67 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -89,6 +89,7 @@ const AVOption ff_rtsp_options[] = { RTSP_FLAG_OPTS("rtsp_flags", "set RTSP flags"), { "listen", "wait for incoming connections", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_LISTEN}, 0, 0, DEC, "rtsp_flags" }, { "prefer_tcp", "try RTP via TCP first, if available", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_PREFER_TCP}, 0, 0, DEC|ENC, "rtsp_flags" }, + { "satip_raw", "export raw MPEG-TS stream instead of demuxing", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_SATIP_RAW}, 0, 0, DEC, "rtsp_flags" }, RTSP_MEDIATYPE_OPTS("allowed_media_types", "set media types to accept from the server"), { "min_port", "set minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC }, { "max_port", "set maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC }, @@ -256,6 +257,9 @@ static int init_satip_stream(AVFormatContext *s) { RTSPState *rt = s->priv_data; RTSPStream *rtsp_st; + const RTPDynamicProtocolHandler *handler = + (rt->rtsp_flags & RTSP_FLAG_SATIP_RAW) ? &ff_mpegtsraw_dynamic_handler : + &ff_mpegts_dynamic_handler; rtsp_st = av_mallocz(sizeof(RTSPStream)); if (!rtsp_st) return AVERROR(ENOMEM); @@ -265,7 +269,7 @@ static int init_satip_stream(AVFormatContext *s) av_strlcpy(rtsp_st->control_url, rt->control_uri, sizeof(rtsp_st->control_url)); rtsp_st->sdp_payload_type = 33; // MP2T - init_rtp_handler(&ff_mpegts_dynamic_handler, rtsp_st, NULL); + init_rtp_handler(handler, rtsp_st, NULL); finalize_rtp_handler_init(s, rtsp_st, NULL); return 0; } diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index c7c3b3cb52..8a9424a1c5 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -429,6 +429,7 @@ typedef struct RTSPState { #define RTSP_FLAG_RTCP_TO_SOURCE 0x8 /**< Send RTCP packets to the source address of received packets. */ #define RTSP_FLAG_PREFER_TCP 0x10 /**< Try RTP via TCP first if possible. */ +#define RTSP_FLAG_SATIP_RAW 0x20 /**< Export SAT>IP stream as raw MPEG-TS */ typedef struct RTSPSource { char addr[128]; /**< Source-specific multicast include source IP address (from SDP content) */