Bandwidth information is required in the manifest, but not always
provided by the demuxer. In that case calculate the bandwith based
on the size and duration of the first segment.

Signed-off-by: Peter Große <[email protected]>
---
v2: reword commit message
---
 libavformat/dashenc.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
index 98722cd..ae1bb0b 100644
--- a/libavformat/dashenc.c
+++ b/libavformat/dashenc.c
@@ -834,6 +834,16 @@ static int dash_flush(AVFormatContext *s, int final, int 
stream)
             if (ret < 0)
                 break;
         }
+
+        if (!os->bit_rate) {
+            // calculate average bitrate of first segment
+            double bitrate = (int)( (double) range_length * 8.0 * AV_TIME_BASE 
/ (double)(os->max_pts - os->start_pts) );
+            if (bitrate >= 0 && bitrate <= INT64_MAX) {
+                os->bit_rate = bitrate;
+                snprintf(os->bandwidth_str, sizeof(os->bandwidth_str),
+                     " bandwidth=\"%d\"", 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.10.2

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to