You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avformat/hls: support data protocol in uri for EXT-X-MAP
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
This commit is contained in:
@@ -369,7 +369,7 @@ const URLProtocol ff_file_protocol = {
|
|||||||
.url_open_dir = file_open_dir,
|
.url_open_dir = file_open_dir,
|
||||||
.url_read_dir = file_read_dir,
|
.url_read_dir = file_read_dir,
|
||||||
.url_close_dir = file_close_dir,
|
.url_close_dir = file_close_dir,
|
||||||
.default_whitelist = "file,crypto"
|
.default_whitelist = "file,crypto,data"
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_FILE_PROTOCOL */
|
#endif /* CONFIG_FILE_PROTOCOL */
|
||||||
@@ -408,7 +408,7 @@ const URLProtocol ff_pipe_protocol = {
|
|||||||
.url_check = file_check,
|
.url_check = file_check,
|
||||||
.priv_data_size = sizeof(FileContext),
|
.priv_data_size = sizeof(FileContext),
|
||||||
.priv_data_class = &pipe_class,
|
.priv_data_class = &pipe_class,
|
||||||
.default_whitelist = "crypto"
|
.default_whitelist = "crypto,data"
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_PIPE_PROTOCOL */
|
#endif /* CONFIG_PIPE_PROTOCOL */
|
||||||
|
@@ -413,7 +413,11 @@ static struct segment *new_init_section(struct playlist *pls,
|
|||||||
if (!sec)
|
if (!sec)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (!av_strncasecmp(info->uri, "data:", 5)) {
|
||||||
|
strncpy(tmp_str, info->uri, strlen(info->uri));
|
||||||
|
} else {
|
||||||
ff_make_absolute_url(tmp_str, sizeof(tmp_str), url_base, info->uri);
|
ff_make_absolute_url(tmp_str, sizeof(tmp_str), url_base, info->uri);
|
||||||
|
}
|
||||||
sec->url = av_strdup(tmp_str);
|
sec->url = av_strdup(tmp_str);
|
||||||
if (!sec->url) {
|
if (!sec->url) {
|
||||||
av_free(sec);
|
av_free(sec);
|
||||||
@@ -627,6 +631,9 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
|
|||||||
if (av_strstart(url, "crypto", NULL)) {
|
if (av_strstart(url, "crypto", NULL)) {
|
||||||
if (url[6] == '+' || url[6] == ':')
|
if (url[6] == '+' || url[6] == ':')
|
||||||
proto_name = avio_find_protocol_name(url + 7);
|
proto_name = avio_find_protocol_name(url + 7);
|
||||||
|
} else if (av_strstart(url, "data", NULL)) {
|
||||||
|
if (url[4] == '+' || url[4] == ':')
|
||||||
|
proto_name = avio_find_protocol_name(url + 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!proto_name)
|
if (!proto_name)
|
||||||
@@ -646,6 +653,8 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
|
|||||||
}
|
}
|
||||||
} else if (av_strstart(proto_name, "http", NULL)) {
|
} else if (av_strstart(proto_name, "http", NULL)) {
|
||||||
is_http = 1;
|
is_http = 1;
|
||||||
|
} else if (av_strstart(proto_name, "data", NULL)) {
|
||||||
|
;
|
||||||
} else
|
} else
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
@@ -653,6 +662,8 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
|
|||||||
;
|
;
|
||||||
else if (av_strstart(url, "crypto", NULL) && !strncmp(proto_name, url + 7, strlen(proto_name)) && url[7 + strlen(proto_name)] == ':')
|
else if (av_strstart(url, "crypto", NULL) && !strncmp(proto_name, url + 7, strlen(proto_name)) && url[7 + strlen(proto_name)] == ':')
|
||||||
;
|
;
|
||||||
|
else if (av_strstart(url, "data", NULL) && !strncmp(proto_name, url + 5, strlen(proto_name)) && url[5 + strlen(proto_name)] == ':')
|
||||||
|
;
|
||||||
else if (strcmp(proto_name, "file") || !strncmp(url, "file,", 5))
|
else if (strcmp(proto_name, "file") || !strncmp(url, "file,", 5))
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
|
@@ -1791,7 +1791,7 @@ const URLProtocol ff_http_protocol = {
|
|||||||
.priv_data_size = sizeof(HTTPContext),
|
.priv_data_size = sizeof(HTTPContext),
|
||||||
.priv_data_class = &http_context_class,
|
.priv_data_class = &http_context_class,
|
||||||
.flags = URL_PROTOCOL_FLAG_NETWORK,
|
.flags = URL_PROTOCOL_FLAG_NETWORK,
|
||||||
.default_whitelist = "http,https,tls,rtp,tcp,udp,crypto,httpproxy"
|
.default_whitelist = "http,https,tls,rtp,tcp,udp,crypto,httpproxy,data"
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_HTTP_PROTOCOL */
|
#endif /* CONFIG_HTTP_PROTOCOL */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user