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

ekibun soekibun at gmail.com
Sat Oct 2 10:02:45 EEST 2021

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.

 libavformat/hls.c | 2 ++
 1 file changed, 2 insertions(+)

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 (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;
     av_dict_copy(&tmp, *opts, 0);
     av_dict_copy(&tmp, opts2, 0);

More information about the ffmpeg-devel mailing list