> missing commit mesage / not a proper git patch ... > this looks unrelated, unrelated changes need to be in separate patches > > please explain in the commit messages of the patch(es) what each > patch does, why it does it and if you have at hand any reference to > specs feel free to include them > > floats make the binary output code platform dependant, theres no > need to use floats here
Thanks for the positive comments Michael. 0001-libavformat-dashenc.c-fix-validation-manifest.mpd.patch 1. If the MPD is dynamic the Period element shall have an id. 2. Attribute ‘bandwidth’ must appear on element ‘Representation’ 3. Attribute [profiles,width,height,sar,frameRate,audioSamplingRate,mimeType,segmentProfiles,codecs,maximumSAPPeriod,startWithSAP,maxPlayoutRate,codingDependency,scanType] Common attributes for AdaptationSet and Representation shall either be in one of the elements but not in both. the tests were conducted on http://www-itec.uni-klu.ac.at/dash/?page_id=605 0002-libavformat-dashenc.c-calculation-bandwidth-for-mani.patch When stream encoding is not counted bandwidth which makes it impossible to properly switch to the desired stream. Use float I removed. Now the calculation accuracy decreased to kilobits. Is it possible to supply test division by 0 ? 0003-libavformat-dashenc.c-change-moveflags-works-better.patch Replaced flags movflags. These flags input rtsp stream looked better.
>From 9ae9406222bdf21ae8ba28d7e21cb4ab709dfde0 Mon Sep 17 00:00:00 2001 From: ligverd <[email protected]> Date: Fri, 9 Sep 2016 10:35:18 +0300 Subject: [PATCH 1/3] libavformat/dashenc.c fix validation manifest.mpd --- libavformat/dashenc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 519f9c4..779ea59 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -498,17 +498,15 @@ static int write_manifest(AVFormatContext *s, int final) OutputStream *os = &c->streams[0]; int start_index = FFMAX(os->nb_segments - c->window_size, 0); int64_t start_time = av_rescale_q(os->segments[start_index]->time, s->streams[0]->time_base, AV_TIME_BASE_Q); - avio_printf(out, "\t<Period start=\""); + avio_printf(out, "\t<Period%s start=\"",final?"":" id=\"0\""); write_time(out, start_time); avio_printf(out, "\">\n"); } else { - avio_printf(out, "\t<Period start=\"PT0.0S\">\n"); + avio_printf(out, "\t<Period%s start=\"PT0.0S\">\n",final?"":" id=\"0\""); } if (c->has_video) { avio_printf(out, "\t\t<AdaptationSet contentType=\"video\" segmentAlignment=\"true\" bitstreamSwitching=\"true\""); - if (c->max_frame_rate.num && !c->ambiguous_frame_rate) - avio_printf(out, " %s=\"%d/%d\"", (av_cmp_q(c->min_frame_rate, c->max_frame_rate) < 0) ? "maxFrameRate" : "frameRate", c->max_frame_rate.num, c->max_frame_rate.den); avio_printf(out, ">\n"); for (i = 0; i < s->nb_streams; i++) { @@ -603,6 +601,8 @@ static int dash_write_header(AVFormatContext *s) snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), " bandwidth=\"%d\"", os->bit_rate); } else { + snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), + " bandwidth=\"%d\"", 0); int level = s->strict_std_compliance >= FF_COMPLIANCE_STRICT ? AV_LOG_ERROR : AV_LOG_WARNING; av_log(s, level, "No bit rate set for stream %d\n", i); -- 2.6.3
>From 5aaf033232dd473357a64475d663eba762422d10 Mon Sep 17 00:00:00 2001 From: ligverd <[email protected]> Date: Fri, 9 Sep 2016 10:48:08 +0300 Subject: [PATCH 2/3] libavformat/dashenc.c calculation bandwidth for manifest --- libavformat/dashenc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 779ea59..d61aa90 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -596,7 +596,7 @@ static int dash_write_header(AVFormatContext *s) AVDictionary *opts = NULL; char filename[1024]; - os->bit_rate = s->streams[i]->codecpar->bit_rate; + os->bit_rate = s->streams[i]->codecpar->bit_rate ? s->streams[i]->codecpar->bit_rate : s->bit_rate; if (os->bit_rate) { snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), " bandwidth=\"%d\"", os->bit_rate); @@ -858,6 +858,9 @@ static int dash_flush(AVFormatContext *s, int final, int stream) if (ret < 0) break; } + os->bit_rate = ( (range_length * 8 * 10) / (os->max_pts - os->start_pts) ) / 10000; + snprintf(os->bandwidth_str, sizeof(os->bandwidth_str)," bandwidth=\"%i\"", os->bit_rate); + add_segment(os, filename, os->start_pts, os->max_pts - os->start_pts, start_pos, range_length, index_length); av_log(s, AV_LOG_VERBOSE, "Representation %d media segment %d written to: %s\n", i, os->segment_index, full_path); } -- 2.6.3
>From 8dc233c503d954f344933b81d4ae1d6cef584675 Mon Sep 17 00:00:00 2001 From: ligverd <[email protected]> Date: Fri, 9 Sep 2016 10:49:28 +0300 Subject: [PATCH 3/3] libavformat/dashenc.c change moveflags, works better --- libavformat/dashenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index d61aa90..3ce5583 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -654,7 +654,7 @@ static int dash_write_header(AVFormatContext *s) goto fail; os->init_start_pos = 0; - av_dict_set(&opts, "movflags", "frag_custom+dash+delay_moov", 0); + av_dict_set(&opts, "movflags", "dash+frag_keyframe+empty_moov+separate_moof+delay_moov", 0); if ((ret = avformat_write_header(ctx, &opts)) < 0) { goto fail; } -- 2.6.3
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
