|
|
@@ -59,6 +59,7 @@ typedef struct OutputStream { |
|
|
|
int nb_segments, segments_size, segment_index; |
|
|
|
Segment **segments; |
|
|
|
int64_t first_dts, start_dts, end_dts; |
|
|
|
char bandwidth_str[64]; |
|
|
|
|
|
|
|
char codec_str[100]; |
|
|
|
} OutputStream; |
|
|
@@ -368,7 +369,7 @@ static int write_manifest(AVFormatContext *s, int final) |
|
|
|
OutputStream *os = &c->streams[i]; |
|
|
|
if (s->streams[i]->codec->codec_type != AVMEDIA_TYPE_VIDEO) |
|
|
|
continue; |
|
|
|
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"video/mp4\" codecs=\"%s\" bandwidth=\"%d\" width=\"%d\" height=\"%d\">\n", i, os->codec_str, st->codec->bit_rate, st->codec->width, st->codec->height); |
|
|
|
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"video/mp4\" codecs=\"%s\"%s width=\"%d\" height=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codec->width, st->codec->height); |
|
|
|
output_segment_list(&c->streams[i], out, c); |
|
|
|
avio_printf(out, "\t\t\t</Representation>\n"); |
|
|
|
} |
|
|
@@ -381,7 +382,7 @@ static int write_manifest(AVFormatContext *s, int final) |
|
|
|
OutputStream *os = &c->streams[i]; |
|
|
|
if (s->streams[i]->codec->codec_type != AVMEDIA_TYPE_AUDIO) |
|
|
|
continue; |
|
|
|
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"audio/mp4\" codecs=\"%s\" bandwidth=\"%d\" audioSamplingRate=\"%d\">\n", i, os->codec_str, st->codec->bit_rate, st->codec->sample_rate); |
|
|
|
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"audio/mp4\" codecs=\"%s\"%s audioSamplingRate=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codec->sample_rate); |
|
|
|
avio_printf(out, "\t\t\t\t<AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"%d\" />\n", st->codec->channels); |
|
|
|
output_segment_list(&c->streams[i], out, c); |
|
|
|
avio_printf(out, "\t\t\t</Representation>\n"); |
|
|
@@ -439,10 +440,15 @@ static int dash_write_header(AVFormatContext *s) |
|
|
|
AVDictionary *opts = NULL; |
|
|
|
char filename[1024]; |
|
|
|
|
|
|
|
if (!s->streams[i]->codec->bit_rate) { |
|
|
|
av_log(s, AV_LOG_ERROR, "No bit rate set for stream %d\n", i); |
|
|
|
ret = AVERROR(EINVAL); |
|
|
|
goto fail; |
|
|
|
int bit_rate = s->streams[i]->codec->bit_rate ? |
|
|
|
s->streams[i]->codec->bit_rate : |
|
|
|
s->streams[i]->codec->rc_max_rate; |
|
|
|
if (bit_rate) { |
|
|
|
snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), |
|
|
|
" bandwidth=\"%i\"", bit_rate); |
|
|
|
} else { |
|
|
|
av_log(s, AV_LOG_WARNING, "No bit rate set for stream %d\n", i); |
|
|
|
os->bandwidth_str[0] = 0; |
|
|
|
} |
|
|
|
|
|
|
|
ctx = avformat_alloc_context(); |
|
|
|