summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorEdward Hervey <edward@centricular.com>2020-08-27 11:23:01 +0200
committerTim-Philipp Müller <tim@centricular.com>2020-10-03 00:51:29 +0100
commit2ff610be8c0d3a87fe0d49824698ee165a6a6105 (patch)
treefb2dc4fee73abb202326475ba3ce9a0fec860a4c /gst-libs
parent345a17c0b691aa6cbac47f8f3678be72b5481142 (diff)
downloadgstreamer-plugins-bad-2ff610be8c0d3a87fe0d49824698ee165a6a6105.tar.gz
adaptivedemux: Add another nominal bitrate fallback calculation
Some HTTP servers don't provide fragment sizes (with the Content-Length HTTP header). In order to still figure out a nominal bitrate (for usage by queue2), calculate on when we're done downloading a fragment. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1635>
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/adaptivedemux/gstadaptivedemux.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
index 0af6481d6..8149a2ae7 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
@@ -2769,6 +2769,21 @@ gst_adaptive_demux_eos_handling (GstAdaptiveDemuxStream * stream)
|| !klass->need_another_chunk (stream)
|| stream->fragment.chunk_size == 0) {
stream->fragment.finished = TRUE;
+
+ /* Last chance to figure out a fallback nominal bitrate if neither baseclass
+ nor the HTTP Content-Length implementation worked. */
+ if (stream->fragment.bitrate == 0 && stream->fragment.duration != 0 &&
+ stream->fragment_bytes_downloaded != 0) {
+ guint bitrate = MIN (G_MAXUINT,
+ gst_util_uint64_scale (stream->fragment_bytes_downloaded,
+ 8 * GST_SECOND, stream->fragment.duration));
+ GST_LOG_OBJECT (stream->pad,
+ "Fragment has size %" G_GUINT64_FORMAT " duration %" GST_TIME_FORMAT
+ " = bitrate %u", stream->fragment_bytes_downloaded,
+ GST_TIME_ARGS (stream->fragment.duration), bitrate);
+ stream->fragment.bitrate = bitrate;
+ stream->bitrate_changed = TRUE;
+ }
ret = klass->finish_fragment (stream->demux, stream);
}
gst_adaptive_demux_stream_fragment_download_finish (stream, ret, NULL);