Wim Taymans
9345c2280a
rtpbin: expect the pads on the encoders
...
Don't use request pads for the encoder elements, the signal handler
should request the pads and make sure they are available with the right
name.
2013-12-30 15:17:05 +01:00
Wim Taymans
cbc80d10dd
rtpbin: request-rtp-encoder are no action signals
...
The request-rtp-encoder signals are not action signals so mark them
correctly and use an accumulator to collect the result value.
2013-12-30 15:17:05 +01:00
George Kiagiadakis
5ddf6a5e32
gstrtpsession: suggest upstream to use the new "internal-ssrc" after a collision
...
When a collision is found on the internal ssrc, we have to change it.
Ideally, we want also the payloader upstream to follow this change and use
the new internal ssrc. Ideally we want this condition to be always met:
if there is one payloader sending on this session, its ssrc should match the
internal ssrc.
2013-12-30 14:03:05 +01:00
George Kiagiadakis
17517ca491
rtpsession: allow setting internal-ssrc again
2013-12-30 14:03:05 +01:00
Aleix Conchillo Flaqué
47c65fc269
rtpbin: allow dynamic RTP/RTCP encoders/decoders
...
* gst/rtpmanager/gstrtpbin.[ch]: four new action signals have been
added (request-rtp-encoder, request-rtp-decoder, request-rtcp-encoder
and request-rtcp-decoder). The user will be able to provide encoders
or decoders dynamically. The encoders must follow the srtpenc API and
the decoders the srtpdec API. Having separate signals for RTP and RTCP
allows the user to use different encoders/decoders or provide the same
one (e.g. that would be the case for srtpenc).
Also, rtpbin now allows application/x-srtp in its pads.
https://bugzilla.gnome.org/show_bug.cgi?id=719938
2013-12-30 11:24:00 +01:00
Wim Taymans
f48bbabafc
rtpjitterbuffer: dynamically recalculate RTX parameters
...
Use the round-trip-time and average jitter to dynamically calculate the
retransmission interval and expected packet arrival time.
Based on patches from Torrie Fischer <torrie.fischer@collabora.co.uk>
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=711412
2013-12-30 11:18:51 +01:00
Wim Taymans
416bd9a2c3
rtpjitterbuffer: calculate average jitter
2013-12-30 11:18:51 +01:00
Wim Taymans
7181a21ca9
rtpsession: use RTT from the Retransmission event
...
Place the estimated RTT in the Retransmission event and let the session
manager use that instead of the hardcoded value.
2013-12-30 11:18:50 +01:00
Wim Taymans
e996f73d0c
jitterbuffer: take more accurate running-time for NACK
...
Don't use the current time calculated from the tmieout loop for when we
last scheduled the NACK because it might be unscheduled because of a max
packet misorder and then we don't accurately calculate the current time.
Instead, take the current element running time using the clock.
2013-12-30 11:18:50 +01:00
Olivier Crête
ada6ea668b
rtpsession: Add error message if the app tries to set the internal-ssrc
2013-12-13 17:36:36 -05:00
Olivier Crête
d715010d78
rtpsession: Only count nacks when a nack packet is received
...
Not when any RTCP feedback packet is.
2013-12-13 16:08:35 -05:00
Olivier Crête
7af9fdbca6
rtpsession: Process PSFB FIR requests which lack the media ssrc
...
According to RFC 5104 section 4.3.1.2, RTCP PSFB FIR message SHALL
have a media_ssrc field set to 0. The actual media ssrc is in the FCI.
So in that case, we ignore the retained feedback and just let it through
to the rtp_session_process_fir() function which will check for the actual
SSRC inside the FCI.
Fixes a regression introduced by commit 57c27ec3
2013-12-13 16:01:07 -05:00
George Kiagiadakis
6a2de911fa
rtpsession: fix rb blocks disappearing after the first rtcp cycle with multiple senders
...
Previously, when the session had multiple internal sender SSRCs, it would
issue SR reports with RB blocks only on the first RTCP timeout and afterwards
SR reports would be sent empty. This was because the "generation" number
in RTPSource would increase more than once during the same cycle and afterwards
it would always be greater than the session's generation, which would cause
it to be skipped from being included in RBs.
This commit fixes this problem by:
1) Increasing the RTPSource generation only at the end of each cycle,
which essentially fixes the problem but only when the internal senders
are less than GST_RTCP_MAX_RB_COUNT.
2) Keeping for each RTPSource a set of SSRCs which stores which SSRC's
SR the given RTPSource has been reported in, which also fixes the problem
when the internal senders are more than GST_RTCP_MAX_RB_COUNT. This is
necessary because of the fact that any RTPSource is marked as reported
in itself's SR and makes it impossible to know if it has been reported
in other SRs too or not, and which.
2013-12-12 16:44:27 +01:00
George Kiagiadakis
c78a115154
rtpsession: keep extra stats for scheduling BYE
...
Keep an extra stats structure for scheduling the BYE packets. When we
decide to schedule BYE, make a copy of the current stats into the
bye_stats. Then while we schedule the BYE, update and use only the
bye_stats. When we finished scheduling the BYE packet, we use the
regular stats again.
2013-12-12 10:38:43 +01:00
George Kiagiadakis
282028e753
rtpsession: when we schedule BYE, only deal with BYE sources
...
When we are doing the RTCP timeout to schedule BYE packets, don't
generate RTCP for all sources but only for the sources marked as BYE.
2013-12-12 10:34:38 +01:00
George Kiagiadakis
6a421c3d81
rtpsession: reset state after scheduling BYE
...
After we do RTCP, we are not scheduling bye anymore.
2013-12-12 10:32:48 +01:00
George Kiagiadakis
0a0ff100ef
rtpsession: also count NACKS when no signal was pending
2013-12-12 10:31:38 +01:00
George Kiagiadakis
bec9c04ea0
session: ignore RTCP packets for the BYE sources
...
When we are scheduling BYE packets, ignore all RTCP for the sources that
are scheduling a BYE packet. Other sources that are not scheduling BYE
should continue receiving RTCP packets as usual.
2013-12-12 10:09:25 +01:00
Julien Isorce
33b398e345
rtpsession: determine if the session is doing point-to-point
...
In this case T_dither_max is set to 0 according to RFC 4585
2013-12-10 16:57:56 +01:00
Wim Taymans
eee515cb2c
rtpjitterbuffer: serialize events in the buffer
...
Serialize events into the jitterbuffer by inserting them with a -1
seqnum.
Update unit test to expect events from the streaming thread.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=652986
2013-12-10 11:57:37 +01:00
Wim Taymans
36e78bc5ca
rtpjitterbuffer: detect -1 seqnum
...
Keep the seqnum as a full guint so that we can check for -1 entries and
deal with them correctly.
Immediately try to push -1 seqnum.
2013-12-10 11:04:06 +01:00
Wim Taymans
4a2e0f4ff4
rtpjitterbuffer: reorganize jitterbuffer items
...
Keep the oldest item at the head and the newest items on the tail. This
makes it easier to deal with -1 seqnums.
2013-12-10 11:01:03 +01:00
Wim Taymans
ea2a222cef
jitterbuffer: correctly check for invalid values
...
Check for -1 on the guint from the buffer item instead of on the guint16
or guint32.
Also insert -1 seqnum at the head of the jitterbuffer.
2013-12-09 23:34:10 +01:00
Wim Taymans
e8edecc56e
rtpsession: don't unref buffer twice
...
Cleaning the packet info will already unref the buffer.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=715078
2013-11-28 16:51:13 +01:00
Wim Taymans
710d1f3a2a
rtpjitterbuffer: improve clear-pt-map handling
...
Don't reset the expected output seqnum when clearing the pt map because this
could stall the jitterbuffer forever.
Add a unit test for this.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=709800
2013-11-25 15:52:22 +01:00
Tim-Philipp Müller
901ec63462
rtpjitterbuffer: fix wake-up when new buffers come in after running empty
...
Spotted by 'gratias' on IRC. Probably introduced in recent refactoring.
https://bugzilla.gnome.org/show_bug.cgi?id=715039
2013-11-25 00:37:50 +00:00
Wim Taymans
4c9474905b
rtpjitterbuffer: pass downstream flowreturn to upstream
...
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=712722
2013-11-22 12:27:31 +01:00
Wim Taymans
0c6f4efe4a
rtpjitterbuffer: avoid mapping the buffer
...
Reuse the parsed structure to get the timestamps.
2013-11-19 10:12:00 +01:00
Tim-Philipp Müller
d506409af5
docs: get rid of 'Since: 0.10.x' markers
...
And some gtk-doc markup fixes.
2013-11-18 14:47:35 +00:00
Tim-Philipp Müller
548e756e0a
rtpmanager: fix Since markers
...
Should be next stable release series version
2013-11-16 12:15:14 +00:00
George Kiagiadakis
387e3b918a
rtpjitterbuffer: Fix stats property field names and documentation
2013-11-15 16:23:34 +02:00
Torrie Fischer
acf74435e3
gstrtpsession: Implement a number of feedback packet statistics
...
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=711693
2013-11-15 15:21:19 +01:00
Wim Taymans
b450d31503
rtpjitterbuffer: rename property to 'stats'
...
This makes the unit test work.
We can later also add more stats, not specific to retransmission.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=711411
2013-11-14 09:24:26 +01:00
Torrie Fischer
22ceb80ba9
rtpjitterbuffer: implement rtx statistics
2013-11-14 09:24:26 +01:00
Wim Taymans
2e5b462ae3
jitterbuffer: advance expected seqnum after dropping
...
After dropping a buffer, move our expected seqnum
Conflicts:
gst/rtpmanager/gstrtpjitterbuffer.c
2013-11-13 12:02:57 +01:00
Wim Taymans
e4bc81d7d2
rtpsession: remove collision reconfigure event
...
Remove bogus reconfigure event on collision, we don't want to send the event on
the receiving RTP pad and the collision event is now handling this
case.
See https://bugzilla.gnome.org/show_bug.cgi?id=711560
2013-11-11 15:27:18 +01:00
Julien Isorce
b32fc6f416
gstrtpsession: send custom upstream event "GstRTPCollision" on send_rtp_sink pad
...
See https://bugzilla.gnome.org/show_bug.cgi?id=711560
2013-11-11 15:25:52 +01:00
George Kiagiadakis
b81b2efa3e
rtpjitterbuffer: fix crash when do-retransmission=true and a lot of buffers are lost
...
The problem here was that the jitterbuffer lock was unlocked to push
the event, but that caused another thread to remove the timer currently
being processed, probably because the amount of rtx events
(and therefore timers) was getting too high. The solution is to
unlock and push the event only after timer processing has finished.
fixes https://bugzilla.gnome.org/show_bug.cgi?id=711131
2013-11-11 11:51:45 +01:00
Wim Taymans
c8db05d610
rtpsource: update receiver stats for sender
...
An internal sender in a session is also a receiver of its own packets so update
the receiver stats. Other senders in the session will use this info to generate
correct RB blocks in their SR reports.
2013-11-07 16:24:30 +01:00
Wim Taymans
268a75e705
rtpsource: refactor receiver stats update
2013-11-07 16:24:30 +01:00
Wim Taymans
e96f8f519c
rtspsrc: proxy new buffer mode
2013-10-31 10:38:35 +01:00
Wim Taymans
43645d5981
jitterbuffer: add new timestamp mode
...
Add a new timestamp mode that assumes the local and remote clock are
synchronized. It takes the first timestamp as a base time and then uses the RTP
timestamps for the output PTS.
2013-10-31 10:15:25 +01:00
Wim Taymans
d4892859d4
jitterbuffer: fix race in flush-start/flush-stop
...
When flush-stop arrives before we process the result of the _push() in the
loop function, we might pause even though we are not flushing anymore. Fix this
race by waiting for the srcpad loop function to completely pause after doing the
flush-start.
2013-10-04 12:35:18 +02:00
Wim Taymans
00056965e8
rtpjitterbuffer: fix race when updating the next_seqnum
...
If we were not waiting for the missing seqnum when we insert the lost packet
event in the jitterbuffer, we end up not updating the next_seqnum and wait
forever for the lost packets to arrive. Instead, keep track of the amount of
packets contained by the jitterbuffer item and update the next expected
seqnum only after pushing the buffer/event. This makes sure we correctly handle
GAPS in the sequence numbers.
2013-09-30 12:31:00 +02:00
Wim Taymans
fde438791e
rtpjitterbuffer: small debug improvement
2013-09-30 12:30:23 +02:00
Wim Taymans
6e7d547be4
rtpjitterbuffer: reset skew does not reset clock-rate
...
Don't reset the clock-rate when we reset the skew correction algorithm.
Reset the skew correction algorithm when we change the clock-rate.
2013-09-30 11:53:08 +02:00
Wim Taymans
03d520eb69
rtpjitterbuffer: pause timer when PAUSED
...
Also pause the timer when we go to the PAUSED state. It is possible that we
don't have a clock or base-time in PAUSED to perform the timeouts.
2013-09-30 11:16:32 +02:00
Wim Taymans
4a31aec513
rtpjitterbuffer: improve debug
2013-09-30 11:15:25 +02:00
Wim Taymans
d4b4b4e924
rtpjitterbuffer: don't calculate skew without rtptime
...
Skip trying to calculate the skew when we don't have an rtptime.
It causes problems when lost packet events are placed in the jitterbuffer.
2013-09-26 16:21:33 +02:00
Wim Taymans
2efd58fc84
rtpbin: avoid some pad link checks
...
Link pads without checks, we know it will work.
2013-09-25 17:38:31 +02:00
Wim Taymans
97f4674655
rtpjitterbuffer: calculate some stats
2013-09-25 10:50:05 +02:00
Wim Taymans
b1d29483bb
rtpjitterbuffer: move send_lost_event function
...
Move the send_lost_event function to the do_lost_event handling, there is no
need to have a separate function.
2013-09-25 10:50:05 +02:00
Wim Taymans
adf5d96044
rtpmanager: update docs
2013-09-23 16:34:15 +02:00
Wim Taymans
e5019de80d
docs: update docs with 1.0 element names
2013-09-23 15:36:47 +02:00
Wim Taymans
8ce674da87
rtpjitterbuffer: always store lost event in jitterbuffer
...
Always prepare a lost event in the jitterbuffer, it is to wake up and make the
pushing thread continue. We drop the event when we are not supposed to push lost
events downstream.
2013-09-23 14:45:27 +02:00
Wim Taymans
9f3345fcc2
rtpjitterbuffer: schedule lost event differently
...
Schedule the lost event by placing it inside the jitterbuffer with the seqnum
that was lost so that the pushing thread can interleave and push it properly.
2013-09-23 14:45:27 +02:00
Wim Taymans
ae389aeb0c
rtpjitterbuffer: remove list debug
2013-09-23 14:45:26 +02:00
Wim Taymans
28641e3145
rtpjitterbuffer: add type to the item
...
So that the upper layer can know what data is contained in the item.
2013-09-23 14:45:26 +02:00
Wim Taymans
479c7642fd
rtpjitterbuffer: fix flush
...
Pass function to flush to properly free the queue items.
2013-09-23 14:45:25 +02:00
Wim Taymans
0cc887eb98
rtpjitterbuffer: append seqnum -1 packets
2013-09-23 14:45:25 +02:00
Wim Taymans
39a2ba669d
rtpjitterbuffer: use structure to hold packet information
...
Make the jitterbuffer operate on a structure containing all the packet
information. This avoids mapping the buffer multiple times just to get the RTP
information. It will also make it possible to store other miniobjects such as
events later.
2013-09-23 14:45:25 +02:00
Wim Taymans
1760817005
rtpjitterbuffer: update expected timer when possible
...
When we receive a packet and we have some missing packets, we can update their
estimated arrival times based on the timestamp difference.
2013-09-23 14:45:25 +02:00
Wim Taymans
fdc1ed1680
rtpjitterbuffer: fix order of timeout events
...
Improve the order of the timeout events, if there are timers with the same
timeout, we want to trigger the lowest seqnum first. For this we need to loop
over the complete array of timers to find the best one before triggering the
timeout.
2013-09-23 14:45:25 +02:00
Wim Taymans
0b1a7edfea
rtpjitterbuffer: send lost event before signaling next buffer
...
First send the lost event, then update the next_seqnum counter and then
send the signal to the pushing thread that it can retry to push a buffer. This
avoids pushing out buffers before the lost event is pushed.
2013-09-23 14:45:25 +02:00
Wim Taymans
5051f51f0a
jitterbuffer: configure clock-rate on jitterbuffer
...
Add a get and setter to configure the clock-rate in the jitterbuffer instead of
passing it as an argument to the insert method.
2013-09-23 14:45:24 +02:00
Wim Taymans
3c421e7e48
rtpjitterbuffer: add option to reset retransmission timers
2013-09-23 14:45:24 +02:00
Wim Taymans
6f4deab298
rtpjitterbuffer: stop the timer thread
...
The timeout code could release the lock so we need to check if we are allowed to
wait for the clock some more.
2013-09-23 14:45:24 +02:00
Wim Taymans
cba4e6a707
rtpjitterbuffer: unlock only once
2013-09-23 14:45:24 +02:00
Wim Taymans
5dc207948c
rtpjitterbuffer: improve flush and shutdown
...
There is no need to unschedule the timer in flush-start, flush-stop will remove
the timers and unschedule.
Unschedule the current timer before attempting to join the timer thread.
2013-09-23 14:45:23 +02:00
Wim Taymans
a512cc2d3c
rtpjitterbuffer: set correct expected time
...
When we already have a timer for a packet, skip it but don't forget to adjust
the dts to the expected dts of the next packet.
2013-09-23 14:45:23 +02:00
Wim Taymans
517ea0f4d9
jitterbuffer: improve debug
2013-09-23 14:45:23 +02:00
Wim Taymans
fd6c57cf10
rtpjitterbuffer: keep delay as a separate variable in timer
...
Keep a separate delay in the timer so that we still know the original timestamp
of the packet that this timer refers to. We can then place the correct
running-time in the Retransmission event.
2013-09-19 14:32:48 +02:00
Wim Taymans
d34184dd03
rtpjitterbuffer: fix writability of properties
2013-09-19 14:32:48 +02:00
Wim Taymans
6bb2626498
rtpjitterbuffer: reevaluate the current timer after timeout
...
When we trigger the timeout logic of a timer, reevaluate it because it is
possible that it still has the lowest timeout.
2013-09-18 16:33:40 +02:00
Wim Taymans
8d021b6ede
rtpjitterbuffer: don't update time when unscheduled
...
Don't try to estimate the current time when we got unscheduled.
2013-09-18 16:31:26 +02:00
Wim Taymans
65606a25bf
rtpjitterbuffer: init packet spacing on first buffer
...
Already init the packet spacing variables on the first buffer so that we can
calculate the spacing on the second buffer already.
2013-09-18 16:29:37 +02:00
Wim Taymans
f2efdf28f5
rtpjitterbuffer: push the lost event from the timer thread
...
Instead of pushing the lost event from the chain function, schedule a timeout
that will push the lost event from the timer thread. This avoid blocking the
upstream thread while we push and sync the event.
2013-09-18 14:57:09 +02:00
Wim Taymans
5d5fc03e04
rtpjitterbuffer: round gap duration to multiple of duration
...
Make sure the gap duration in the lost event is a multiple of the packet
duration.
Enable another test.
2013-09-18 14:12:47 +02:00
Wim Taymans
6e4a051d40
rtpjitterbuffer: keep track of duration
...
Keep track of the estimated duration of missing packets and use it in the lost
event.
Enable another unit test
2013-09-18 12:29:38 +02:00
Wim Taymans
ac3bb3acf6
rtpjitterbuffer: handle large gaps with one lost event
...
When we have a large number of missing packets, generate one lost event for all
the packets that have no chance of being pushed out in time.
Fix and activate unit test for large gaps.
2013-09-18 11:59:28 +02:00
Wim Taymans
26402e1c21
rtpjitterbuffer: refactor lost event sending
...
Also make sure we only increment the expected seqnum and last
output timestamp.
2013-09-18 11:57:06 +02:00
Wim Taymans
f49981a597
jitterbuffer: refactor timeout triggers
2013-09-17 23:29:56 +02:00
Wim Taymans
047021c443
jitterbuffer: simplify the timeout code
...
Keep track of the current time in the timeout loop.
Loop over all timers and trigger all the expired ones, we can do this in the
same loop that selects the new best timer.
2013-09-17 23:29:56 +02:00
Wim Taymans
fa1ef3328b
jitterbuffer: rearrange timer update code
...
Also update the timers when retransmission is disabled. We need to
do this because when we added LOST timers when we detected missing packets and
we need to remove those timers when the packet finally arrives.
2013-09-17 23:29:56 +02:00
Wim Taymans
232fdd8b56
jitterbuffer: release lock on shutdown
2013-09-17 15:19:42 +02:00
Wim Taymans
4de919a17a
jitterbuffer: use separate thread for timeouts
...
Use a separate thread for scheduling the timeouts instead of using the
downstream streaming thread that might block at any time.
2013-09-16 15:55:55 +02:00
Olivier Crête
b9ceafe5af
rtpsession: Demux RTCP buffers from the RTP stream
...
If there are RTCP buffers in the RTP stream, process them as
RTCP. This way, we want receive streams following RFC 5761
https://bugzilla.gnome.org/show_bug.cgi?id=687657
2013-09-13 16:25:49 +02:00
Wim Taymans
28e5f90988
rtpbin: use PacketInfo for the sender
...
Avoid mapping the packet multiple times when sending RTP.
2013-09-13 14:34:28 +02:00
Wim Taymans
a02c9473d8
rtpbin: store more in the PacketInfo
...
Store all info in the PacketInfo so that we can avoid mapping the packet
multiple times.
2013-09-13 14:34:28 +02:00
Wim Taymans
e5c789abd6
session: store more in the PacketInfo structure
2013-09-13 14:34:28 +02:00
Wim Taymans
47662f9ca4
rtpbin: RTPArrivalStats -> RTPPacketInfo
...
Rename a structure because we are also going to use this for the sender
bits.
2013-09-13 14:34:28 +02:00
Wim Taymans
c795b72988
source: small cleanups
2013-09-13 14:34:27 +02:00
Wim Taymans
9f9ba21404
jitterbuffer: handle segments with non-0 start
...
We keep the DTS and PTS in running-time inside the jitterbuffer. Make sure to
transform it back to a buffer timestamp before pushing out the buffer.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=707931
2013-09-12 15:04:30 +02:00
Wim Taymans
f1106cde66
session: only update next check time when reconsidering
...
Don't update the next RTCP check time in all cases but only when we
reconsidered. This avoids delaying sending a full RTCP packet when we
are doing early feedback.
2013-08-27 09:55:52 +02:00
Wim Taymans
47065db0b6
session: add more debug
2013-08-27 09:55:52 +02:00
Wim Taymans
454d75951e
jitterbuffer: fix types of the retransmission event
2013-08-27 09:55:52 +02:00
Wim Taymans
dd4af0d11c
jitterbuffer: only timeout EXPECTED timers on gap
...
Only timeout the EXPECTED timers when we detect a large seqnum gap.
2013-08-27 09:44:18 +02:00
Wim Taymans
4b7bcc2ec1
rtsession: fix locking
...
We need to take the session lock when getting and manipulating the
source.
2013-08-26 11:50:27 +02:00
Wim Taymans
3f46527f75
rtpsession: add some more debug
2013-08-26 11:50:13 +02:00
Wim Taymans
54e7e7547a
rtxqueue: add property to configure queue size
2013-08-23 15:47:25 +02:00
Wim Taymans
84833bed11
rtpbin: proxy jitterbuffer do-retransmission property
2013-08-23 12:10:19 +02:00
Wim Taymans
89b9019e3e
rtx: various improvements
...
Use locking
Don't push from the event handler, collected packets in a queue and push from
the chain function.
Clear queues on shutdown.
2013-08-21 17:02:27 +02:00
Wim Taymans
ee15bc9284
session: generate events correctly
...
Do correct shifting of the bitmask for lost packets.
2013-08-21 17:02:27 +02:00
Wim Taymans
67523d3ecb
rtp: register rtx element better
2013-08-21 17:02:26 +02:00
Wim Taymans
587dc055e9
jitterbuffer: handle EOS
...
When the queue is empty, and we received EOS, pause and push an EOS
event downstream.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=706387
2013-08-20 14:36:59 +02:00
Wim Taymans
533f26fc99
jitterbuffer: update docs
2013-08-20 10:26:15 +02:00
Wim Taymans
c7f9ef8012
jitterbuffer: update all timers
...
Keep looping over all registered timers so that we can mark them lost instead of
stopping as soon as we find the timer for the current seqnum.
2013-08-20 10:25:17 +02:00
Wim Taymans
5debda9ca1
jitterbuffer: remove unused variables
2013-08-20 08:55:50 +02:00
Wim Taymans
a88db5fa2c
jitterbuffer: reorganize timer handling
...
Restructure handling of incomming packet and the gap with the expected seqnum
and register all timers from the _chain function.
Convert a timer to a LOST packet timer when the max amount of retransmission
requests has been reached.
2013-08-19 22:04:51 +02:00
Wim Taymans
d9d6eac4bb
jitterbuffer: refactor packet spacing calculation
2013-08-19 22:04:50 +02:00
Wim Taymans
c4dc159656
jitterbuffer: keep track of last seqnum and dts
2013-08-19 22:04:50 +02:00
Wim Taymans
652ce95ca6
jitterbuffer: small cleanups
2013-08-19 22:04:50 +02:00
Wim Taymans
b4a35bbe82
jitterbuffer: reset retransmission timers in add/reschedule
...
Reset the retransmission timers when adding and rescheduling a timer.
2013-08-19 22:04:50 +02:00
Wim Taymans
cf8a0652f3
jitterbuffer: rename variables for packet spacing
2013-08-19 22:04:50 +02:00
Wim Taymans
ec82e4ab7c
jitterbuffer: remove lost timer when we get the packet
...
When we receive a packet, also remove the LOST timer for it.
2013-08-19 22:04:50 +02:00
Wim Taymans
2f03b43b21
jitterbuffer: expected seqnum must increase
...
Only update the expected seqnum when it is bigger than the previous expected
seqnum.
2013-08-19 22:04:50 +02:00
Wim Taymans
c5bf376bb5
jitterbuffer: add more debug
2013-08-19 22:04:50 +02:00
Wim Taymans
ff825a2919
rtxqueue: add retransmission queue element
2013-08-19 22:04:50 +02:00
Wim Taymans
5fe18ee432
session: add some docs
2013-08-19 22:04:49 +02:00
Wim Taymans
482dacfb54
session: handle NACK feedback and generate events
...
Handle and parse the feedback NACK packets and generate a Retransmission
event for each NACKed packet
2013-08-19 22:04:49 +02:00
Wim Taymans
f11c2c9b3b
jitterbuffer: forward flush before stopping dataflow
...
First forward the flush event and then stop our loop function.
2013-08-14 16:19:32 +02:00
Wim Taymans
48174164eb
session: add NACK feedback in RTCP
2013-08-06 15:50:19 +02:00
Wim Taymans
4379ed1dee
source: add methods to register NACK
...
Add a method to register a missing packet for an ssrc along with
methods to get the missing packets and clear them.
2013-08-06 15:50:19 +02:00
Wim Taymans
50638b8106
session: handle Retransmission event and schedule NACK
...
Handle the retransmission event from downstream and use it to schedule a NACK
request.
2013-08-06 15:50:19 +02:00
Wim Taymans
0bddbd682d
session: pass data to remove func
...
Pass the data to the remove function because we are going to deref it when there
is pli or fir.
2013-08-06 15:50:19 +02:00
Wim Taymans
3c82de59f9
session: use common send_rtcp method
...
Reuse the send_rtcp method that already asks for the current time when
requesting a keyframe.
2013-08-05 15:02:59 +02:00
Wim Taymans
3c14c6021c
session: Don't use ClockTimeDiff for unsigned delays
2013-08-05 15:02:59 +02:00
Tim-Philipp Müller
7469cd3a4c
rtpmanager: use generic marshaller
2013-08-04 11:03:07 +01:00
Wim Taymans
7584f91f31
jitterbuffer: send event in right direction
2013-08-04 00:24:36 +02:00
Wim Taymans
9613e481ad
session: add FIR and PLI like other RTCP packets
...
Add the FIR and PLI packets like the other RTCP packet instead of from the
on-sending-rtcp default signal handler.
2013-08-03 00:33:24 +02:00
Wim Taymans
743e1b1191
jitterbuffer: fix property ranges
2013-08-02 17:22:55 +02:00
Wim Taymans
cd0164f4cc
jitterbuffer: push retransmission events
2013-08-02 16:43:59 +02:00
Wim Taymans
9a13267e85
jitterbuffer: add support for retransmission retry
...
When we didn't receive a packet after requesting retransmission, retry
asking for retransmission for a certain period.
2013-08-02 14:54:56 +02:00
Wim Taymans
e9ad5126db
jitterbuffer: add properties
...
Add properties to control retransmission parameters
2013-08-02 14:47:56 +02:00
Wim Taymans
a8c7ff7489
jitterbuffer: use corrected timeout when rescheduling
...
When we recalculate the timeout, use the corrected timeout value depending on
the timer type.
2013-08-02 12:44:58 +02:00
Wim Taymans
9c7e3e3455
jitterbuffer: update timers after queueing
...
Else we might update the timer needlessly for duplicates.
2013-08-02 12:43:00 +02:00
Wim Taymans
ebd6b8f8ab
jitterbuffer: move method up
2013-08-02 12:42:08 +02:00
Wim Taymans
f6b6797874
jitterbuffer: small cleanup
2013-08-02 06:28:32 +02:00
Wim Taymans
0e41414926
jitterbuffer: unschedule old expected packets
...
When we receive a new packet, unschedule old outstanding packets when their
seqnum is too far away.
2013-08-01 23:36:07 +02:00
Wim Taymans
70695466ed
jitterbuffer: refactor timer update
2013-08-01 23:32:00 +02:00
Wim Taymans
4ab3f5d3da
jitterbuffer: update timers when removing
...
Update the timers when we remove a timer.
Handle canceled timers, make them unschedule the current timer and
trigger the timeout code.
2013-08-01 23:24:29 +02:00
Wim Taymans
b983cf675b
jitterbuffer: fix typo
2013-08-01 23:22:02 +02:00
Wim Taymans
f3c658cbe6
jitterbuffer: improve timeout management
...
If we change the seqnum of an existing timer and we were waiting for
that timer, unschedule it. If we change the timeout of an existing timer and we
were waiting on it, only unschedule when the new time is smaller.
2013-08-01 15:40:52 +02:00
Wim Taymans
77e5d320ab
jitterbuffer: install timer for expected arrival
...
Install a timer that is triggered when the expected arrival time of a packet
expired.
2013-08-01 15:11:13 +02:00
Wim Taymans
f08d98404e
jitterbuffer: improve unschedule of timers
...
Conflicts:
gst/rtpmanager/gstrtpjitterbuffer.c
2013-08-01 14:57:11 +02:00
Wim Taymans
9d3b824e2a
jitterbuffer: move code around
2013-08-01 12:21:53 +02:00
Wim Taymans
fe32e80c92
jitterbuffer: estimate inter packet spacing
...
When we see two packets with consecutive seqnums and a different RTP time, use
the DTS difference as the inter packet spacing estimate.
2013-08-01 12:07:11 +02:00
Wim Taymans
255b7106f5
jitterbuffer: keep track of current timeout
2013-08-01 12:01:15 +02:00
Wim Taymans
7e43dba19b
jitterbuffer: cleanup timer handling
2013-08-01 11:49:10 +02:00
Wim Taymans
9d88ac9cbb
jitterbuffer: reset is only possible with a GAP
2013-08-01 11:40:41 +02:00
Wim Taymans
f864131227
jitterbuffer: operate on DTS
...
Make the jitterbuffer schedule the timeouts based on the DTS instead
of the PTS. This makes it all smoother with reordered frames and gives
the decoder time to reorder the frames in time.
2013-08-01 11:36:56 +02:00
Wim Taymans
80c5934290
jitterbuffer: rename timout variable
2013-08-01 11:14:12 +02:00
Wim Taymans
aa951433ee
jitterbuffer: small cleanup
2013-07-31 17:08:58 +02:00
Wim Taymans
69c78f72d5
jitterbuffer: block output in paused or buffering
2013-07-31 16:59:58 +02:00
Wim Taymans
4fbbc53a49
jitterbuffer: store pts in timer
...
Only store the pts in the timer so that we can both do timeouts with timings on
the input and output of the jitterbuffer.
2013-07-31 16:59:09 +02:00
Wim Taymans
77846d35c6
rtpjitterbuffer: refactor jitterbuffer
...
Refactor the jitterbuffer code. Make separate function for peeking a buffer,
pushing the next buffer, waiting for timeouts and handling the timeouts.
The main loop now tries to push as many buffers as it can until it runs out of
buffers or when it detects a seqnum discont. Then it will wait for some event to
happen before attempting to push more buffers.
Make methods to register timeouts in an array. These timeouts are registered
when we detect a missing packet, sync for the first packet or when we find an
estimation for the end-of-stream.
This greatly simplifies and clarifies the code and also makes it possible to
register more complicated timeout schemes later.
2013-07-30 23:24:23 +02:00
Wim Taymans
ea931d4f57
rtpjitterbuffer: use NULL to ignore percent
...
If we pass NULL to pop and push we ignore the percent result.
2013-07-30 23:24:23 +02:00
Wim Taymans
b3e8a85a54
jitterbuffer: refactor
...
Move eos estimation into separate function
2013-07-30 23:24:22 +02:00
Wim Taymans
02359f9219
session: don't make buffer writable prematurely
...
There is no reason to make the SR buffer writable at this point. This is better
delayed until needed.
2013-07-26 22:31:41 +02:00
Wim Taymans
0261199fc4
session: ignore RTCP for inactive sources
2013-07-26 22:31:23 +02:00
Wim Taymans
a4b4ca53c0
session: small cleanup
2013-07-26 22:25:17 +02:00
Wim Taymans
e0abd2e9b5
session: handle partial RTCP report blocks
...
When we have more SSRCs to report than what fit in an RTCP packet, use a
generation counter to make sure all of them end up in a packet eventually.
2013-07-26 17:29:10 +02:00
Wim Taymans
6cce6fb04c
session: create SSRC before doing session cleanup
...
Make the internal source before we do session cleanup
2013-07-26 17:29:10 +02:00
Wim Taymans
5b0298c63e
session: reorganize the report block code
2013-07-26 17:29:10 +02:00
Wim Taymans
3c44cd7c83
session: refactor active and sender checks
2013-07-26 14:21:40 +02:00
Wim Taymans
e952f7ba43
session: remove internal sources on timeout
...
When an internal source times out and becomes a receiver, remove it.
2013-07-26 12:18:01 +02:00
Wim Taymans
e9e2fe3950
session: create an internal source for RTCP
...
When we need to do RTCP and we don't have an internal source yet,
make one.
2013-07-26 12:18:01 +02:00
Wim Taymans
bd0709c15c
session: remove old code to change SSRC
...
Remove code used to change the SSRC after a collision. We now send
a RECONFIGURE event upstream to make the upstream element change the SSRC.
2013-07-26 12:18:01 +02:00
Wim Taymans
88f5a5f355
source: don't update packet SSRC
...
Remove the code to update the SSRC in packets, it can never be called now that
we always use a source with matching packet SSRC.
2013-07-26 12:18:01 +02:00
Wim Taymans
abc90da1dc
session: delay allocation of internal source
...
Allocate the internal source when we receive a caps with the SSRC or when we see
a buffer with the SSRC.
2013-07-26 12:18:01 +02:00
Wim Taymans
e0a1ce1291
session: generate reconfigure on collision
...
When we detect a collision, change the SSRC that we suggest upstream
and trigger RECONFIGURE. This should make upstream select a new SSRC.
2013-07-26 12:18:01 +02:00
Wim Taymans
495d43c089
session: produce RTCP for all internal sources
...
Loop over all the internal sources and produce RTCP. We also need
to queue the RTCP packets and send them when we are finished.
2013-07-26 12:18:00 +02:00
Wim Taymans
9505fd4150
session: deprecate internal source and ssrc properties
...
Deprecate the internal source and internal ssrc properties. There might
be more than one internal source.
2013-07-26 12:17:59 +02:00
Wim Taymans
3d6ee1fb5e
session: internal sources don't use probation
2013-07-26 12:17:59 +02:00
Wim Taymans
0e53e9109e
session: give caps to session
...
Let the session parse the caps and update its SSRC when needed.
2013-07-26 12:17:59 +02:00
Wim Taymans
c06482a2cb
session: make method to suggest available SSRC
...
Make a method to suggest the best available SSRC. This is the SSRC of the last
created internal source and is used to instruct upstream to produce this
SSRC.
2013-07-26 12:17:59 +02:00
Wim Taymans
33ce50e8b1
session: keep SDES and set on new internal sources
...
Keep track of the SDES ourselves and set it on all newly created
internal sources.
2013-07-26 12:17:59 +02:00
Wim Taymans
5652f02b76
session: make method to make internal sources
...
Add a method to obtain an internal source and use it to create
our internal source
2013-07-26 12:17:59 +02:00
Wim Taymans
7f83927c95
session: count internal sources and how many are senders
2013-07-26 12:17:58 +02:00
Wim Taymans
719343c206
rtpsession: separate BYE marking and scheduling
...
First mark sources with BYE and then schedule the BYE RTCP message.
2013-07-26 12:17:58 +02:00
Wim Taymans
391943ba82
session: get SSRC from RTCP packet itself
...
Get the SSRC from the RTCP packet instead.
2013-07-26 12:17:57 +02:00
Wim Taymans
a3f75a17ef
session: fix bandwidth calculation
...
We iterate over all sources and the internal one is also in the
hashtable so avoid adding it twice.
2013-07-26 12:17:57 +02:00
Wim Taymans
9eaef9d332
session: add some docs
2013-07-26 12:17:56 +02:00
Wim Taymans
2163355a47
session: Rearrange RTCP reporting a little
...
Make a function to generate an RTCP packet for a source, pass the source as a
parameter.
Move timeout of collisions to session cleanup phase.
2013-07-26 12:17:56 +02:00
Wim Taymans
a3bf374351
session: move check for is_early around
...
Move the check for the early RTCP to where it is needed and used.
2013-07-26 12:17:56 +02:00
Wim Taymans
b069db6a2e
session: parse packet outside of the session lock
2013-07-26 12:17:56 +02:00
Wim Taymans
57c27ec319
session: do nicer checks for internal sources
2013-07-26 12:17:56 +02:00
Wim Taymans
93d07298ff
session: let source keep track if it sent BYE
2013-07-26 12:17:56 +02:00
Wim Taymans
0c9c1434a8
source: reset more
2013-07-26 12:17:56 +02:00
Wim Taymans
1d02496d15
source: also use the source for bye_reason
...
Store the BYE reason in our internal source object. Rename the methods on the
source object a little because now the BYE can be received in RTCP or
set when the session wants to send BYE.
2013-07-26 12:17:56 +02:00
Wim Taymans
ddd071e54c
session: configure sdes with structure only
...
Remove code to configure the SDES with methods and types, only
allow configuration with GstStructure
2013-07-26 12:17:55 +02:00
Wim Taymans
0060e1d45d
session: refactor add and find source
...
Make functions to find and add a source to the hashtable.
2013-07-26 12:17:55 +02:00
Wim Taymans
adb0d68c07
session: remove source from sync_rtcp
...
We don't need to know the sender source of the session in the
callback, the SR packet is for all participants in the session.
2013-07-26 12:17:55 +02:00
Wim Taymans
bf7d8173b3
jitterbuffer: add some more debug
2013-07-26 12:17:55 +02:00
Wim Taymans
c44a29bd53
bin: fix compilation
2013-07-24 14:17:45 +02:00
Wim Taymans
f87875e35b
rtpjitterbuffer: fix locking
...
Take the lock earlier so that we do things that follow with the right
locking.
2013-07-24 10:49:03 +02:00
Wim Taymans
dece8413ef
rtpsession: don't use invalid times in RTCP timeouts
...
An invalid timeout can be calculated when we disabled RTCP by setting the
bandwidth to 0. Make sure all code can handle this case.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674626
2013-07-23 17:41:48 +02:00
Wim Taymans
25e0f0d6b6
rtpsession: lock session when changing bandwidth
...
Take the session lock when changing the bandwidth properties so that we don't
end up with inconsistent behaviour.
2013-07-23 17:41:48 +02:00
Wim Taymans
c337265ee4
session: reset some RTCP variables
...
The early_send time was set to 0 and always triggering an early RTCP packet.
2013-07-23 17:41:48 +02:00
Carlos Rafael Giani
95429f1d4b
rtpbin: added custom downstream sync event
...
rtpbin can now send a custom in-band downstream event which informs
downstream that the bin has received an RTCP SR packet. This is useful
for applications which want to drop the initial unsynchronized received
RTP packets.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=703560
Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
2013-07-23 06:25:20 +02:00