You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-10-06 05:47:18 +02:00
avformat/libsrt: use ff_parse_opts_from_query_string() to set URL parameters
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
@@ -1554,18 +1554,13 @@ srt://@var{hostname}:@var{port}[?@var{options}]
|
||||
@end example
|
||||
|
||||
@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.
|
||||
|
||||
or
|
||||
Options can also can be specified via command line options (or in code via
|
||||
@code{AVOption}s).
|
||||
|
||||
@example
|
||||
@var{options} srt://@var{hostname}:@var{port}
|
||||
@end example
|
||||
|
||||
@var{options} contains a list of '-@var{key} @var{val}'
|
||||
options.
|
||||
|
||||
This protocol accepts the following options.
|
||||
The list of supported options follows.
|
||||
|
||||
@table @option
|
||||
@item connect_timeout=@var{milliseconds}
|
||||
|
@@ -386,8 +386,6 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags)
|
||||
struct addrinfo hints = { 0 }, *ai, *cur_ai;
|
||||
int port, fd;
|
||||
SRTContext *s = h->priv_data;
|
||||
const char *p;
|
||||
char buf[256];
|
||||
int ret;
|
||||
char hostname[1024],proto[1024],path[1024];
|
||||
char portstr[10];
|
||||
@@ -402,15 +400,6 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags)
|
||||
av_log(h, AV_LOG_ERROR, "Port missing in uri\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
p = strchr(uri, '?');
|
||||
if (p) {
|
||||
if (av_find_info_tag(buf, sizeof(buf), "timeout", p)) {
|
||||
s->rw_timeout = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "listen_timeout", p)) {
|
||||
s->listen_timeout = strtoll(buf, NULL, 10);
|
||||
}
|
||||
}
|
||||
if (s->rw_timeout >= 0) {
|
||||
open_timeout = h->rw_timeout = s->rw_timeout;
|
||||
}
|
||||
@@ -534,7 +523,6 @@ static int libsrt_open(URLContext *h, const char *uri, int flags)
|
||||
{
|
||||
SRTContext *s = h->priv_data;
|
||||
const char * p;
|
||||
char buf[1024];
|
||||
int ret = 0;
|
||||
|
||||
if (srt_startup() < 0) {
|
||||
@@ -544,133 +532,9 @@ static int libsrt_open(URLContext *h, const char *uri, int flags)
|
||||
/* SRT options (srt/srt.h) */
|
||||
p = strchr(uri, '?');
|
||||
if (p) {
|
||||
if (av_find_info_tag(buf, sizeof(buf), "maxbw", p)) {
|
||||
s->maxbw = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "pbkeylen", p)) {
|
||||
s->pbkeylen = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "passphrase", p)) {
|
||||
av_freep(&s->passphrase);
|
||||
s->passphrase = ff_urldecode(buf, 1);
|
||||
if (!s->passphrase) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#if SRT_VERSION_VALUE >= 0x010302
|
||||
if (av_find_info_tag(buf, sizeof(buf), "enforced_encryption", p)) {
|
||||
s->enforced_encryption = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "kmrefreshrate", p)) {
|
||||
s->kmrefreshrate = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "kmpreannounce", p)) {
|
||||
s->kmpreannounce = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "snddropdelay", p)) {
|
||||
s->snddropdelay = strtoll(buf, NULL, 10);
|
||||
}
|
||||
#endif
|
||||
if (av_find_info_tag(buf, sizeof(buf), "mss", p)) {
|
||||
s->mss = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "ffs", p)) {
|
||||
s->ffs = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "ipttl", p)) {
|
||||
s->ipttl = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "iptos", p)) {
|
||||
s->iptos = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "inputbw", p)) {
|
||||
s->inputbw = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "oheadbw", p)) {
|
||||
s->oheadbw = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "latency", p)) {
|
||||
s->latency = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "tsbpddelay", p)) {
|
||||
s->latency = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "rcvlatency", p)) {
|
||||
s->rcvlatency = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "peerlatency", p)) {
|
||||
s->peerlatency = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "tlpktdrop", p)) {
|
||||
s->tlpktdrop = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "nakreport", p)) {
|
||||
s->nakreport = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "connect_timeout", p)) {
|
||||
s->connect_timeout = strtoll(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "payload_size", p) ||
|
||||
av_find_info_tag(buf, sizeof(buf), "pkt_size", p)) {
|
||||
s->payload_size = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "mode", p)) {
|
||||
if (!strcmp(buf, "caller")) {
|
||||
s->mode = SRT_MODE_CALLER;
|
||||
} else if (!strcmp(buf, "listener")) {
|
||||
s->mode = SRT_MODE_LISTENER;
|
||||
} else if (!strcmp(buf, "rendezvous")) {
|
||||
s->mode = SRT_MODE_RENDEZVOUS;
|
||||
} else {
|
||||
ret = AVERROR(EINVAL);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "sndbuf", p)) {
|
||||
s->sndbuf = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "rcvbuf", p)) {
|
||||
s->rcvbuf = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "lossmaxttl", p)) {
|
||||
s->lossmaxttl = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "minversion", p)) {
|
||||
s->minversion = strtol(buf, NULL, 0);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "streamid", p)) {
|
||||
av_freep(&s->streamid);
|
||||
s->streamid = ff_urldecode(buf, 1);
|
||||
if (!s->streamid) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "smoother", p)) {
|
||||
av_freep(&s->smoother);
|
||||
s->smoother = ff_urldecode(buf, 1);
|
||||
if(!s->smoother) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "messageapi", p)) {
|
||||
s->messageapi = strtol(buf, NULL, 10);
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "transtype", p)) {
|
||||
if (!strcmp(buf, "live")) {
|
||||
s->transtype = SRTT_LIVE;
|
||||
} else if (!strcmp(buf, "file")) {
|
||||
s->transtype = SRTT_FILE;
|
||||
} else {
|
||||
ret = AVERROR(EINVAL);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (av_find_info_tag(buf, sizeof(buf), "linger", p)) {
|
||||
s->linger = strtol(buf, NULL, 10);
|
||||
}
|
||||
ret = ff_parse_opts_from_query_string(s, p, 0);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
}
|
||||
ret = libsrt_setup(h, uri, flags);
|
||||
if (ret < 0)
|
||||
|
Reference in New Issue
Block a user