> 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 <ligv...@r46.ru>
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 <ligv...@r46.ru>
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 <ligv...@r46.ru>
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
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to