Commit graph

97 commits

Author SHA1 Message Date
Youness Alaoui
baf875b928 hlsdemux: Do not join the task from the task's thread itself. join it only in the state change 2011-09-07 22:26:47 +02:00
Youness Alaoui
473e71e1ca hlsdemux: If a fetch fails, decrement the sequence number 2011-09-03 09:09:02 +02:00
Youness Alaoui
5aa972eab2 hlsdemux: make hlsdemux lock/unlock the m3u8 client when it accesses it 2011-09-03 09:01:40 +02:00
Youness Alaoui
6133608789 hlsdemux: Add a get_target_duration and get_current_uri api to m3u8_client 2011-09-03 09:00:50 +02:00
Youness Alaoui
a252794a03 hlsdemux: Make the m3u8 client thread-safe 2011-09-03 09:00:35 +02:00
Sebastian Dröge
a82f92aed2 hlsdemux: Reset in PAUSED->READY after chaining up to the parent class
Otherwise there are possible race conditions with the streaming thread.
2011-09-02 19:45:21 +02:00
Sebastian Dröge
0561c3751c hlsdemux: Remove obsolete FIXME comment 2011-09-02 15:00:58 +02:00
Sebastian Dröge
82bbc76f15 hlsdemux: Reset the internal state going to/from READY instead of NULL
This theoretically allows reuse of the element when setting it to READY
instead of NULL.
2011-09-02 14:55:45 +02:00
Sebastian Dröge
445f626016 hlsdemux: Set playlist parsing helper object to NULL after freeing 2011-09-02 14:54:56 +02:00
Youness Alaoui
acacc251fa hlsdemux: Allow up to 3 consecutive failed downloads before erroring
In some networks, especiall in 3G, a fragment download or playlist
update may fail. We allow for up to 3 consecutive failures, while using
the rfc's specs for retry delays before considering that there was an
error on the stream.
2011-09-02 14:52:07 +02:00
Youness Alaoui
8889c5927c hlsdemux: remove unused argument 2011-09-02 14:51:11 +02:00
Sebastian Dröge
cf8f00d57a hlsdemux: Just join the task
gst_task_join() will already stop the task, no need
to stop it additionally.
2011-08-31 14:48:47 +02:00
Sebastian Dröge
119771eaab hlsdemux: Join the task instead of just stopping it and not waiting for it to finish
Fixes interesting race conditions that cause crashes in decodebin2
because pads are added/removed from child elements although they
should be in READY state already.
2011-08-31 14:47:40 +02:00
Sebastian Dröge
c8b7ae1ffa hlsdemux: Remove unused variable 2011-08-31 12:12:59 +02:00
Youness Alaoui
0c97deb59d hlsdemux: switch to higher/lower bitrate by more than one step at a time 2011-08-31 12:12:33 +02:00
Youness Alaoui
6436747eb0 hlsdemux: remove spamming GST_LOG_OBJECT 2011-08-31 12:11:32 +02:00
Youness Alaoui
277a7d05b2 hlsdemux: If paused, do not cache fragments until out of memory error!
We should stop the update thread in PAUSED state and avoid fetching
new fragments when the queue is not empty. The queue should always be
empty since we push data into a queue. Also, in totem, if we seek and
pause the stream while it's buffering, then the state will stay playing
for some reason, so it's best not to continue fetching fragments forever.
2011-08-31 12:11:20 +02:00
Youness Alaoui
917708df82 hlsdemux: start/stop update thread and keep track of status 2011-08-31 12:10:32 +02:00
Youness Alaoui
4724b9a5b6 hlsdemux: Post duration message when we parse the playlist 2011-08-31 12:09:53 +02:00
Youness Alaoui
f93939b46c hlsdemux: Send a flush-stop when switching pads. Fixes A->A/V sync issue.
This is to ensure that we reset the accumulate segment on the sinks
so if we start with audio only then switch to audio+video, then both
sinks will have the same segments and will be synchronized.
2011-08-31 12:09:38 +02:00
Youness Alaoui
ed5a5cc139 hlsdemux: seems there was a typo, free the adapter if it contains data, not if already empty 2011-08-30 16:18:30 +02:00
Youness Alaoui
4a6d888961 hlsdemux: oups, we need to empty the queue after freeing its content 2011-08-30 16:18:08 +02:00
Youness Alaoui
cb30cd242c hlsdemux: do not broadcast the fetcher_cond on bus error if we're cancelled
If we cancel the fetch and call the stop_fetcher, which holds the lock,
when it sets the fetcher's state to NULL, it might send an error
on the bus. In that case, we must ignore it, otherwise it will try
to take the lock and will block forever.
2011-08-30 16:16:54 +02:00
Jonas Larsson
fc0fe37b10 hlsdemux: Split playslist on \r\n not just \n 2011-08-30 16:16:07 +02:00
Youness Alaoui
6e9eeb7678 hlsdemux: Do not succeed a download if the fetcher had an error 2011-08-30 16:15:41 +02:00
Youness Alaoui
e22c300be2 hlsdemux: Rename functions that need to be called with a locked mutex 2011-08-30 16:15:28 +02:00
Youness Alaoui
50d0468241 hlsdemux: We must signal the fetcher_cond while holding its lock 2011-08-30 16:15:03 +02:00
Youness Alaoui
3054355dc1 hlsdemux: We do not need to set the current playlist to the main one
When caching fragments, if we set the current playlist to main, then
it will always think it's a live stream (no endlist in it) so it will
force the redownload of the main playlist after every seek, which is
unnecessary. Also, it causes a race condition where a seek migh happen
during that redownload, and we'll think we're trying to seek a live pipeline.
2011-08-30 16:14:30 +02:00
Youness Alaoui
108493ee51 hlsdemux: do not make the update_thread joinable 2011-08-26 09:51:46 +02:00
Youness Alaoui
8c04ea47d2 hlsdemux: Ensure the task is paused in case of cache error 2011-08-26 09:51:46 +02:00
Youness Alaoui
46ac6a2589 hlsdemux: stop the threads in the proper order
first pause the task, then stop all fetchers, then stop the update thread
then pause the task again, since it might have been restarted by
another thread in the meantime
2011-08-26 09:51:46 +02:00
Youness Alaoui
015d1e11e2 hlsdemux: do not post an error if we seek/cancel during caching of fragments 2011-08-26 09:51:46 +02:00
Youness Alaoui
d69297a23c hlsdemux: if we're canceling a fetcher, we must stop its thread 2011-08-26 09:51:46 +02:00
Youness Alaoui
42401da686 hlsdemux: lock the update_thread mutex before stopping it 2011-08-26 09:51:46 +02:00
Youness Alaoui
39657fa52f hlsdemux: lock the fetcher mutex before stopping it 2011-08-26 09:51:45 +02:00
Youness Alaoui
e1a0bdcdf5 hlsdemux: do not allow two fetchers to run simultanously 2011-08-26 09:51:45 +02:00
Youness Alaoui
adcfcabb14 hlsdemux: Stop the streaming task on PAUSED_TO_READY state change 2011-08-26 09:51:45 +02:00
Youness Alaoui
a3fc3ec443 hlsdemux: Send buffering messages on the bus 2011-08-24 08:12:19 +02:00
Youness Alaoui
e2de4e5870 hlsdemux: cache the number of fragments we are required to cache 2011-08-24 08:12:14 +02:00
Sebastian Dröge
20f9738c10 hlsdemux: Use FALSE instead of 0 for a bool parameter 2011-08-23 09:23:33 +02:00
Youness Alaoui
3f42050c34 hlsdemux: switch pads when we seek (need_segment) since tsdemux doesn't cope well with a reset 2011-08-23 09:22:40 +02:00
Youness Alaoui
2d90f1c0dc hlsdemux: Add a FIXME comment. loop task should be a pad task 2011-08-23 09:21:03 +02:00
Youness Alaoui
b55f157d6f hlsdemux: Do not seek in a live stream 2011-08-23 09:20:25 +02:00
Youness Alaoui
18f53cf547 hlsdemux: Do not take the pad stream lock, use the task's lock instead 2011-08-23 09:20:14 +02:00
Youness Alaoui
e2f69e1be9 hlsdemux: Implement EVENT_SEEK 2011-08-23 09:19:59 +02:00
Youness Alaoui
475abd15b6 hlsdemux: Implement the GST_QUERY_SEEKING properly 2011-08-23 09:18:16 +02:00
Youness Alaoui
ae4af3910e hlsdemux: Implement correctly the GST_QUERY_DURATION 2011-08-23 09:17:30 +02:00
Youness Alaoui
a916d4dfd2 hlsdemux: Do not use GST_TASK_WAIT in the task function
The task function uses GST_TASK_WAIT which does a g_cond_wait giving it
the GST_OBJECT_GET_LOCK of the task. The mutex gets locked when
g_cond_wait returns, so if we don't lock/unlock it, it will
stay locked forever, preventing the task from ever finishing.
We shouldn't lock the task object lock, so let's remove the GST_TASK_WAIT
and make the task pause instead if there are no buffers in the queue.
2011-08-23 09:16:35 +02:00
Youness Alaoui
690e59e497 hlsdemux: Keep a separate variable for the current variant used
By using a separate variable, first it allows us to sort the lists
of alternates but keep the pointer on the first occurence in the main
playlist (to respect the spec of starting with the bitrate specified
first in the main playlist). It also avoid playing with the lists variable
which should be used to store the list of playlists and not as a pointer
to the current one.
Also fixes a memleak with the g_list_foreach freeing the lists, if it wasn't
pointing to the first element of the list.
2011-08-22 15:46:41 +02:00
Youness Alaoui
5878f71233 hlsdemux: Set buffer timestamp since we send a TIME segment 2011-08-18 14:05:10 +02:00