Gianluca Gennari [Fri, 19 Oct 2012 15:47:51 +0000 (17:47 +0200)]
mpdparser: add support for SegmentTimeline syntax elements
build the list of segments to be played using the SegmentTimeline syntax, if present
bugfixes:
- for dynamic MPD files, when mediaPresentationDuration is not present use minimumUpdatePeriod instead
- do not add a spurious '$' when building an URL from a template like "$Bandwidth$/init.mp4v"
- introduce gst_mpd_client_add_media_segment() to avoid code duplication
David Corvoysier [Fri, 19 Oct 2012 13:42:51 +0000 (15:42 +0200)]
Fixed wrong index in fragments
Gianluca Gennari [Fri, 19 Oct 2012 10:01:03 +0000 (12:01 +0200)]
mpdparser: fix memory leak in gst_mpd_client_get_next_fragment_set()
we have to free next_fragment_uri
David Corvoysier [Fri, 19 Oct 2012 08:50:16 +0000 (10:50 +0200)]
Removed unused function
David Corvoysier [Fri, 19 Oct 2012 08:43:49 +0000 (10:43 +0200)]
Seek event handling cleanup
Gianluca Gennari [Thu, 18 Oct 2012 16:49:53 +0000 (18:49 +0200)]
dashdemux: fix playing of single-segment media streams
other fixes:
- fixed a buffering bug: now we stop buffering when we reach the end of manifest
- now gst_mpd_client_get_target_duration() always returns a valid duration
(in case of single-segment streams, we return either Period duration or mediaPresentation duration)
TODO: support SegmentTimeline
Gianluca Gennari [Wed, 17 Oct 2012 16:46:22 +0000 (18:46 +0200)]
uridownloader: deleted useless declaration of gst_uri_downloader_free()
Gianluca Gennari [Wed, 17 Oct 2012 16:45:25 +0000 (18:45 +0200)]
uridownloader: when possible, reuse existing element to download a new URI
previously a new element was allocated for each media segment, and it was never freed
Gianluca Gennari [Wed, 17 Oct 2012 16:43:26 +0000 (18:43 +0200)]
dashdemux: unref caps in function need_add_header()
Gianluca Gennari [Wed, 17 Oct 2012 16:42:02 +0000 (18:42 +0200)]
dashdemux: fix extraction of SegmentTemplate->initialization in gst_mpd_client_get_next_header()
now the following MPD files are properly supported:
http://dash.edgesuite.net/adobe/hdworld_dash/HDWorld-1600.mpd
http://dash.edgesuite.net/adobe/hdworld_dash/HDWorld.mpd
Gianluca Gennari [Wed, 17 Oct 2012 16:40:02 +0000 (18:40 +0200)]
dashdemux: fix memory leak in gst_dash_demux_get_next_header()
David Corvoysier [Wed, 17 Oct 2012 13:52:19 +0000 (15:52 +0200)]
We now only accept actual manifest files, and not any XML file
David Corvoysier [Wed, 17 Oct 2012 13:50:33 +0000 (15:50 +0200)]
Added a typefind helper for DASH: this commit should be reverted as soon as a proper patch has been submitted to gst-plugins-base
David Corvoysier [Wed, 17 Oct 2012 08:02:39 +0000 (10:02 +0200)]
Fixed state machine (again)
David Corvoysier [Tue, 16 Oct 2012 14:46:17 +0000 (16:46 +0200)]
Code refactoring
David Corvoysier [Tue, 16 Oct 2012 14:34:10 +0000 (16:34 +0200)]
Fixed state machine
David Corvoysier [Tue, 16 Oct 2012 11:43:39 +0000 (13:43 +0200)]
Improve consistency of the tasks shutdown code
David Corvoysier [Tue, 16 Oct 2012 10:51:44 +0000 (12:51 +0200)]
Added missing g_list_free
David Corvoysier [Tue, 16 Oct 2012 09:44:26 +0000 (11:44 +0200)]
Do not answer to URI queries
David Corvoysier [Tue, 16 Oct 2012 09:39:18 +0000 (11:39 +0200)]
Try queries upstream if we cannot process them
David Corvoysier [Tue, 16 Oct 2012 09:26:03 +0000 (11:26 +0200)]
Renamed demux->next_stream in demux->next_push
David Corvoysier [Tue, 16 Oct 2012 09:23:26 +0000 (11:23 +0200)]
Inlined one-line utility funciton that was called only once
David Corvoysier [Tue, 16 Oct 2012 07:10:00 +0000 (09:10 +0200)]
Fixed regression after the introduction of the multi-screen support, preventing the pipeline from stopping properly
David Corvoysier [Mon, 15 Oct 2012 14:41:28 +0000 (16:41 +0200)]
Modified log level of shutdown message
David Corvoysier [Mon, 15 Oct 2012 13:08:53 +0000 (15:08 +0200)]
Comments: We don't select a single representation, but a representation for each stream Code: cleanup of gst_get_next_fragment (also renamed in gst_get_next_fragment_set)
David Corvoysier [Mon, 15 Oct 2012 12:25:27 +0000 (14:25 +0200)]
Removed debug trace
David Corvoysier [Mon, 15 Oct 2012 12:14:53 +0000 (14:14 +0200)]
Added introduction and general design notes
David Corvoysier [Mon, 15 Oct 2012 11:54:17 +0000 (13:54 +0200)]
Fixed wrong comment
David Corvoysier [Mon, 15 Oct 2012 11:52:31 +0000 (13:52 +0200)]
Documented gst_dash_demux_download_loop
David Corvoysier [Mon, 15 Oct 2012 11:35:15 +0000 (13:35 +0200)]
Commented gst_dash_demux_stream_loop
David Corvoysier [Mon, 15 Oct 2012 11:17:12 +0000 (13:17 +0200)]
Commented needs_pad_switch
David Corvoysier [Mon, 15 Oct 2012 11:09:49 +0000 (13:09 +0200)]
Documented the representation switch mechanism
David Corvoysier [Mon, 15 Oct 2012 09:40:55 +0000 (11:40 +0200)]
Replaced references to playlist (HLS) by references to manifest (DASH)
David Corvoysier [Mon, 15 Oct 2012 09:33:58 +0000 (11:33 +0200)]
Renamed gst_dash_demux_switch_playlist to gst_dash_demux_select_representation and added comments
David Corvoysier [Mon, 15 Oct 2012 09:19:29 +0000 (11:19 +0200)]
Removed obsolete comment
David Corvoysier [Mon, 15 Oct 2012 09:18:25 +0000 (11:18 +0200)]
Applied gst-indent
David Corvoysier [Thu, 11 Oct 2012 10:54:50 +0000 (12:54 +0200)]
Updated README
Gianluca Gennari [Tue, 9 Oct 2012 11:24:23 +0000 (13:24 +0200)]
mpdparser: support MPD files with SegmentBase elements encoded inside a SegmentList element
also properly support MPD files without any Initialization segment
Gianluca Gennari [Mon, 8 Oct 2012 15:43:14 +0000 (17:43 +0200)]
mpdparser/dashdemux: fixed get_width, get_height, get_audio_rate, get_num_audio_channels API functions
the actual values now can be extracted also from the AdaptationSet element;
checking NULL structs for better robustness;
Gianluca Gennari [Mon, 8 Oct 2012 14:59:21 +0000 (16:59 +0200)]
mpdparser: added support for single-segment streams with the URL encoded in the baseURL syntax element
Gianluca Gennari [Mon, 8 Oct 2012 13:26:48 +0000 (15:26 +0200)]
mpdparser: added lang attribute to ProgramInformation node
Gianluca Gennari [Mon, 8 Oct 2012 09:47:45 +0000 (11:47 +0200)]
mpdparser: added support for Accessibility, Role, Rating, Viewpoint elements to AdaptationSet node
those are DescriptorType elements, so they are just parsed and dumped for now;
Gianluca Gennari [Mon, 8 Oct 2012 09:30:40 +0000 (11:30 +0200)]
mpdparser: support multiple ProgramInformation nodes
now we keep a list of ProgramInformation nodes for each Period node
Gianluca Gennari [Mon, 8 Oct 2012 09:16:09 +0000 (11:16 +0200)]
mpdparser: fixed parsing of SegmentList syntax element, and eliminated Represention node list from Period node
SegmentList nodes are allowed into Period, AdaptationSet or Representation nodes
and there is at most 1 element, so no need to keep a list;
Period nodes cannot have any Represention elements, as AdaptationSet nodes are mandatory;
this breaks compatibility with some legacy DASH test sequences.
Gianluca Gennari [Mon, 8 Oct 2012 08:29:04 +0000 (10:29 +0200)]
mpdparser: fixed return with no value
gstmpdparser.c: In function ‘gst_mpdparser_get_list_and_nb_of_audio_language’:
gstmpdparser.c:2891: warning: ‘return’ with no value, in function returning non-void
Gianluca Gennari [Mon, 8 Oct 2012 08:24:29 +0000 (10:24 +0200)]
mpdparser.c/.h: changed license from dual MIT/LGPL 2.0 to LGPL 2.1
uniformed licencinsing to the other libraries in the dashdemux project
hzakari [Tue, 2 Oct 2012 00:28:58 +0000 (02:28 +0200)]
Optimize the two functions that return the number and the list of languages in a single function
Hamid ZAKARI [Sat, 29 Sep 2012 03:27:51 +0000 (05:27 +0200)]
Add the headers to the adaptationsets segments if any one of these changed representation
Hamid ZAKARI [Sat, 29 Sep 2012 01:13:29 +0000 (03:13 +0200)]
Support Multi languages (need a decodebin2 patch)
Hamid ZAKARI [Sat, 29 Sep 2012 00:41:13 +0000 (02:41 +0200)]
Remove the "TODO" comment
David Corvoysier [Fri, 28 Sep 2012 10:55:27 +0000 (12:55 +0200)]
Renamed LICENSE into COPYING
David Corvoysier [Fri, 28 Sep 2012 09:46:00 +0000 (11:46 +0200)]
Updated authors
David Corvoysier [Wed, 8 May 2013 14:13:32 +0000 (11:13 -0300)]
Initial import of gstdashdemux sources
Sebastian Pölsterl [Fri, 26 Oct 2012 16:00:02 +0000 (18:00 +0200)]
Use DVB API v5 aka S2API instead of obsolete v3 API
Patch is based on work of Tony Houghton <h@realh.co.uk>
https://bugzilla.gnome.org/show_bug.cgi?id=654479
Tim-Philipp Müller [Wed, 8 May 2013 14:42:01 +0000 (15:42 +0100)]
smoothstreaming: pass width, height, channels and rate as integer
g_ascii_strtoull() returns a long long integer, but we need to
pass a normal int to gst_structure_set() for fields of G_TYPE_INT,
so cast appropriately.
Sreerenj Balachandran [Wed, 8 May 2013 09:45:20 +0000 (12:45 +0300)]
vdpau: Add VdpVideoSurface caps feature
Tim-Philipp Müller [Wed, 8 May 2013 09:55:16 +0000 (10:55 +0100)]
smoothstreaming: fix WMV caps
Makes this show at least a picture:
http://playready.directtaps.net/smoothstreaming/TTLSS720VC1/To_The_Limit_720.ism/Manifest
Thiago Santos [Tue, 23 Apr 2013 15:08:38 +0000 (12:08 -0300)]
mssdemux: fixing compiler warnings about print formats
Thiago Santos [Tue, 16 Apr 2013 22:35:03 +0000 (19:35 -0300)]
smoothstreaming: port to 1.0
Thiago Santos [Fri, 12 Apr 2013 18:59:04 +0000 (15:59 -0300)]
mssdemux: remove already fixed TODO comment
Thiago Santos [Fri, 12 Apr 2013 18:58:17 +0000 (15:58 -0300)]
mssdemux: replace gst_value_deserialize with simpler function
The deserialization was only used to convert hex strings into
GstBuffers. Replace gst_value_deserialize with a simpler, direct
function.
Thiago Santos [Fri, 12 Apr 2013 18:56:35 +0000 (15:56 -0300)]
mssdemux: fix newsegment event leak
Thiago Santos [Fri, 12 Apr 2013 18:55:23 +0000 (15:55 -0300)]
mssdemux: replace unused parameter
The buffer parameter wasn't being used, it was only to signal if
a buffer was downloaded and advance to the next fragment in the
manifest.
Replace the buffer with a boolean that has the same effect and is
safer
Wim Taymans [Mon, 11 Mar 2013 09:09:40 +0000 (10:09 +0100)]
mss: avoid GValue leak
Louis-Francis Ratté-Boulianne [Fri, 22 Feb 2013 22:00:30 +0000 (17:00 -0500)]
mssdemux: fix a small memory leak
Louis-Francis Ratté-Boulianne [Tue, 19 Feb 2013 18:17:53 +0000 (13:17 -0500)]
mssdemux: avoid streaming to fail when download is cancelled
When download was failing repeatedly, it was causing streaming to fail even though it was cancelled on purpose (stopping tasks).
Thiago Santos [Fri, 8 Feb 2013 05:01:46 +0000 (02:01 -0300)]
mssdemux: removing unused functions
Thiago Santos [Fri, 8 Feb 2013 03:51:30 +0000 (01:51 -0200)]
mssdemux: switch bitrates without switching pads
Andre Moreira Magalhaes (andrunko) [Thu, 7 Feb 2013 18:26:46 +0000 (16:26 -0200)]
mssdemux: Check if pads are valid before removing.
Thiago Santos [Thu, 7 Feb 2013 06:10:46 +0000 (03:10 -0300)]
mssdemux: add a maximum error count for downloads
mssdemux will tolerate a few download errors before emitting an
error message to the bus
Thiago Santos [Wed, 6 Feb 2013 11:48:55 +0000 (08:48 -0300)]
mssdemux: use streams bitrate individually
connection setup times seem to matter when measuring the download
rate of different streams. Streams with longer fragments have a
*relatively* lower connection setup time and achieve higher bitrates.
Using the average seems unfair here, so use each stream's measured bitrate
to select its best quality option.
Thiago Santos [Tue, 5 Feb 2013 20:48:42 +0000 (17:48 -0300)]
mssdemux: use downloadbitrate utility for measuring bitrate
downloadbitrate keeps a short history of bitrates and helps
tracking the current average download bitrate for mssdemux
Andre Moreira Magalhaes (andrunko) [Tue, 5 Feb 2013 06:01:04 +0000 (04:01 -0200)]
mssdemux: Properly compute new bitrate and use bitrate_limit.
Andre Moreira Magalhaes (andrunko) [Tue, 5 Feb 2013 05:27:51 +0000 (03:27 -0200)]
mssdemux: Avoid a possible division by zero
Andre Moreira Magalhaes (andrunko) [Tue, 5 Feb 2013 05:27:22 +0000 (03:27 -0200)]
mssdemux: Add missing object param to GST_DEBUG|INFO_OBJECT calls
Thiago Santos [Tue, 5 Feb 2013 03:28:19 +0000 (00:28 -0300)]
mssdemux: add bitrate-limit property
It allows the plugin to use its own downloading bitrate measures
as a feedback to select the best streams bitrate for the current
network scenario
Thiago Santos [Tue, 5 Feb 2013 00:58:09 +0000 (21:58 -0300)]
mssdemux: use the shared uridownloader lib instead of an internal copy
Andre Moreira Magalhaes (andrunko) [Mon, 4 Feb 2013 04:20:51 +0000 (02:20 -0200)]
mssdemux: Do not block on reset.
We need to cancel the downloader for each stream before joining the main download task, otherwise
the download task will block until all the stream tasks finish.
Louis-Francis Ratté-Boulianne [Fri, 1 Feb 2013 22:44:04 +0000 (17:44 -0500)]
mssdemux: handle FLUSH events by resetting the demuxer state
Louis-Francis Ratté-Boulianne [Fri, 1 Feb 2013 22:43:46 +0000 (17:43 -0500)]
mssdemux: add conditions to prevent some crashes
Louis-Francis Ratté-Boulianne [Fri, 1 Feb 2013 22:29:58 +0000 (17:29 -0500)]
mssdemux: use standard glib methods
Louis-Francis Ratté-Boulianne [Fri, 1 Feb 2013 22:27:19 +0000 (17:27 -0500)]
mssdemux: fix some memory leaks and use right free function
Louis-Francis Ratté-Boulianne [Fri, 1 Feb 2013 22:12:41 +0000 (17:12 -0500)]
mssdemux: don't stop a task from inside the loop
Only pause the task
Louis-Francis Ratté-Boulianne [Thu, 31 Jan 2013 21:14:37 +0000 (16:14 -0500)]
mssdemux: log manifest content for debugging
Louis-Francis Ratté-Boulianne [Wed, 30 Jan 2013 05:22:50 +0000 (00:22 -0500)]
mssdemux: make codec private data from manifest attributes with AAC-LC
When the codec is AAC-LC, some server implementation (e.g. Microsoft IIS) doesn't add the CodecPrivateData attribute. The element needs to re-create the codec data from the Quality Level attributes (channels and sampling rate).
Louis-Francis Ratté-Boulianne [Wed, 30 Jan 2013 03:57:36 +0000 (22:57 -0500)]
mssdemux: only try to reload the manifest for live streams
There is no way to know if a live stream is really finished, so try to reload the manifest and check if there are more fragments to download. Else just let know it's the EOS.
Thiago Santos [Sat, 26 Jan 2013 00:24:56 +0000 (21:24 -0300)]
mssdemux: add some documentation
Adds a little bit of docs explaning the internals of mssdemux
Thiago Santos [Tue, 22 Jan 2013 20:33:41 +0000 (17:33 -0300)]
mssdemux: add max-queue-size-buffers property
Indicates how much buffering should be done internally in
mssdemux
Thiago Santos [Mon, 21 Jan 2013 21:05:59 +0000 (18:05 -0300)]
mssdemux: stop tasks faster
Issue a cancel to the downloaders so they stop earlier
Thiago Santos [Thu, 17 Jan 2013 19:20:10 +0000 (16:20 -0300)]
mssdemux: implement live streams handling
Live streams force the demuxer to keep reloading the Manifest from
time to time, as the new fragments are being added as they are recorded.
The demuxer should also try to keep up and detect when it had to skip
fragments, marking the discont flag when that happens.
Curiously, the spec doesn't seem to mention when/how a live stream is supposed
to end, so keep trying downloads until the demuxer errors out.
Thiago Santos [Thu, 17 Jan 2013 19:19:54 +0000 (16:19 -0300)]
mssdemux: do not leak fragments
Thiago Santos [Thu, 17 Jan 2013 16:48:13 +0000 (13:48 -0300)]
mssdemux: fix issue on fragment timestamping parsing
Use guint64 as the fragments can start at very high numbers,
specially on live streams
Thiago Santos [Wed, 16 Jan 2013 18:28:19 +0000 (15:28 -0300)]
mssdemux: error out when upstream doesn't implement URI query
Error out when upstream doesn't answer to URI query and mssdemux
doesn't know the URI to fetch the fragments from
Thiago Santos [Tue, 15 Jan 2013 20:31:25 +0000 (17:31 -0300)]
mssdemux: push newsegments with same start time on bitrate switches
This keeps sinks working in sync after a bitrate switch
Thiago Santos [Mon, 14 Jan 2013 16:21:10 +0000 (13:21 -0300)]
mssdemux: rewriting pad tasks so that buffers are pushed by ts order
Use pad tasks to download data and an extra task that gets the earlier
buffer (with the smallest timestamp) and pushes on the corresponding
pad.
This prevents that the audio stream rushes ahead on buffers as its
fragments should be smaller
Thiago Santos [Fri, 11 Jan 2013 18:01:33 +0000 (15:01 -0300)]
mssdemux: some fixes to bitrate switching
Removes a possible deadlock from bitrate switching when the pad
that requested the switch blocks on its pad-push
Thiago Santos [Thu, 10 Jan 2013 19:26:48 +0000 (16:26 -0300)]
mssdemux: refactoring fragment download to its own function
Makes code clearer and helps changing the download part of the
code to its own thread
Thiago Santos [Thu, 10 Jan 2013 18:16:36 +0000 (15:16 -0300)]
mssdemux: implement bitrate switching
When connection-speed changes, signal that we might need a bitrate
switch. During the switch, a new pad group is added and the old one
is drained and removed.
New pads also need to push newsegments before starting to stream
Thiago Santos [Tue, 8 Jan 2013 21:01:17 +0000 (18:01 -0300)]
mssdemux: add connection-speed property
This speed limits the maximum bitrate of streams. Currently it
is only read when starting the pipeline, but it should be used
for switching bitrates during playback to adapt to network
changes.
Thiago Santos [Tue, 8 Jan 2013 20:55:49 +0000 (17:55 -0300)]
mssdemux: add an 'active' flag to manifest stream
mssdemux should set the streams it has exposed as active so that
the manifest won't use the non-active streams to compute total bitrates
or providing fragments