From 5c08ae4f37281441188447cd04dcaf7cd7ce031f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Ariz=C3=B3n=20Benito?= Date: Tue, 18 Mar 2014 21:18:59 +0100 Subject: [PATCH] segment: Add an option to prepend a string to the list entries Useful to generate lists with absolute urls. Signed-off-by: Luca Barbato --- doc/muxers.texi | 2 ++ libavformat/segment.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/doc/muxers.texi b/doc/muxers.texi index 143e595056..09ce4b9f1f 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -480,6 +480,8 @@ Set segment duration to @var{t} seconds. Generate also a listfile named @var{name}. @item segment_list_size @var{size} Overwrite the listfile once it reaches @var{size} entries. +@item segment_list_entry_prefix @var{prefix} +Prepend @var{prefix} to each entry. Useful to generate absolute paths. @item segment_wrap @var{limit} Wrap around segment index once it reaches @var{limit}. @end table diff --git a/libavformat/segment.c b/libavformat/segment.c index d79a32798e..390263cdd2 100644 --- a/libavformat/segment.c +++ b/libavformat/segment.c @@ -37,6 +37,7 @@ typedef struct { AVFormatContext *avf; char *format; /**< Set by a private option. */ char *list; /**< Set by a private option. */ + char *entry_prefix; /**< Set by a private option. */ int list_type; /**< Set by a private option. */ float time; /**< Set by a private option. */ int size; /**< Set by a private option. */ @@ -97,6 +98,9 @@ static int segment_hls_window(AVFormatContext *s, int last) for (i = FFMAX(0, seg->number - seg->size); i < seg->number; i++) { avio_printf(seg->pb, "#EXTINF:%d,\n", (int)seg->time); + if (seg->entry_prefix != NULL) { + avio_printf(seg->pb, "%s", seg->entry_prefix); + } av_get_frame_filename(buf, sizeof(buf), s->filename, i); avio_printf(seg->pb, "%s\n", buf); } @@ -363,6 +367,7 @@ static const AVOption options[] = { { "flat", "plain list (default)", 0, AV_OPT_TYPE_CONST, {.i64 = LIST_FLAT}, 0, 0, E, "list_type" }, { "hls", "Apple HTTP Live Streaming compatible", 0, AV_OPT_TYPE_CONST, {.i64 = LIST_HLS}, 0, 0, E, "list_type" }, { "segment_wrap", "number after which the index wraps", OFFSET(wrap), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E }, + { "segment_list_entry_prefix", "base url prefix for segments", OFFSET(entry_prefix), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E }, { "individual_header_trailer", "write header/trailer to each segment", OFFSET(individual_header_trailer), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E }, { "write_header_trailer", "write a header to the first segment and a trailer to the last one", OFFSET(write_header_trailer), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E }, { NULL },