mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-01 21:18:52 +00:00
hlsdemux: Always calculate the current download rate
Also take into account the last download rate when calculating it.
This commit is contained in:
parent
da601be78f
commit
7ddd67baef
2 changed files with 27 additions and 8 deletions
|
@ -935,6 +935,8 @@ gst_hls_demux_reset (GstHLSDemux * demux, gboolean dispose)
|
||||||
gst_element_remove_pad (GST_ELEMENT_CAST (demux), demux->srcpad);
|
gst_element_remove_pad (GST_ELEMENT_CAST (demux), demux->srcpad);
|
||||||
demux->srcpad = NULL;
|
demux->srcpad = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
demux->current_download_rate = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -1227,15 +1229,11 @@ gst_hls_demux_switch_playlist (GstHLSDemux * demux, GstFragment * fragment)
|
||||||
{
|
{
|
||||||
GstClockTime diff;
|
GstClockTime diff;
|
||||||
gsize size;
|
gsize size;
|
||||||
gint bitrate;
|
gint64 bitrate;
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
|
|
||||||
GST_M3U8_CLIENT_LOCK (demux->client);
|
if (!fragment)
|
||||||
if (!demux->client->main->lists || !fragment) {
|
|
||||||
GST_M3U8_CLIENT_UNLOCK (demux->client);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
GST_M3U8_CLIENT_UNLOCK (demux->client);
|
|
||||||
|
|
||||||
/* compare the time when the fragment was downloaded with the time when it was
|
/* compare the time when the fragment was downloaded with the time when it was
|
||||||
* scheduled */
|
* scheduled */
|
||||||
|
@ -1244,10 +1242,28 @@ gst_hls_demux_switch_playlist (GstHLSDemux * demux, GstFragment * fragment)
|
||||||
size = gst_buffer_get_size (buffer);
|
size = gst_buffer_get_size (buffer);
|
||||||
bitrate = (size * 8) / ((double) diff / GST_SECOND);
|
bitrate = (size * 8) / ((double) diff / GST_SECOND);
|
||||||
|
|
||||||
GST_DEBUG ("Downloaded %d bytes in %" GST_TIME_FORMAT ". Bitrate is : %d",
|
GST_DEBUG_OBJECT (demux,
|
||||||
(guint) size, GST_TIME_ARGS (diff), bitrate);
|
"Downloaded %d bytes in %" GST_TIME_FORMAT ". Bitrate is : %d",
|
||||||
|
(guint) size, GST_TIME_ARGS (diff), (gint) bitrate);
|
||||||
|
|
||||||
|
/* Take old rate into account too */
|
||||||
|
if (demux->current_download_rate != -1)
|
||||||
|
bitrate = (demux->current_download_rate + bitrate * 3) / 4;
|
||||||
|
if (bitrate > G_MAXINT)
|
||||||
|
bitrate = G_MAXINT;
|
||||||
|
demux->current_download_rate = bitrate;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (demux, "Using current download rate: %d", (gint) bitrate);
|
||||||
|
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
|
GST_M3U8_CLIENT_LOCK (demux->client);
|
||||||
|
if (!demux->client->main->lists) {
|
||||||
|
GST_M3U8_CLIENT_UNLOCK (demux->client);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
GST_M3U8_CLIENT_UNLOCK (demux->client);
|
||||||
|
|
||||||
return gst_hls_demux_change_playlist (demux, bitrate * demux->bitrate_limit);
|
return gst_hls_demux_change_playlist (demux, bitrate * demux->bitrate_limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,9 @@ struct _GstHLSDemux
|
||||||
/* Cache for the last key */
|
/* Cache for the last key */
|
||||||
gchar *key_url;
|
gchar *key_url;
|
||||||
GstFragment *key_fragment;
|
GstFragment *key_fragment;
|
||||||
|
|
||||||
|
/* Current download rate (bps) */
|
||||||
|
gint current_download_rate;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstHLSDemuxClass
|
struct _GstHLSDemuxClass
|
||||||
|
|
Loading…
Reference in a new issue