diff mbox series

[FFmpeg-devel] do not check protocol on hls without network.

Message ID 20211002070245.831-1-soekibun@gmail.com
State New
Headers show
Series [FFmpeg-devel] do not check protocol on hls without network. | expand

Checks

Context Check Description
andriy/commit_msg_x86 warning The first line of the commit message must start with a context terminated by a colon and a space, for example "lavu/opt: " or "doc: ".
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/commit_msg_ppc warning The first line of the commit message must start with a context terminated by a colon and a space, for example "lavu/opt: " or "doc: ".
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

ekibun Oct. 2, 2021, 7:02 a.m. UTC
Hi. I'm investigating in custom IO for HLS playing, and got errors while calling segments.
I've compiled libav with `--disable-network` configure and tried custom IO by overriding `io_open` and `io_close` for `AVFormatContext`. Everything goes well until open segments urls.
In the function `open_url` of `hls.c`, demuxer checks the protocol name before calling io_open.
The protocol name is obtained by `avio_find_protocol_name` that always return `NULL` since no network protocol exists.
And after I commented out all the protocol checks in `hls.c`, it functions properly.
Curious to hear if you think it's a good solution or is there a better way around.
Thanks!

---
 libavformat/hls.c | 2 ++
 1 file changed, 2 insertions(+)
diff mbox series

Patch

diff --git a/libavformat/hls.c b/libavformat/hls.c
index 9fd4ad9f32..e139922ab8 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -631,6 +631,7 @@  static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
     int ret;
     int is_http = 0;
 
+#if CONFIG_HTTP_PROTOCOL
     if (av_strstart(url, "crypto", NULL)) {
         if (url[6] == '+' || url[6] == ':')
             proto_name = avio_find_protocol_name(url + 7);
@@ -669,6 +670,7 @@  static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
         ;
     else if (strcmp(proto_name, "file") || !strncmp(url, "file,", 5))
         return AVERROR_INVALIDDATA;
+#endif
 
     av_dict_copy(&tmp, *opts, 0);
     av_dict_copy(&tmp, opts2, 0);