Commit 7098989e authored by James Almer's avatar James Almer

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: 's avatarJames Almer <jamrial@gmail.com>
parent a0faf0db
...@@ -1911,12 +1911,8 @@ static int dash_flush(AVFormatContext *s, int final, int stream) ...@@ -1911,12 +1911,8 @@ static int dash_flush(AVFormatContext *s, int final, int stream)
continue; continue;
} }
if (!c->single_file) { if (c->single_file)
if (os->segment_type == SEGMENT_TYPE_MP4 && !os->written_len)
write_styp(os->ctx->pb);
} else {
snprintf(os->full_path, sizeof(os->full_path), "%s%s", c->dirname, os->initfile); snprintf(os->full_path, sizeof(os->full_path), "%s%s", c->dirname, os->initfile);
}
ret = flush_dynbuf(c, os, &range_length); ret = flush_dynbuf(c, os, &range_length);
if (ret < 0) if (ret < 0)
...@@ -2188,6 +2184,8 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -2188,6 +2184,8 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt)
AVDictionary *opts = NULL; AVDictionary *opts = NULL;
const char *proto = avio_find_protocol_name(s->url); const char *proto = avio_find_protocol_name(s->url);
int use_rename = proto && !strcmp(proto, "file"); 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'; os->filename[0] = os->full_path[0] = os->temp_path[0] = '\0';
ff_dash_fill_tmpl_params(os->filename, sizeof(os->filename), ff_dash_fill_tmpl_params(os->filename, sizeof(os->filename),
os->media_seg_name, pkt->stream_index, os->media_seg_name, pkt->stream_index,
...@@ -2212,8 +2210,6 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -2212,8 +2210,6 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt)
if (c->streaming && os->segment_type == SEGMENT_TYPE_MP4) { if (c->streaming && os->segment_type == SEGMENT_TYPE_MP4) {
int len = 0; int len = 0;
uint8_t *buf = NULL; uint8_t *buf = NULL;
if (!os->written_len)
write_styp(os->ctx->pb);
avio_flush(os->ctx->pb); avio_flush(os->ctx->pb);
len = avio_get_dyn_buf (os->ctx->pb, &buf); len = avio_get_dyn_buf (os->ctx->pb, &buf);
if (os->out) { if (os->out) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment