Thiago Santos
4c89fab390
dash: save 1 or 2 string copies when getting fragment uris
...
Only create new string if required, saving maybe 1 or 2 str copies per
fragment.
2013-07-01 18:52:08 -03:00
Thiago Santos
aa1fe88a08
dashdemux: each fragment can have its own index
...
Return index URI/range to dashdemux from the mpdparser to be able
to download and deliver them downstream for playback.
2013-07-01 18:52:08 -03:00
Thiago Santos
d68fffc217
dashdemux: handle top-level index urls
...
Parse and provide access to top-level index segments if available.
dashdemux should push those whenever a header is pushed.
Fixes #700489
2013-07-01 18:52:08 -03:00
Arthur Shipkowski
54d87f071c
dashdemux: Fix critical error output when Initialization has no URL
...
Issue evinced by
http://yt-dash-mse-test.commondatastorage.googleapis.com/car-20120827-manifest.mpd
which produces output like ** (gst-launch-1.0:8060): CRITICAL **:
gst_mpdparser_get_initializationURL: assertion `InitializationURL->sourceURL
!= NULL' failed
https://bugzilla.gnome.org/show_bug.cgi?id=700489
2013-07-01 18:51:30 -03:00
Thiago Santos
d9c324c6c7
dashdemux: prevent crash by checking if the segment node is present
...
Do not try to access range data if there is no segment node
2013-07-01 14:35:02 -03:00
Thiago Santos
d0befd39f0
dash: use same debug category for dashdemux and the mpd parser
...
Makes debugging easier
2013-07-01 14:22:02 -03:00
Thiago Santos
4f17112392
dashdemux: add support for range based segments
...
Use the mediaRange information and pass it to the uridownloader
to correctly download only the segment ranges indicated in the
MPD
https://bugzilla.gnome.org/show_bug.cgi?id=702206
2013-07-01 14:22:01 -03:00
Greg Rutz
45111f2efe
dashdemux: Cleanup memory allocation/deallocation
...
Ensure that g_free/xmlFree is used correctly based on how the
memory was allocated.
When deallocating GLists, there were many places that were using
g_list_foreach and g_list_free. Converted these occurrences to
call g_list_free_full.
Add NULL checks to all xmlFree calls since the documentation does
not guarantee that passing NULL is safe
In places where we are strdup'ing memory allocated by libxml2,
changed those calls to use xmlMemStrdup().
There were several places where we were missing g_slice_free when
deallocating a top-level node structure.
https://bugzilla.gnome.org/show_bug.cgi?id=702837
2013-06-25 20:53:17 -03:00
Olivier Crête
5732c53c81
dashdemux: Make gst-indent happy
2013-06-10 18:01:09 -04:00
Arthur Shipkowski
3d50af3e4b
dashdemux: Fix issue with get returning a value for max-buffering-time
...
It was not properly divided by GST_SECONDS. Also fix issue with
max-buffering-time being multiplied by GST_SECONDS every time the
property is retrieved.
https://bugzilla.gnome.org/show_bug.cgi?id=700487
2013-06-07 22:58:33 -03:00
Thiago Santos
d434f36245
dashdemux: send stream start event
...
Removes warnings about strict sticky events ordering
2013-05-17 21:23:55 -03:00
Olivier Crête
220f075423
dashdemux: Announce correct mpegts caps
2013-05-15 22:24:29 -04:00
Tim-Philipp Müller
0d7967e25e
dashdemux: rename src template from src%d to src_%u
2013-05-08 23:17:08 +01:00
Thiago Santos
573a4d440c
dash: remove superfluous files
...
Authors and license are at the top of the source files
2013-05-08 18:59:31 -03:00
Thiago Santos
919cb34fee
dash: do not use deprecated glib mutex API
2013-05-08 18:14:46 -03:00
Thiago Santos
34e1b59eca
dashdemux: fixing compiler warnings about print formats
2013-05-08 18:14:46 -03:00
Thiago Santos
9f190cdff7
dashdemux: port to 1.0
2013-05-08 18:14:46 -03:00
Thiago Santos
b338cc0d34
dashdemux: Fix another wrong assertion
...
Also adds a couple log messages for easier debugging
2013-05-08 18:14:46 -03:00
Thiago Santos
3472efda75
dashdemux: remove wrong asserts
...
Those asserts should be the contrary that they are. And also
the surround functions should already check that. Removing them.
2013-05-08 18:14:46 -03:00
Wim Taymans
665d59edba
dashdemux: only start timestamp from 0 for live stream
...
We only want to adjust the timestamps so that they start from 0 for live
streams. Non-live streams already start from 0 and after a seek we actually want
to timestamp to be the position we seek to.
2013-05-08 18:14:45 -03:00
Wim Taymans
4f9f0b84cf
dashdemux: make timestamps start from 0
...
Non-live streams should timestamp buffers with a running-time starting from
0. Since we already push a 0 -> -1 segment, bring the timestamps to 0
by subtracting the initial timestamp.
2013-05-08 18:14:45 -03:00
Wim Taymans
4ab58e0fb1
dashdemux: also send newsegment on startup
2013-05-08 18:14:45 -03:00
Wim Taymans
cfcaa23959
dashdemux: small cleanup
2013-05-08 18:14:43 -03:00
Thiago Santos
afccf149af
dashdemux: live stream playback crashfix
2013-05-08 18:14:42 -03:00
Thiago Santos
d9baed8302
dash: mpdparser: do not cleanup xml lib too early
...
The xmlCleanupParser function seems to cleanup all statically
allocated libxml variables, making it unusable. We can't guarantee
that dashdemux won't need it anymore, so better not call it.
2013-05-08 18:14:42 -03:00
Thiago Santos
14feeb3ccb
dashdemux: reimplementing live streams manifest updates
...
Manifest updates should be done periodically for live streams,
this patch makes the demuxer create a new manifest client for
the new version and transfers the stream position to the new
one, discarding the old one afterwards.
2013-05-08 18:14:42 -03:00
Thiago Santos
b01a3729c0
dash: mpdparser: allow periods without start time for live streams
...
Live streams can have undefined start times for the periods and
mpdparser can let that pass instead of erroring out
2013-05-08 18:14:41 -03:00
Thiago Santos
cff4498f7c
dash: mpdparser: use guint64 for timestamps
...
The timestamps can be pretty big, so use guint64 for them
2013-05-08 18:14:41 -03:00
Thiago Santos
a53fd87508
dashdemux: mpd parsing: fix query parameter parsing
...
Try harder to detect URL parameters and split them to accomodate
the fragment url in the concat:
base-url + fragment-url + url-parameters
2013-05-08 18:14:41 -03:00
Thiago Santos
4ca530f2fe
dashdemux: plug some leaks
...
Add some missing free/unrefs spotted by valgrind
2013-05-08 18:14:41 -03:00
Thiago Santos
c82606a600
dashdemux: remove unused mutexes
2013-05-08 18:14:41 -03:00
Thiago Santos
737d328bb5
dashdemux: properly reset stream status after a flush
...
The stream eos/end of period status must also be reset after a flushing
seek. This makes seeking after EOS work.
2013-05-08 18:14:41 -03:00
Andre Moreira Magalhaes (andrunko)
fbbf713e45
dashdemux: keep a list of streams periods
...
Keep a list of streams per period so that the download loop can keep
downloading while the stream loop is still pushing old period's data.
2013-05-08 18:14:41 -03:00
Andre Moreira Magalhaes (andrunko)
b9272dc0e6
dashdemux: Properly parse base uri from mpd.
2013-05-08 18:14:40 -03:00
Andre Moreira Magalhaes (andrunko)
6ecb58c4f8
dashdemux: Remove unused members.
2013-05-08 18:14:40 -03:00
Andre Moreira Magalhaes (andrunko)
497500dbfe
dashdemux: Only send newsegment on seek.
2013-05-08 18:14:40 -03:00
Thiago Santos
3bc62ccc51
dashdemux: send segments that overwrite previous ones
...
This is only done for seeks, so it is fine
2013-05-08 18:14:40 -03:00
Andre Moreira Magalhaes (andrunko)
2b83b4410c
dashdemux: switch bitrates without switching pads
2013-05-08 18:14:40 -03:00
Andre Moreira Magalhaes (andrunko)
11697b9968
dashdemux: Remove unusued method.
2013-05-08 18:14:40 -03:00
Andre Moreira Magalhaes (andrunko)
daea47d3f4
dashdemux: Set stream need_header after seek and has_data_queued to FALSE when flushing stream.
2013-05-08 18:14:40 -03:00
Thiago Santos
4a9d7f0a9f
dashdemux: do not pause/start the stream loop on playing/paused changes
...
The demuxer shouldn't care about paused/playing, it should act the
same in both states
2013-05-08 18:14:39 -03:00
Thiago Santos
2fe509d50a
dashdemux: remove property that isn't used anymore
...
Remove some pieces of code that are from an old property
that isn't used anymore
2013-05-08 18:14:39 -03:00
Thiago Santos
460542daaf
dashdemux: add a downloadrate utility
...
A small struct that keeps a short history of fragment download bitrates
to have an average measure of N last fragments instead of using only
the last downloaded bitrate
2013-05-08 18:14:39 -03:00
Thiago Santos
28449ce7d1
dashdemux: sprinkling some more log
2013-05-08 18:14:39 -03:00
Thiago Santos
94dcb60127
dashdemux: change bitrates based on the stream bitrate
...
Do not use a global bitrate as the sizes of the fragments matter
when calculating the download rate as the connection setup time is
also being taken into the download duration, a smaller fragment
will have a lower bitrate than a larger one.
This avoids switching the bitrates for streams frequently because
of bitrate mismatches
2013-05-08 18:14:39 -03:00
Thiago Santos
770df6277a
dashdemux: refactor to use the uridownloader lib instead of internal copy
2013-05-08 18:14:39 -03:00
Andre Moreira Magalhaes (andrunko)
5efedbff0a
dashdemux: Make sure switch_pads won't leak any pad.
2013-05-08 18:14:39 -03:00
Andre Moreira Magalhaes (andrunko)
e92531c8f6
dashdemux: Properly stop download and stream tasks where appropriate.
2013-05-08 18:14:39 -03:00
Thiago Santos
288903a203
dashdemux: avoid an assertion when stopping the pipeline
...
Avoids asserting when dataqueues are setting to flushing due
to a pipeline stop during a pad switch.
2013-05-08 18:14:39 -03:00
Thiago Santos
83c0e1e25d
dashdemux: download the next fragment with smaller timestamp
...
Instead of downloading 1 fragment per stream per download loop,
select the stream with the earlier timestamp and get a fragment
only for that one.
The old algorithm would lead to problems when the fragment durations
were too different for streams.
2013-05-08 18:14:39 -03:00