hlsdemux: m3u8: add support to get the duration from a playlist

This commit is contained in:
Andoni Morales Alastruey 2011-03-12 12:20:32 +01:00 committed by Sebastian Dröge
parent c599e4a9a1
commit 09b2b31422
2 changed files with 22 additions and 0 deletions

View file

@ -450,3 +450,24 @@ gst_m3u8_client_get_next_fragment (GstM3U8Client * client,
return file->uri;
}
static void
_sum_duration (GstM3U8MediaFile * self, GstClockTime * duration)
{
*duration += self->duration;
}
GstClockTime
gst_m3u8_client_get_duration (GstM3U8Client * client)
{
GstClockTime duration = 0;
g_return_val_if_fail (client != NULL, GST_CLOCK_TIME_NONE);
/* We can only get the duration for on-demand streams */
if (!client->current->endlist)
return GST_CLOCK_TIME_NONE;
g_list_foreach (client->current->files, (GFunc) _sum_duration, &duration);
return duration;
}

View file

@ -77,6 +77,7 @@ gboolean gst_m3u8_client_update (GstM3U8Client * client, gchar * data);
void gst_m3u8_client_set_current (GstM3U8Client * client, GstM3U8 * m3u8);
const gchar *gst_m3u8_client_get_next_fragment (GstM3U8Client * client,
gboolean * discontinuity);
GstClockTime gst_m3u8_client_get_duration (GstM3U8Client * client);
#define gst_m3u8_client_get_uri(Client) ((Client)->main->uri)
#define gst_m3u8_client_has_variant_playlist(Client) ((Client)->main->lists)
#define gst_m3u8_client_is_live(Client) (!(Client)->main->lists && !(Client)->current->endlist)