When using a SegmentTemplate element, the timestamps of the buffers
output by dashdemux are incorrect, causing problems downstream.
The reason is that GstMediaSegment start times are calculated (in
gst_mpdparser_get_chunk_by_index) by multiplying segment index by
segment duration and then scaling the result according the `timebase'
attribute from the MPD. However, the segment duration is already a
GstClockTime (i.e., it has already been scaled according to the timebase
from the MPD and converted to a nanosecond value), so multiplying it by
the segment index will give the correct timestamp without the need for
any further scaling.
https://bugzilla.gnome.org/show_bug.cgi?id=705679
segment->duration = list_segment->duration;
} else {
GstClockTime duration;
- guint timescale =
- stream->cur_seg_template->MultSegBaseType->SegBaseType->timescale;
g_return_val_if_fail (stream->cur_seg_template->MultSegBaseType->
SegmentTimeline == NULL, FALSE);
/* segment template generator */
segment->number = indexChunk;
segment->start_time = duration * indexChunk;
- segment->start_time = segment->start_time * timescale / GST_SECOND;
segment->duration = duration;
segment->SegmentURL = NULL;
}