From patchwork Sat Dec 30 21:16:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 7039 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.79.195 with SMTP id r64csp11990158jad; Sat, 30 Dec 2017 13:16:49 -0800 (PST) X-Google-Smtp-Source: ACJfBotHNjOQve7dHjlDknHF5kcqPB2CyvyaJ0uE2wodHwk2B5o0oMUDgH+weMLua9yQ0ez7avBr X-Received: by 10.28.107.129 with SMTP id a1mr30180424wmi.83.1514668609008; Sat, 30 Dec 2017 13:16:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514668608; cv=none; d=google.com; s=arc-20160816; b=RH9yygClcCacO16n7OzuXFxkMLCVzLmR27pPAfprL43phStyyvHZn2k57vnoVPXhvx psuqu0BnjbjebbtkxspWDRZqdGQFR/PjXDzVxDN3YO3OFw4zxO1dfrqXJdG4XQAnC2WR UTAjUs9qI9MRAqOprlixmjT+cdAtcVTYyAqguLv9uI9exr3VgCLVa5uE/orH55rJgmN7 jgSLEUun/O6N2qksX2k9iYobKIvJxF2O2Pf32hUILiTLIGgiXw6XFJ9G503F3OjqpjCD vnJYvLg9+TQSJuV184fyBDf02yRexMlQeCw24F3nf6+jD89u7R2EEvOHs0Im8OrjG2FH IP1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:delivered-to:arc-authentication-results; bh=9eHTx5W5j/TpoMSGGdb5p3ktjS1S/by4/rq2tUdNSeM=; b=MDZSk0F9xE6itBMsZExeUR48wTu73In4VAtTL7TMVIYxiNNcdG6uq8XTIsmMENZWn0 MeXlar+Pclja1m6hQS0LRU4KkFqqKmzZ1MXEe5wUUG91QpY0pycoKiK02IjFlBWGmjqP JFz1orFwlXkyYDpmOjki2RQq7QGkxACGtBZGhwY8t08RoQxI6exa/pLuIolG58pc7hsz LWfOZXf2SJTyCy/G5nuA4cEJj6CF+1yzpXoCru8d3eoRPekJt0ROxj/o23KEG+QBTXkd jm27TaBOUJcoZbig7sRycDNiPUdG999snLj5Ol1WBJjo7Xt0WsitMhLGkjJ4GSyH1tU6 iWIg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a16si20338041wrh.61.2017.12.30.13.16.48; Sat, 30 Dec 2017 13:16:48 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8457E689F6E; Sat, 30 Dec 2017 23:16:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A9FD2689F57 for ; Sat, 30 Dec 2017 23:16:08 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id C6A39E10EC; Sat, 30 Dec 2017 22:16:23 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id C0H4ca6MxHXq; Sat, 30 Dec 2017 22:16:21 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 3AC4AE129E; Sat, 30 Dec 2017 22:16:21 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sat, 30 Dec 2017 22:16:04 +0100 Message-Id: <20171230211606.16405-4-cus@passwd.hu> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20171230211606.16405-1-cus@passwd.hu> References: <20171230211606.16405-1-cus@passwd.hu> Subject: [FFmpeg-devel] [PATCH 4/6] avformat/hls: migrate to AVFormatContext->url X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Marton Balint MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Marton Balint --- libavformat/hls.c | 4 +- libavformat/hlsenc.c | 230 +++++++++++++++++++++++++-------------------------- 2 files changed, 116 insertions(+), 118 deletions(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index dccc7c7dd2..865278e6f0 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -1672,7 +1672,7 @@ static int nested_io_open(AVFormatContext *s, AVIOContext **pb, const char *url, av_log(s, AV_LOG_ERROR, "A HLS playlist item '%s' referred to an external file '%s'. " "Opening this file was forbidden for security reasons\n", - s->filename, url); + s->url, url); return AVERROR(EPERM); } @@ -1810,7 +1810,7 @@ static int hls_read_header(AVFormatContext *s) update_options(&c->http_proxy, "http_proxy", u); } - if ((ret = parse_playlist(c, s->filename, NULL, s->pb)) < 0) + if ((ret = parse_playlist(c, s->url, NULL, s->pb)) < 0) goto fail; if ((ret = save_avio_options(s)) < 0) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index e6f3241765..cd99a4c9c3 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -275,7 +275,7 @@ static void hlsenc_io_close(AVFormatContext *s, AVIOContext **pb, char *filename static void set_http_options(AVFormatContext *s, AVDictionary **options, HLSContext *c) { - int http_base_proto = ff_is_http_proto(s->filename); + int http_base_proto = ff_is_http_proto(s->url); if (c->method) { av_dict_set(options, "method", c->method, 0); @@ -290,14 +290,17 @@ static void set_http_options(AVFormatContext *s, AVDictionary **options, HLSCont } -static int replace_int_data_in_filename(char *buf, int buf_size, const char *filename, char placeholder, int64_t number) +static int replace_int_data_in_filename(AVFormatContext *s, const char *filename, char placeholder, int64_t number) { const char *p; - char *q, buf1[20], c; - int nd, len, addchar_count; + char *new_filename; + char c; + int nd, addchar_count; int found_count = 0; + AVBPrint buf; + + av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); - q = buf; p = filename; for (;;) { c = *p; @@ -314,13 +317,7 @@ static int replace_int_data_in_filename(char *buf, int buf_size, const char *fil } if (*(p + addchar_count) == placeholder) { - len = snprintf(buf1, sizeof(buf1), "%0*"PRId64, (number < 0) ? nd : nd++, number); - if (len < 1) // returned error or empty buf1 - goto fail; - if ((q - buf + len) > buf_size - 1) - goto fail; - memcpy(q, buf1, len); - q += len; + av_bprintf(&buf, "%0*"PRId64, (number < 0) ? nd : nd++, number); p += (addchar_count + 1); addchar_count = 0; found_count++; @@ -329,17 +326,17 @@ static int replace_int_data_in_filename(char *buf, int buf_size, const char *fil } else addchar_count = 1; - while (addchar_count--) - if ((q - buf) < buf_size - 1) - *q++ = *p++; - else - goto fail; + av_bprint_append_data(&buf, p, addchar_count); + p += addchar_count; } - *q = '\0'; + if (!av_bprint_is_complete(&buf)) { + av_bprint_finalize(&buf, NULL); + return -1; + } + if (av_bprint_finalize(&buf, &new_filename) < 0 || !new_filename) + return -1; + ff_format_set_url(s, new_filename); return found_count; -fail: - *q = '\0'; - return -1; } static void write_styp(AVIOContext *pb) @@ -408,7 +405,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, if (hls->segment_filename) { dirname = av_strdup(hls->segment_filename); } else { - dirname = av_strdup(vs->avf->filename); + dirname = av_strdup(vs->avf->url); } if (!dirname) { ret = AVERROR(ENOMEM); @@ -435,7 +432,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, av_strlcat(path, segment->filename, path_size); } - proto = avio_find_protocol_name(s->filename); + proto = avio_find_protocol_name(s->url); if (hls->method || (proto && !av_strcasecmp(proto, "http"))) { av_dict_set(&options, "method", "DELETE", 0); if ((ret = vs->avf->io_open(vs->avf, &out, path, AVIO_FLAG_WRITE, &options)) < 0) @@ -505,12 +502,12 @@ static int do_encrypt(AVFormatContext *s, VariantStream *vs) AVIOContext *pb; uint8_t key[KEYSIZE]; - len = strlen(s->filename) + 4 + 1; + len = strlen(s->url) + 4 + 1; hls->key_basename = av_mallocz(len); if (!hls->key_basename) return AVERROR(ENOMEM); - av_strlcpy(hls->key_basename, s->filename, len); + av_strlcpy(hls->key_basename, s->url, len); av_strlcat(hls->key_basename, ".key", len); if (hls->key_url) { @@ -640,7 +637,10 @@ static int hls_mux_init(AVFormatContext *s, VariantStream *vs) return ret; oc = vs->avf; - oc->filename[0] = '\0'; + oc->url = av_strdup(""); + if (!oc->url) + return AVERROR(ENOMEM); + oc->oformat = vs->oformat; oc->interrupt_callback = s->interrupt_callback; oc->max_delay = s->max_delay; @@ -749,42 +749,33 @@ static int sls_flags_filename_process(struct AVFormatContext *s, HLSContext *hls { if ((hls->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) && strlen(vs->current_segment_final_filename_fmt)) { - av_strlcpy(vs->avf->filename, vs->current_segment_final_filename_fmt, sizeof(vs->avf->filename)); + char * new_url = av_strdup(vs->current_segment_final_filename_fmt); + if (!new_url) { + av_free(en); + return AVERROR(ENOMEM); + } + ff_format_set_url(vs->avf, new_url); if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) { - char * filename = av_strdup(vs->avf->filename); // %%s will be %s after strftime - if (!filename) { - av_free(en); - return AVERROR(ENOMEM); - } - if (replace_int_data_in_filename(vs->avf->filename, sizeof(vs->avf->filename), - filename, 's', pos + size) < 1) { + if (replace_int_data_in_filename(vs->avf, + vs->avf->url, 's', pos + size) < 1) { av_log(hls, AV_LOG_ERROR, "Invalid second level segment filename template '%s', " "you can try to remove second_level_segment_size flag\n", - filename); - av_free(filename); + vs->avf->url); av_free(en); return AVERROR(EINVAL); } - av_free(filename); } if (hls->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) { - char * filename = av_strdup(vs->avf->filename); // %%t will be %t after strftime - if (!filename) { - av_free(en); - return AVERROR(ENOMEM); - } - if (replace_int_data_in_filename(vs->avf->filename, sizeof(vs->avf->filename), - filename, 't', (int64_t)round(duration * HLS_MICROSECOND_UNIT)) < 1) { + if (replace_int_data_in_filename(vs->avf, + vs->avf->url, 't', (int64_t)round(duration * HLS_MICROSECOND_UNIT)) < 1) { av_log(hls, AV_LOG_ERROR, "Invalid second level segment filename template '%s', " "you can try to remove second_level_segment_time flag\n", - filename); - av_free(filename); + vs->avf->url); av_free(en); return AVERROR(EINVAL); } - av_free(filename); } } return 0; @@ -836,58 +827,43 @@ static int sls_flag_check_duration_size(HLSContext *hls, VariantStream *vs) static void sls_flag_file_rename(HLSContext *hls, VariantStream *vs, char *old_filename) { if ((hls->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) && strlen(vs->current_segment_final_filename_fmt)) { - ff_rename(old_filename, vs->avf->filename, hls); + ff_rename(old_filename, vs->avf->url, hls); } } static int sls_flag_use_localtime_filename(AVFormatContext *oc, HLSContext *c, VariantStream *vs) { if (c->flags & HLS_SECOND_LEVEL_SEGMENT_INDEX) { - char * filename = av_strdup(oc->filename); // %%d will be %d after strftime - if (!filename) - return AVERROR(ENOMEM); - if (replace_int_data_in_filename(oc->filename, sizeof(oc->filename), + if (replace_int_data_in_filename(oc, #if FF_API_HLS_WRAP - filename, 'd', c->wrap ? vs->sequence % c->wrap : vs->sequence) < 1) { + oc->url, 'd', c->wrap ? vs->sequence % c->wrap : vs->sequence) < 1) { #else - filename, 'd', vs->sequence) < 1) { + oc->url, 'd', vs->sequence) < 1) { #endif av_log(c, AV_LOG_ERROR, "Invalid second level segment filename template '%s', " "you can try to remove second_level_segment_index flag\n", - filename); - av_free(filename); + oc->url); return AVERROR(EINVAL); } - av_free(filename); } if (c->flags & (HLS_SECOND_LEVEL_SEGMENT_SIZE | HLS_SECOND_LEVEL_SEGMENT_DURATION)) { - av_strlcpy(vs->current_segment_final_filename_fmt, oc->filename, + av_strlcpy(vs->current_segment_final_filename_fmt, oc->url, sizeof(vs->current_segment_final_filename_fmt)); if (c->flags & HLS_SECOND_LEVEL_SEGMENT_SIZE) { - char * filename = av_strdup(oc->filename); // %%s will be %s after strftime - if (!filename) - return AVERROR(ENOMEM); - if (replace_int_data_in_filename(oc->filename, sizeof(oc->filename), filename, 's', 0) < 1) { + if (replace_int_data_in_filename(oc, oc->url, 's', 0) < 1) { av_log(c, AV_LOG_ERROR, "Invalid second level segment filename template '%s', " "you can try to remove second_level_segment_size flag\n", - filename); - av_free(filename); + oc->url); return AVERROR(EINVAL); } - av_free(filename); } if (c->flags & HLS_SECOND_LEVEL_SEGMENT_DURATION) { - char * filename = av_strdup(oc->filename); // %%t will be %t after strftime - if (!filename) - return AVERROR(ENOMEM); - if (replace_int_data_in_filename(oc->filename, sizeof(oc->filename), filename, 't', 0) < 1) { + if (replace_int_data_in_filename(oc, oc->url, 't', 0) < 1) { av_log(c, AV_LOG_ERROR, "Invalid second level segment filename template '%s', " "you can try to remove second_level_segment_time flag\n", - filename); - av_free(filename); + oc->url); return AVERROR(EINVAL); } - av_free(filename); } } return 0; @@ -911,10 +887,10 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, return ret; } - filename = av_basename(vs->avf->filename); + filename = av_basename(vs->avf->url); if (hls->use_localtime_mkdir) { - filename = vs->avf->filename; + filename = vs->avf->url; } if ((find_segment_by_filename(vs->segments, filename) || find_segment_by_filename(vs->old_segments, filename)) && !byterange_mode) { @@ -923,7 +899,7 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, av_strlcpy(en->filename, filename, sizeof(en->filename)); if(vs->has_subtitle) - av_strlcpy(en->sub_filename, av_basename(vs->vtt_avf->filename), sizeof(en->sub_filename)); + av_strlcpy(en->sub_filename, av_basename(vs->vtt_avf->url), sizeof(en->sub_filename)); else en->sub_filename[0] = '\0'; @@ -1049,10 +1025,15 @@ static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs continue; } else if (line[0]) { if (is_segment) { + char *new_file = av_strdup(line); + if (!new_file) { + ret = AVERROR(ENOMEM); + goto fail; + } + ff_format_set_url(vs->avf, new_file); is_segment = 0; new_start_pos = avio_tell(vs->avf->pb); vs->size = new_start_pos - vs->start_pos; - av_strlcpy(vs->avf->filename, line, sizeof(line)); ret = hls_append_segment(s, hls, vs, vs->duration, vs->start_pos, vs->size); if (ret < 0) goto fail; @@ -1077,15 +1058,19 @@ static void hls_free_segments(HLSSegment *p) } } -static void hls_rename_temp_file(AVFormatContext *s, AVFormatContext *oc) +static int hls_rename_temp_file(AVFormatContext *s, AVFormatContext *oc) { - size_t len = strlen(oc->filename); - char final_filename[sizeof(oc->filename)]; + size_t len = strlen(oc->url); + char *final_filename = av_strdup(oc->url); + int ret; - av_strlcpy(final_filename, oc->filename, len); + if (!final_filename) + return AVERROR(ENOMEM); final_filename[len-4] = '\0'; - ff_rename(oc->filename, final_filename, s); - oc->filename[len-4] = '\0'; + ret = ff_rename(oc->url, final_filename, s); + oc->url[len-4] = '\0'; + av_freep(&final_filename); + return ret; } static int get_relative_url(const char *master_url, const char *media_url, @@ -1247,7 +1232,7 @@ static int hls_window(AVFormatContext *s, int last, VariantStream *vs) int ret = 0; char temp_filename[1024]; int64_t sequence = FFMAX(hls->start_sequence, vs->sequence - vs->nb_entries); - const char *proto = avio_find_protocol_name(s->filename); + const char *proto = avio_find_protocol_name(s->url); int use_rename = proto && !strcmp(proto, "file"); static unsigned warned_non_file; char *key_uri = NULL; @@ -1366,13 +1351,18 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) int err = 0; if (c->flags & HLS_SINGLE_FILE) { - av_strlcpy(oc->filename, vs->basename, - sizeof(oc->filename)); - if (vs->vtt_basename) - av_strlcpy(vtt_oc->filename, vs->vtt_basename, - sizeof(vtt_oc->filename)); + char *new_name = av_strdup(vs->basename); + if (!new_name) + return AVERROR(ENOMEM); + ff_format_set_url(oc, new_name); + if (vs->vtt_basename) { + new_name = av_strdup(vs->vtt_basename); + if (!new_name) + return AVERROR(ENOMEM); + ff_format_set_url(vtt_oc, new_name); + } } else if (c->max_seg_size > 0) { - if (replace_int_data_in_filename(oc->filename, sizeof(oc->filename), + if (replace_int_data_in_filename(oc, #if FF_API_HLS_WRAP vs->basename, 'd', c->wrap ? vs->sequence % c->wrap : vs->sequence) < 1) { #else @@ -1385,9 +1375,14 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) if (c->use_localtime) { time_t now0; struct tm *tm, tmpbuf; + int bufsize = strlen(vs->basename) + 1024; + char *buf = av_mallocz(bufsize); + if (!buf) + return AVERROR(ENOMEM); time(&now0); tm = localtime_r(&now0, &tmpbuf); - if (!strftime(oc->filename, sizeof(oc->filename), vs->basename, tm)) { + ff_format_set_url(oc, buf); + if (!strftime(oc->url, bufsize, vs->basename, tm)) { av_log(oc, AV_LOG_ERROR, "Could not get segment filename with use_localtime\n"); return AVERROR(EINVAL); } @@ -1399,7 +1394,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) if (c->use_localtime_mkdir) { const char *dir; - char *fn_copy = av_strdup(oc->filename); + char *fn_copy = av_strdup(oc->url); if (!fn_copy) { return AVERROR(ENOMEM); } @@ -1411,7 +1406,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) } av_free(fn_copy); } - } else if (replace_int_data_in_filename(oc->filename, sizeof(oc->filename), + } else if (replace_int_data_in_filename(oc, #if FF_API_HLS_WRAP vs->basename, 'd', c->wrap ? vs->sequence % c->wrap : vs->sequence) < 1) { #else @@ -1421,7 +1416,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) return AVERROR(EINVAL); } if( vs->vtt_basename) { - if (replace_int_data_in_filename(vtt_oc->filename, sizeof(vtt_oc->filename), + if (replace_int_data_in_filename(vtt_oc, #if FF_API_HLS_WRAP vs->vtt_basename, 'd', c->wrap ? vs->sequence % c->wrap : vs->sequence) < 1) { #else @@ -1437,7 +1432,10 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) set_http_options(s, &options, c); if (c->flags & HLS_TEMP_FILE) { - av_strlcat(oc->filename, ".tmp", sizeof(oc->filename)); + char *new_name = av_asprintf("%s.tmp", oc->url); + if (!new_name) + return AVERROR(ENOMEM); + ff_format_set_url(oc, new_name); } if (c->key_info_file || c->encrypt) { @@ -1465,7 +1463,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) if ((err = av_dict_set(&options, "encryption_iv", iv_string, 0)) < 0) goto fail; - filename = av_asprintf("crypto:%s", oc->filename); + filename = av_asprintf("crypto:%s", oc->url); if (!filename) { err = AVERROR(ENOMEM); goto fail; @@ -1476,12 +1474,12 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) if (err < 0) return err; } else if (c->segment_type != SEGMENT_TYPE_FMP4) { - if ((err = hlsenc_io_open(s, &oc->pb, oc->filename, &options)) < 0) + if ((err = hlsenc_io_open(s, &oc->pb, oc->url, &options)) < 0) goto fail; } if (vs->vtt_basename) { set_http_options(s, &options, c); - if ((err = hlsenc_io_open(s, &vtt_oc->pb, vtt_oc->filename, &options)) < 0) + if ((err = hlsenc_io_open(s, &vtt_oc->pb, vtt_oc->url, &options)) < 0) goto fail; } av_dict_free(&options); @@ -1692,14 +1690,14 @@ static int update_master_pl_info(AVFormatContext *s) { int m3u8_name_size, ret; char *p; - m3u8_name_size = strlen(s->filename) + strlen(hls->master_pl_name) + 1; + m3u8_name_size = strlen(s->url) + strlen(hls->master_pl_name) + 1; hls->master_m3u8_url = av_malloc(m3u8_name_size); if (!hls->master_m3u8_url) { ret = AVERROR(ENOMEM); return ret; } - av_strlcpy(hls->master_m3u8_url, s->filename, m3u8_name_size); + av_strlcpy(hls->master_m3u8_url, s->url, m3u8_name_size); p = strrchr(hls->master_m3u8_url, '/') ? strrchr(hls->master_m3u8_url, '/') : strrchr(hls->master_m3u8_url, '\\'); @@ -1844,7 +1842,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (vs->packets_written && can_split && av_compare_ts(pkt->pts - vs->start_pts, st->time_base, end_pts, AV_TIME_BASE_Q) >= 0) { int64_t new_start_pos; - char *old_filename = av_strdup(vs->avf->filename); + char *old_filename = av_strdup(vs->avf->url); int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0); if (!old_filename) { @@ -1869,13 +1867,13 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) hlsenc_io_close(s, &vs->out, vs->base_output_dirname); } } else { - hlsenc_io_close(s, &oc->pb, oc->filename); + hlsenc_io_close(s, &oc->pb, oc->url); } if (vs->vtt_avf) { - hlsenc_io_close(s, &vs->vtt_avf->pb, vs->vtt_avf->filename); + hlsenc_io_close(s, &vs->vtt_avf->pb, vs->vtt_avf->url); } } - if ((hls->flags & HLS_TEMP_FILE) && oc->filename[0]) { + if ((hls->flags & HLS_TEMP_FILE) && oc->url[0]) { if (!(hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size <= 0)) if ((vs->avf->oformat->priv_class && vs->avf->priv_data) && hls->segment_type != SEGMENT_TYPE_FMP4) av_opt_set(vs->avf->priv_data, "mpegts_flags", "resend_headers", 0); @@ -1887,10 +1885,10 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) } if (hls->segment_type == SEGMENT_TYPE_FMP4) { - ret = hlsenc_io_open(s, &vs->out, vs->avf->filename, NULL); + ret = hlsenc_io_open(s, &vs->out, vs->avf->url, NULL); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Failed to open file '%s'\n", - vs->avf->filename); + vs->avf->url); av_free(old_filename); return ret; } @@ -1963,16 +1961,16 @@ static int hls_write_trailer(struct AVFormatContext *s) oc = vs->avf; vtt_oc = vs->vtt_avf; - old_filename = av_strdup(vs->avf->filename); + old_filename = av_strdup(vs->avf->url); if (!old_filename) { return AVERROR(ENOMEM); } if ( hls->segment_type == SEGMENT_TYPE_FMP4) { int range_length = 0; - ret = hlsenc_io_open(s, &vs->out, vs->avf->filename, NULL); + ret = hlsenc_io_open(s, &vs->out, vs->avf->url, NULL); if (ret < 0) { - av_log(NULL, AV_LOG_ERROR, "Failed to open file '%s'\n", vs->avf->filename); + av_log(NULL, AV_LOG_ERROR, "Failed to open file '%s'\n", vs->avf->url); goto failed; } write_styp(vs->out); @@ -1990,7 +1988,7 @@ failed: if (hls->segment_type != SEGMENT_TYPE_FMP4) ff_format_io_close(s, &oc->pb); - if ((hls->flags & HLS_TEMP_FILE) && oc->filename[0]) { + if ((hls->flags & HLS_TEMP_FILE) && oc->url[0]) { hls_rename_temp_file(s, oc); } @@ -2171,9 +2169,9 @@ static int hls_init(AVFormatContext *s) } if (hls->use_localtime) { - basename_size = strlen(s->filename) + strlen(pattern_localtime_fmt) + 1; + basename_size = strlen(s->url) + strlen(pattern_localtime_fmt) + 1; } else { - basename_size = strlen(s->filename) + strlen(pattern) + 1; + basename_size = strlen(s->url) + strlen(pattern) + 1; } if (hls->nb_varstreams > 1) { @@ -2186,7 +2184,7 @@ static int hls_init(AVFormatContext *s) goto fail; } - av_strlcpy(vs->basename, s->filename, basename_size); + av_strlcpy(vs->basename, s->url, basename_size); p = strrchr(vs->basename, '.'); if (p) @@ -2198,7 +2196,7 @@ static int hls_init(AVFormatContext *s) } } - m3u8_name_size = strlen(s->filename) + 1; + m3u8_name_size = strlen(s->url) + 1; if (hls->nb_varstreams > 1) { m3u8_name_size += strlen(POSTFIX_PATTERN); } @@ -2209,7 +2207,7 @@ static int hls_init(AVFormatContext *s) goto fail; } - av_strlcpy(vs->m3u8_name, s->filename, m3u8_name_size); + av_strlcpy(vs->m3u8_name, s->url, m3u8_name_size); if (hls->nb_varstreams > 1) { ret = format_name(vs->basename, basename_size, i); @@ -2284,7 +2282,7 @@ static int hls_init(AVFormatContext *s) if (hls->flags & HLS_SINGLE_FILE) vtt_pattern = ".vtt"; - vtt_basename_size = strlen(s->filename) + strlen(vtt_pattern) + 1; + vtt_basename_size = strlen(s->url) + strlen(vtt_pattern) + 1; if (hls->nb_varstreams > 1) { vtt_basename_size += strlen(POSTFIX_PATTERN); } @@ -2299,7 +2297,7 @@ static int hls_init(AVFormatContext *s) ret = AVERROR(ENOMEM); goto fail; } - av_strlcpy(vs->vtt_basename, s->filename, vtt_basename_size); + av_strlcpy(vs->vtt_basename, s->url, vtt_basename_size); p = strrchr(vs->vtt_basename, '.'); if (p) *p = '\0';