You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-11-23 21:54:53 +02:00
avformat/rtpproto: use ff_parse_opts_from_query_string() to set URL parameters
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
@@ -1162,9 +1162,13 @@ rtp://@var{hostname}[:@var{port}][?@var{options}]
|
|||||||
@var{port} specifies the RTP port to use.
|
@var{port} specifies the RTP port to use.
|
||||||
|
|
||||||
@var{options} contains a list of &-separated options of the form
|
@var{options} contains a list of &-separated options of the form
|
||||||
@var{key}=@var{val}.
|
@var{key}=@var{val}. Standard percent-encoding (and using the plus sign for
|
||||||
|
space) can be used to escape keys and values.
|
||||||
|
|
||||||
The following options are supported:
|
Options can also can be specified via command line options (or in code via
|
||||||
|
@code{AVOption}s).
|
||||||
|
|
||||||
|
The list of supported options follows.
|
||||||
|
|
||||||
@table @option
|
@table @option
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
|
#include "internal.h"
|
||||||
#include "rtp.h"
|
#include "rtp.h"
|
||||||
#include "rtpproto.h"
|
#include "rtpproto.h"
|
||||||
#include "url.h"
|
#include "url.h"
|
||||||
@@ -232,8 +233,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
|
|||||||
RTPContext *s = h->priv_data;
|
RTPContext *s = h->priv_data;
|
||||||
AVDictionary *fec_opts = NULL;
|
AVDictionary *fec_opts = NULL;
|
||||||
int rtp_port;
|
int rtp_port;
|
||||||
char hostname[256], include_sources[1024] = "", exclude_sources[1024] = "";
|
char hostname[256];
|
||||||
char *sources = include_sources, *block = exclude_sources;
|
|
||||||
char *fec_protocol = NULL;
|
char *fec_protocol = NULL;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
char path[1024];
|
char path[1024];
|
||||||
@@ -250,58 +250,17 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
|
|||||||
|
|
||||||
p = strchr(uri, '?');
|
p = strchr(uri, '?');
|
||||||
if (p) {
|
if (p) {
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "ttl", p)) {
|
ret = ff_parse_opts_from_query_string(s, p, 1);
|
||||||
s->ttl = strtol(buf, NULL, 10);
|
if (ret < 0)
|
||||||
}
|
goto fail;
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "rtcpport", p)) {
|
}
|
||||||
s->rtcp_port = strtol(buf, NULL, 10);
|
if (s->sources) {
|
||||||
}
|
if ((ret = ff_ip_parse_sources(h, s->sources, &s->filters)) < 0)
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "localport", p)) {
|
goto fail;
|
||||||
s->local_rtpport = strtol(buf, NULL, 10);
|
}
|
||||||
}
|
if (s->block) {
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "localrtpport", p)) {
|
if ((ret = ff_ip_parse_blocks(h, s->block, &s->filters)) < 0)
|
||||||
s->local_rtpport = strtol(buf, NULL, 10);
|
goto fail;
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "localrtcpport", p)) {
|
|
||||||
s->local_rtcpport = strtol(buf, NULL, 10);
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "pkt_size", p)) {
|
|
||||||
s->pkt_size = strtol(buf, NULL, 10);
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "connect", p)) {
|
|
||||||
s->connect = strtol(buf, NULL, 10);
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "write_to_source", p)) {
|
|
||||||
s->write_to_source = strtol(buf, NULL, 10);
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "dscp", p)) {
|
|
||||||
s->dscp = strtol(buf, NULL, 10);
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "timeout", p)) {
|
|
||||||
s->rw_timeout = strtol(buf, NULL, 10);
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "sources", p)) {
|
|
||||||
av_strlcpy(include_sources, buf, sizeof(include_sources));
|
|
||||||
ff_ip_parse_sources(h, buf, &s->filters);
|
|
||||||
} else {
|
|
||||||
ff_ip_parse_sources(h, s->sources, &s->filters);
|
|
||||||
sources = s->sources;
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "block", p)) {
|
|
||||||
av_strlcpy(exclude_sources, buf, sizeof(exclude_sources));
|
|
||||||
ff_ip_parse_blocks(h, buf, &s->filters);
|
|
||||||
} else {
|
|
||||||
ff_ip_parse_blocks(h, s->block, &s->filters);
|
|
||||||
block = s->block;
|
|
||||||
}
|
|
||||||
if (av_find_info_tag(buf, sizeof(buf), "localaddr", p)) {
|
|
||||||
av_freep(&s->localaddr);
|
|
||||||
s->localaddr = av_strdup(buf);
|
|
||||||
if (!s->localaddr) {
|
|
||||||
ret = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (s->rw_timeout >= 0)
|
if (s->rw_timeout >= 0)
|
||||||
h->rw_timeout = s->rw_timeout;
|
h->rw_timeout = s->rw_timeout;
|
||||||
@@ -334,6 +293,8 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < max_retry_count; i++) {
|
for (i = 0; i < max_retry_count; i++) {
|
||||||
|
const char *sources = s->sources ? s->sources : "";
|
||||||
|
const char *block = s->block ? s->block : "";
|
||||||
build_udp_url(s, buf, sizeof(buf),
|
build_udp_url(s, buf, sizeof(buf),
|
||||||
hostname, s->localaddr, rtp_port, s->local_rtpport,
|
hostname, s->localaddr, rtp_port, s->local_rtpport,
|
||||||
sources, block);
|
sources, block);
|
||||||
|
|||||||
Reference in New Issue
Block a user