> On Nov 20, 2014, at 21:47, Rodger Combs <rodger.co...@gmail.com> wrote: > > >> On Nov 20, 2014, at 02:41, Benoit Fouet <benoit.fo...@free.fr >> <mailto:benoit.fo...@free.fr>> wrote: >> >> Hi, >> >> ----- Mail original ----- >>> From b38a1396e2335e2d0ef2619b5a3890f91c31c8a8 Mon Sep 17 00:00:00 >>> 2001 >>> From: Rodger Combs <rodger.co...@gmail.com <mailto:rodger.co...@gmail.com>> >>> Date: Thu, 20 Nov 2014 01:47:05 -0600 >>> Subject: [PATCH] dashenc: Add a segment_start_number option >>> >>> This defaults to 0 instead of 1 for consistency with the segment >>> encoder >>> --- >>> libavformat/dashenc.c | 6 ++++-- >>> 1 file changed, 4 insertions(+), 2 deletions(-) >>> >>> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c >>> index dac217e..5958270 100644 >>> --- a/libavformat/dashenc.c >>> +++ b/libavformat/dashenc.c >>> @@ -80,6 +80,7 @@ typedef struct DASHContext { >>> int total_duration; >>> char availability_start_time[100]; >>> char dirname[1024]; >>> + int segment_start_number; >>> } DASHContext; >>> >>> static int dash_write(void *opaque, uint8_t *buf, int buf_size) >>> @@ -182,7 +183,7 @@ static void dash_free(AVFormatContext *s) >>> >>> static void output_segment_list(OutputStream *os, AVIOContext *out, >>> DASHContext *c) >>> { >>> - int i, start_index = 0, start_number = 1; >>> + int i, start_index = 0, start_number = c->segment_start_number; >>> if (c->window_size) { >>> start_index = FFMAX(os->nb_segments - c->window_size, 0); >>> start_number = FFMAX(os->segment_index - c->window_size, 1); >>> @@ -512,7 +513,7 @@ static int dash_write_header(AVFormatContext *s) >>> >>> set_codec_str(s, os->ctx->streams[0]->codec, os->codec_str, >>> sizeof(os->codec_str)); >>> os->first_dts = AV_NOPTS_VALUE; >>> - os->segment_index = 1; >>> + os->segment_index = c->segment_start_number; >>> } >>> >>> if (!c->has_video && c->min_seg_duration <= 0) { >>> @@ -754,6 +755,7 @@ static const AVOption options[] = { >>> { "use_template", "Use SegmentTemplate instead of SegmentList", >>> OFFSET(use_template), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, >>> { "use_timeline", "Use SegmentTimeline in SegmentTemplate", >>> OFFSET(use_timeline), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, >>> { "single_file", "Store all segments in one file, accessed using >>> byte ranges", OFFSET(single_file), AV_OPT_TYPE_INT, { .i64 = 0 >>> }, 0, 1, E }, >>> + { "segment_start_number", "first segment number to write", >>> OFFSET(segment_start_number), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, >>> INT_MAX, E }, >>> >> >> Default should be 1, in order not to change the current behavior. >> >> -- >> Ben >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> <http://ffmpeg.org/mailman/listinfo/ffmpeg-devel> > Alright, here's a version with that. Also, adjusted to reflect the change > properly in the MPD. > > From ec2b7e5033acb25bb0310f12ea576a8185f4e396 Mon Sep 17 00:00:00 2001 > From: Rodger Combs <rodger.co...@gmail.com <mailto:rodger.co...@gmail.com>> > Date: Thu, 20 Nov 2014 01:47:05 -0600 > Subject: [PATCH] dashenc: Add a segment_start_number option > > --- > libavformat/dashenc.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c > index dac217e..5958270 100644 > --- a/libavformat/dashenc.c > +++ b/libavformat/dashenc.c > @@ -80,6 +80,7 @@ typedef struct DASHContext { > int total_duration; > char availability_start_time[100]; > char dirname[1024]; > + int segment_start_number; > } DASHContext; > > static int dash_write(void *opaque, uint8_t *buf, int buf_size) > @@ -182,7 +183,7 @@ static void dash_free(AVFormatContext *s) > > static void output_segment_list(OutputStream *os, AVIOContext *out, > DASHContext *c) > { > - int i, start_index = 0, start_number = 1; > + int i, start_index = 0, start_number = c->segment_start_number; > if (c->window_size) { > start_index = FFMAX(os->nb_segments - c->window_size, 0); > start_number = FFMAX(os->segment_index - c->window_size, 1); > @@ -512,7 +513,7 @@ static int dash_write_header(AVFormatContext *s) > > set_codec_str(s, os->ctx->streams[0]->codec, os->codec_str, > sizeof(os->codec_str)); > os->first_dts = AV_NOPTS_VALUE; > - os->segment_index = 1; > + os->segment_index = c->segment_start_number; > } > > if (!c->has_video && c->min_seg_duration <= 0) { > @@ -754,6 +755,7 @@ static const AVOption options[] = { > { "use_template", "Use SegmentTemplate instead of SegmentList", > OFFSET(use_template), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, > { "use_timeline", "Use SegmentTimeline in SegmentTemplate", > OFFSET(use_timeline), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, > { "single_file", "Store all segments in one file, accessed using byte > ranges", OFFSET(single_file), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, E }, > + { "segment_start_number", "first segment number to write", > OFFSET(segment_start_number), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, E }, > { NULL }, > }; > > -- > 1.9.1 > >
...in which I screw up and post the same patch. Here you go... >From f06aa763f3e3593d12cc16d8017e796c9e5db3b3 Mon Sep 17 00:00:00 2001 From: Rodger Combs <rodger.co...@gmail.com> Date: Thu, 20 Nov 2014 01:47:05 -0600 Subject: [PATCH] dashenc: Add a segment_start_number option --- libavformat/dashenc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index dac217e..549c7c3 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -80,6 +80,7 @@ typedef struct DASHContext { int total_duration; char availability_start_time[100]; char dirname[1024]; + int segment_start_number; } DASHContext; static int dash_write(void *opaque, uint8_t *buf, int buf_size) @@ -182,10 +183,10 @@ static void dash_free(AVFormatContext *s) static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext *c) { - int i, start_index = 0, start_number = 1; + int i, start_index = 0, start_number = c->segment_start_number; if (c->window_size) { start_index = FFMAX(os->nb_segments - c->window_size, 0); - start_number = FFMAX(os->segment_index - c->window_size, 1); + start_number = FFMAX(os->segment_index - c->window_size, c->segment_start_number); } if (c->use_template) { @@ -193,7 +194,7 @@ static void output_segment_list(OutputStream *os, AVIOContext *out, DASHContext avio_printf(out, "\t\t\t\t<SegmentTemplate timescale=\"%d\" ", timescale); if (!c->use_timeline) avio_printf(out, "duration=\"%d\" ", c->last_duration); - avio_printf(out, "initialization=\"init-stream$RepresentationID$.m4s\" media=\"chunk-stream$RepresentationID$-$Number%%05d$.m4s\" startNumber=\"%d\">\n", c->use_timeline ? start_number : 1); + avio_printf(out, "initialization=\"init-stream$RepresentationID$.m4s\" media=\"chunk-stream$RepresentationID$-$Number%%05d$.m4s\" startNumber=\"%d\">\n", start_number); if (c->use_timeline) { avio_printf(out, "\t\t\t\t\t<SegmentTimeline>\n"); for (i = start_index; i < os->nb_segments; ) { @@ -512,7 +513,7 @@ static int dash_write_header(AVFormatContext *s) set_codec_str(s, os->ctx->streams[0]->codec, os->codec_str, sizeof(os->codec_str)); os->first_dts = AV_NOPTS_VALUE; - os->segment_index = 1; + os->segment_index = c->segment_start_number; } if (!c->has_video && c->min_seg_duration <= 0) { @@ -754,6 +755,7 @@ static const AVOption options[] = { { "use_template", "Use SegmentTemplate instead of SegmentList", OFFSET(use_template), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, { "use_timeline", "Use SegmentTimeline in SegmentTemplate", OFFSET(use_timeline), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, E }, { "single_file", "Store all segments in one file, accessed using byte ranges", OFFSET(single_file), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, E }, + { "segment_start_number", "first segment number to write", OFFSET(segment_start_number), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, INT_MAX, E }, { NULL }, }; -- 1.9.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel