diff options
author | James Almer <jamrial@gmail.com> | 2020-02-18 01:14:15 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2020-02-22 23:19:07 -0300 |
commit | 7098989e708396c542a5d10176e96c56e8b704b6 (patch) | |
tree | 1d023c04906aaa2642efacc397136835fa24999c /libavformat/dashenc.c | |
parent | a0faf0db4f9f85ce2b8e00660c4fd884a347ca19 (diff) | |
download | ffmpeg-7098989e708396c542a5d10176e96c56e8b704b6.tar.gz |
avformat/dashenc: write the styp box when the first frame of a segment is ready
This ensures it's written at the beginning of a segment in non streaming mode
when segment duration differs from fragment duration.
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat/dashenc.c')
-rw-r--r-- | libavformat/dashenc.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index c89aa3a32c..5c1d24d3e2 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -1911,12 +1911,8 @@ static int dash_flush(AVFormatContext *s, int final, int stream) continue; } - if (!c->single_file) { - if (os->segment_type == SEGMENT_TYPE_MP4 && !os->written_len) - write_styp(os->ctx->pb); - } else { + if (c->single_file) snprintf(os->full_path, sizeof(os->full_path), "%s%s", c->dirname, os->initfile); - } ret = flush_dynbuf(c, os, &range_length); if (ret < 0) @@ -2188,6 +2184,8 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) AVDictionary *opts = NULL; const char *proto = avio_find_protocol_name(s->url); int use_rename = proto && !strcmp(proto, "file"); + if (os->segment_type == SEGMENT_TYPE_MP4) + write_styp(os->ctx->pb); os->filename[0] = os->full_path[0] = os->temp_path[0] = '\0'; ff_dash_fill_tmpl_params(os->filename, sizeof(os->filename), os->media_seg_name, pkt->stream_index, @@ -2212,8 +2210,6 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) if (c->streaming && os->segment_type == SEGMENT_TYPE_MP4) { int len = 0; uint8_t *buf = NULL; - if (!os->written_len) - write_styp(os->ctx->pb); avio_flush(os->ctx->pb); len = avio_get_dyn_buf (os->ctx->pb, &buf); if (os->out) { |