From patchwork Wed Jun 10 11:14:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Przemys=C5=82aw_Sobala?= X-Patchwork-Id: 20261 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 1EC22448C8C for ; Wed, 10 Jun 2020 14:15:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E588268B0A4; Wed, 10 Jun 2020 14:15:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 296FD6899EA for ; Wed, 10 Jun 2020 14:15:52 +0300 (EEST) Received: by mail-ej1-f41.google.com with SMTP id dr13so2118279ejc.3 for ; Wed, 10 Jun 2020 04:15:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YtVgTLHwPMuFzdpQIjAqpqtSBW7Qy74rUFZ12AfD/FE=; b=c+KO63n8zJMyD/3xYBUlbvPWji+vR4mCFZn04byRNs03ixPpJkRKMxBQBNNDH0PCft 9BUq+ivmbNopofb44WKdqxtQse6ty8krYcRGyciDd425dTUZCq45Mkr1xLOfw/RO9nZf msTnbHmluokzsz11K9XdGjT045hRyKfd5u7Pbjqhn+x6W8K25P7pz02qFUi7nQedxHIP EUX5tnOBrBEwaZ7LiDkql6rAtG8BAMmaMN1OJTwkKvU/zrU3mLrKe6/E8zxefedONEyW l16XGAtGTBbyHQC5aXtO+9EQqoN8ZFb6ALEmdhhnF23ugQb3N1DgpvRcdmVl6+YoW9eq PSlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YtVgTLHwPMuFzdpQIjAqpqtSBW7Qy74rUFZ12AfD/FE=; b=ZRXvqQjV/0YARFcgtBizrbDfzPhunNEhzz/u2TnqUeJubLCLkEIiWn5jHtUuqTCQjo DyLK63BCBut26SEfIuHWlNrLhb22I8RXuP7f8m3q75q2UyfVnNSnhSZZnpu8ozFvfozq +ce0BDPjGcwzT7uCspQPkAsO3l02/Zh7/dqyZPetQJ2hx31ukLmzGHk6PAVAaxSC/CML wyvY9Ae6R7dZK5z6TpabVfEUkN0QWNmYfNh9ChNOOCQwfbLST48Np9kxAAYlUDecj5A0 tX06jj2XqXc6agLjT1RO5s0EB5X8DAheGU4Lip1oi3YG4doH6dAR6+b+DRdjb3FvWhSJ 0xWA== X-Gm-Message-State: AOAM530ddg5Cs4s8OUWui9c2EcRCzt/pjpi4jUrv/b714CSo0bJ4Pz08 9vWZOkjLDzpnnWI/njP4S+QKNFCq X-Google-Smtp-Source: ABdhPJyxdndBWPVdzZbtMJCx/x6hD8AU161QHbKkp5Y8+iETs5h4I0Mh//9q5OOnfKgB2rFBBrjeQQ== X-Received: by 2002:a17:906:fcb7:: with SMTP id qw23mr2654366ejb.229.1591787750953; Wed, 10 Jun 2020 04:15:50 -0700 (PDT) Received: from pszemus-legion.localdomain (83.8.242.137.ipv4.supernova.orange.pl. [83.8.242.137]) by smtp.gmail.com with ESMTPSA id ce25sm10488987edb.45.2020.06.10.04.15.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2020 04:15:50 -0700 (PDT) From: =?utf-8?q?Przemys=C5=82aw_Sobala?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 10 Jun 2020 13:14:36 +0200 Message-Id: <20200610111436.30043-1-przemyslaw.sobala@gmail.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/dashenc: Add hls_master_name option 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: =?utf-8?q?Przemys=C5=82aw_Sobala?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- doc/muxers.texi | 4 +++- libavformat/dashenc.c | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index d6f9de3702..b1389a3227 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -267,8 +267,10 @@ Override User-Agent field in HTTP header. Applicable only for HTTP output. @item http_persistent @var{http_persistent} Use persistent HTTP connections. Applicable only for HTTP output. @item hls_playlist @var{hls_playlist} -Generate HLS playlist files as well. The master playlist is generated with the filename master.m3u8. +Generate HLS playlist files as well. The master playlist is generated with the filename @var{hls_master_name}. One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc. +@item hls_master_name @var{file_name} +HLS master playlist name. Default is "master.m3u8". @item streaming @var{streaming} Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming mode, each frame will be a moof fragment which forms a chunk. diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 00a37b175d..3e587acdff 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -171,6 +171,7 @@ typedef struct DASHContext { const char *user_agent; AVDictionary *http_opts; int hls_playlist; + const char *hls_master_name; int http_persistent; int master_playlist_created; AVIOContext *mpd_out; @@ -1261,9 +1262,9 @@ static int write_manifest(AVFormatContext *s, int final) return 0; if (*c->dirname) - snprintf(filename_hls, sizeof(filename_hls), "%smaster.m3u8", c->dirname); + snprintf(filename_hls, sizeof(filename_hls), "%s%s", c->dirname, c->hls_master_name); else - snprintf(filename_hls, sizeof(filename_hls), "master.m3u8"); + snprintf(filename_hls, sizeof(filename_hls), "%s", c->hls_master_name); snprintf(temp_filename, sizeof(temp_filename), use_rename ? "%s.tmp" : "%s", filename_hls); @@ -2292,7 +2293,7 @@ static int dash_write_trailer(AVFormatContext *s) if (c->hls_playlist && c->master_playlist_created) { char filename[1024]; - snprintf(filename, sizeof(filename), "%smaster.m3u8", c->dirname); + snprintf(filename, sizeof(filename), "%s%s", c->dirname, c->hls_master_name); dashenc_delete_file(s, filename); } } @@ -2349,6 +2350,7 @@ static const AVOption options[] = { { "http_user_agent", "override User-Agent field in HTTP header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E}, { "http_persistent", "Use persistent HTTP connections", OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E }, { "hls_playlist", "Generate HLS playlist files(master.m3u8, media_%d.m3u8)", OFFSET(hls_playlist), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E }, + { "hls_master_name", "HLS master playlist name", OFFSET(hls_master_name), AV_OPT_TYPE_STRING, {.str = "master.m3u8"}, 0, 0, E }, { "streaming", "Enable/Disable streaming mode of output. Each frame will be moof fragment", OFFSET(streaming), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E }, { "timeout", "set timeout for socket I/O operations", OFFSET(timeout), AV_OPT_TYPE_DURATION, { .i64 = -1 }, -1, INT_MAX, .flags = E }, { "index_correction", "Enable/Disable segment index correction logic", OFFSET(index_correction), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E },