Commit graph

229 commits

Author SHA1 Message Date
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
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
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
Wim Taymans
51c9f7989f rtpsession: Use the right hashtable to calculate bandwidth
Don't use an unused hashtable to iterate source to calculate bandwidth.
Remove unused code.
2013-06-13 16:02:19 +02:00
Paul HENRYS
10802cae73 rtpsession: Fix wrong code organisation in case of collision
change_ssrc field of RTPSession should be set before calling
rtp_session_schedule_bye_locked () as this function will call reconsider function
that will wake up rtcp_thread which will call rtp_session_on_timeout () that will
check change_ssrc to change the ssrc.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=694184
2013-02-22 09:28:07 +02:00
Wim Taymans
2971ed44ee rtpsession: remove dead code
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=668355
2013-02-07 15:06:40 +01:00
Wim Taymans
6b7d05ac57 rtpsession: improve debug 2013-01-07 14:22:48 +01:00
Tim-Philipp Müller
230cf41cc9 Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-04 00:07:18 +00:00
Wim Taymans
d5fd524a0c rtsession: fix compiler warning 2012-10-17 13:55:45 +02:00
Wim Taymans
f17db5c4ed rtpsession: update caps in the source
Inform the source when caps changed. This was removed in the port to 1.0
leaving the source unaware of the clock-rate and unable to interpollate
rtp timestamps for SR packets.
2012-10-17 13:22:40 +02:00
Wim Taymans
5b394385b9 session: also stop probatation on existing sources
Receiving an RTCP packet should also stop probation on sources we have seen
before.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=683065
2012-08-30 22:07:24 +02:00
Aleix Conchillo Flaque
4a200b670f rtp: make rtp packet probation configurable (bug #682512) 2012-08-30 21:49:57 +02:00
Wim Taymans
51371d26ee update for RTP buffer api changes 2012-07-17 16:38:27 +02:00
Pascal Buhler
8161daef4a rtpsession: creation should be signaled before validation
https://bugzilla.gnome.org/show_bug.cgi?id=667850
2012-05-09 10:36:18 +02:00
Wim Taymans
af59f573b5 rtpsession: don't leak the address 2012-03-13 19:26:47 +01:00
Mark Nauwelaerts
f189f62b13 Merge branch 'master' into 0.11
Conflicts:
	ext/wavpack/gstwavpackenc.c
	tests/check/elements/audioiirfilter.c
	tests/examples/v4l2/probe.c
2012-03-01 11:29:50 +01:00
Edward Hervey
9beda57c3a Suppress deprecation warnings in selected files, for g_value_array_* mostly 2012-02-27 14:47:25 +01:00
Wim Taymans
225e98d623 Merge branch 'master' into 0.11
Conflicts:
	ext/flac/gstflacenc.c
	ext/jack/gstjackaudioclient.c
	ext/jack/gstjackaudiosink.c
	ext/jack/gstjackaudiosrc.c
	ext/pulse/plugin.c
	ext/shout2/gstshout2.c
	gst/matroska/matroska-mux.c
	gst/rtp/gstrtph264pay.c
2012-02-10 16:23:14 +01:00
Olivier Crête
b850741430 rtpsession: Keep the buffer mapped while it is being modified 2012-01-27 19:05:23 +01:00
Olivier Crête
aeec2d5f7e rtpsession: Initialise the address pointer to NULL 2012-01-27 19:05:23 +01:00
Tim-Philipp Müller
5525e40970 rtpmanager: don't pretend our random hostnames are fully-qualified domain names 2012-01-25 13:19:12 +00:00
Sebastian Dröge
0b517ce9fb Merge branch '0.11' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-good into 0.11 2012-01-25 12:49:34 +01:00
Sebastian Dröge
10554b271f Merge branch 'master' into 0.11
Conflicts:
	ext/flac/gstflacdec.c
	ext/jpeg/gstjpegenc.c
	ext/pulse/pulsesink.c
	sys/v4l2/gstv4l2src.c
2012-01-25 12:49:11 +01:00
Wim Taymans
b4630dd3e0 more memory API porting 2012-01-25 12:30:29 +01:00
Tim-Philipp Müller
a476d529d2 rtpmanager: don't reveal the user's username, hostname or real name by default
Send a randomly made-up user@hostname as CNAME and don't
send a NAME at all by default.

https://bugzilla.gnome.org/show_bug.cgi?id=668320
2012-01-23 13:47:08 +00:00
Wim Taymans
1584806634 port to new gthread API 2012-01-19 11:33:53 +01:00
Sebastian Dröge
cb789e32ad rtpmanager: Port to GIO 2012-01-17 13:08:42 +01:00
Sebastian Dröge
93e3ed5a86 Merge branch 'master' into 0.11
Conflicts:
	ext/cairo/gsttextoverlay.c
	ext/pulse/pulseaudiosink.c
	gst/audioparsers/gstaacparse.c
	gst/avi/gstavimux.c
	gst/flv/gstflvmux.c
	gst/interleave/interleave.c
	gst/isomp4/gstqtmux.c
	gst/matroska/matroska-demux.c
	gst/matroska/matroska-mux.c
	gst/matroska/matroska-mux.h
	gst/matroska/matroska-read-common.c
	gst/multifile/gstmultifilesink.c
	gst/multipart/multipartmux.c
	gst/shapewipe/gstshapewipe.c
	gst/smpte/gstsmpte.c
	gst/udp/gstmultiudpsink.c
	gst/videobox/gstvideobox.c
	gst/videocrop/gstaspectratiocrop.c
	gst/videomixer/videomixer.c
	gst/videomixer/videomixer2.c
	gst/wavparse/gstwavparse.c
	po/ja.po
	po/lv.po
	po/sr.po
	tests/check/Makefile.am
	tests/check/elements/qtmux.c
	tests/check/elements/rgvolume.c
2012-01-10 14:32:32 +01:00
Tim-Philipp Müller
66f6e12888 Work around deprecated thread API in glib master
Add private replacements for deprecated functions such as
g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
to avoid the deprecation warnings. We'll change these
over to the new API once we depend on glib >= 2.32.
2011-12-12 09:46:27 +00:00
Wim Taymans
439e2f1cfd rtp: fix marshallers
Remove custom marshallers for minobject.
Init RTCP buffer correctly.
Handle results from setcaps
Remove asserts.
2011-12-09 10:51:14 +01:00
Edward Hervey
86a57e3546 rtpmanager: Initialize GstRTPBuffer before usage 2011-12-05 18:40:12 +01:00
Wim Taymans
07cc855b24 Merge branch 'master' into 0.11
Conflicts:
	ext/speex/gstspeexenc.c
	gst/rtpmanager/rtpsession.c
2011-11-17 17:17:11 +01:00
Olivier Crête
79a9564c68 rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE
https://bugzilla.gnome.org/show_bug.cgi?id=658419
2011-11-14 12:26:27 +01:00
Olivier Crête
12a6b9613b rtpsession: Put the PLI requests in each RTPSource
Also refactor a bit and put all the keyframe request code in one
place inside rtpsession.c

https://bugzilla.gnome.org/show_bug.cgi?id=658419
2011-11-14 12:26:27 +01:00
Olivier Crête
59c028a4ce rtpsession: Hack to FIR because Google doesn't set the sender ssrc correctly
https://bugzilla.gnome.org/show_bug.cgi?id=658419
2011-11-14 12:26:27 +01:00
Olivier Crête
0ad78db0a3 rtpsession: Process received Full Intra Requests
Process FIR requests according to RFC 5104

https://bugzilla.gnome.org/show_bug.cgi?id=658419
2011-11-14 12:26:27 +01:00
Wim Taymans
6cbd6afc0b update for new net library 2011-11-03 16:43:00 +01:00
Wim Taymans
83ccefb24e update for netbuffer api change 2011-11-02 09:06:38 +01:00
Wim Taymans
75e0c6052f update for netaddress change 2011-11-02 09:06:38 +01:00
Wim Taymans
9a8a8e72c8 structure: fix for api update 2011-11-02 09:06:37 +01:00
Wim Taymans
161310fa23 bufferlist: update for new API 2011-11-02 09:06:37 +01:00
Wim Taymans
fc4684f4c6 fix compilation 2011-10-27 16:03:17 +02:00
Wim Taymans
87fbd1e784 Merge branch 'master' into 0.11
Conflicts:
	common
	ext/pulse/pulsesink.c
	ext/soup/gstsouphttpclientsink.c
	gst/audioparsers/gstaacparse.c
	gst/audioparsers/gstac3parse.c
	gst/rtp/gstrtph264depay.c
	gst/rtpmanager/gstrtpjitterbuffer.c
	gst/rtpmanager/rtpjitterbuffer.c
	gst/rtsp/gstrtspsrc.c
	sys/ximage/gstximagesrc.c
2011-09-28 12:44:59 +02:00
Mark Nauwelaerts
e2179cbb74 rtpsession: avoid source premature timing out
Use slightly adjusted sender interval to determine sender timeout rather than
our own sender side interval (which may have been forced small).
2011-09-19 11:56:44 +02:00
Mark Nauwelaerts
f65d4c8300 rtpsession: avoid timing out source too quickly
... following a PAUSE/PLAY cycle, particularly applicable when operating
with a short RTCP interval (possibly forced so server-side).
2011-09-19 11:56:44 +02:00
Mark Nauwelaerts
afd26f0078 rtpsession: trigger reconsideration if rtcp interval set 2011-09-19 11:51:50 +02:00
Wim Taymans
33f18b8ea4 Merge branch 'master' into 0.11
Conflicts:
	gst/audioparsers/gstamrparse.c
	gst/isomp4/qtdemux.c
2011-09-06 16:06:25 +02:00
Olivier Crête
b2e8362767 rtpsession: Initialise the last_keyframe_request variable 2011-09-02 19:24:46 -04:00
Wim Taymans
4121021bb2 Merge branch 'master' into 0.11
Conflicts:
	ext/pulse/pulsesink.c
	ext/pulse/pulsesrc.c
	gst/audioparsers/gstac3parse.c
	gst/rtp/gstrtph264depay.c
	gst/rtp/gstrtph264pay.c
	gst/rtpmanager/gstrtpssrcdemux.c
2011-08-03 18:25:30 +02:00
Mark Nauwelaerts
c03648c8bb rtpsession: properly init rtcp_min_interval 2011-07-29 12:08:42 +02:00
Olivier Crête
6095d2a3f0 rtpsession: Always send application requested feedback in immediate mode
Send as many application requested feedback messages in immediate mode, even if they
have already been sent.

https://bugzilla.gnome.org/show_bug.cgi?id=654583
2011-07-25 17:20:59 +02:00
Olivier Crête
354faabda0 rtpsession: Don't let the computed RTP bandwidth fall too low
If it falls too low, the computed RTCP bandwidth will be near zero and
the RTCP thread will be stopped.

https://bugzilla.gnome.org/show_bug.cgi?id=654583
2011-07-25 16:19:00 +02:00
Olivier Crête
4d48109f9d rtpsession: Wait longer to timeout SSRC collision
Using the current RTCP interval to timeout SSRC collision can lead to
collisions being timed out immediately if a BYE packet is sent because
it is sent immediately, so the interval is 0. This is not what we
want. So just set a static 10 times the default RTCP interval, it
should be enough

https://bugzilla.gnome.org/show_bug.cgi?id=648642
2011-07-25 16:18:58 +02:00
Mark Nauwelaerts
ef02634dc6 rtpmanager: port to 0.11
* use G_DEFINE_TYPE
* adjust to new GstBuffer and corresponding rtp and rtcp buffer interfaces
* misc caps and segment handling changes

FIXME: also relies on being able to pass caps along with a buffer,
which has no evident equivalent yet, so that either needs one,
or still needs quite some code path modification to drag along caps.
2011-07-06 10:16:12 +02:00
Wim Taymans
cc65bff7c1 Merge branch 'master' into 0.11
Conflicts:
	configure.ac
	docs/plugins/inspect/plugin-esdsink.xml
	docs/plugins/inspect/plugin-gconfelements.xml
2011-06-21 18:24:41 +02:00
Olivier Crête
581a30d892 rtpsession: The signal has 5 arguments, not 4 2011-06-20 16:47:36 -04:00
Wim Taymans
a1894ed363 Merge branch 'master' into 0.11 2011-04-25 11:38:28 +02:00
Olivier Crête
42531337f5 rtpsession: Remove incomplete support for RTCP FIR
Remove bits that were meant to suppport RTCP FIR

https://bugzilla.gnome.org/show_bug.cgi?id=648160
2011-04-20 07:50:43 +01:00
Wim Taymans
7555d0949f Merge branch 'master' into 0.11
Conflicts:
	android/apetag.mk
	android/avi.mk
	android/flv.mk
	android/icydemux.mk
	android/id3demux.mk
	android/qtdemux.mk
	android/rtp.mk
	android/rtpmanager.mk
	android/rtsp.mk
	android/soup.mk
	android/udp.mk
	android/wavenc.mk
	android/wavparse.mk
	configure.ac
2011-04-18 10:23:45 +02:00
Olivier Crête
9d9257916b rtpsession: Use existing functions to parse RTCP FB packets
Use existing functions to get the FCI from FB packets.

https://bugzilla.gnome.org/show_bug.cgi?id=622553
2011-04-15 12:48:04 +01:00
Olivier Crête
5ccd964d86 rtpsession: marshal GstBuffer as a MiniObject instead of a pointer
https://bugzilla.gnome.org/show_bug.cgi?id=622553
2011-04-15 12:47:40 +01:00
Pascal Buhler
58ef84846e rtpsession: Number of active sources should be updated whenever the status of the source changes to active
Forward-ported by Olivier Crête

https://bugzilla.gnome.org/show_bug.cgi?id=646965
2011-04-11 17:37:36 -04:00
Havard Graff
53c88ae33e rtpmanager: ignore a BYE if it is sent with our internal SSRC
https://bugzilla.gnome.org/show_bug.cgi?id=646964
2011-04-11 17:34:12 -04:00
Wim Taymans
0a56b25882 rtpsession: use NetAddress metadata 2011-02-28 13:28:29 +01:00
Wim Taymans
d87c27fd2c miniobject: use buffer private field for extra data
Use the owner private field to store extra buffer data instead of using
subclassing.
2011-02-28 11:58:48 +01:00
Wim Taymans
8598aaf81b rtpbin: Get and use the NTP time when receiving RTCP
When we receive an RTCP packet, get the current NTP time in nanseconds so that
we can correctly calculate the round-trip time.
2011-02-02 18:30:46 +01:00
Olivier Crête
cd923223dd rtpsession: Add action signal to request early RTCP 2011-02-01 18:28:51 +01:00
Olivier Crête
c0996e6b90 rtpsession: Add callback to get the current time 2011-02-01 18:28:51 +01:00
Olivier Crête
a630c68fc3 rtpsession: Don't relay more than one PLI request per RTT
Drop PLI requests if one was relay in the last RTT, the other side may
just not have received the keyframe yet.
2011-02-01 18:28:51 +01:00
Olivier Crête
a61bb9e94b rtpsession: Send GstForceKeyUnit event in response to received RTCP PLI 2011-02-01 18:28:51 +01:00
Olivier Crête
52f95fa7ee rtpsession: Implement sending PLI packets in response to GstForceKeyUnit 2011-02-01 18:28:51 +01:00
Olivier Crête
db5150a23a rtpsource: Retain RTCP Feedback packets for a specified amount of time 2011-02-01 18:28:51 +01:00
Olivier Crête
90354ecb49 rtpsession: Make rtcp buffer metadata writable after processing it
Functions that process the rtcp buffer could decide to keep a ref
on the buffer for further processing. So make the metadata writable
only after they are done.
2011-02-01 18:28:50 +01:00
Olivier Crête
1643f427db rtpsession: Emit signal on incoming RTCP FB packet 2011-02-01 18:28:50 +01:00
Wim Taymans
f399b6a641 rtpsession: fix compilation 2011-02-01 18:28:50 +01:00
Olivier Crête
1bde427250 rtpsession: Add method to request early RTCP packet
Implement the early mode defined in RFC 4585. In this mode, RTCP feedback
packets are sent early to notifier.
2011-02-01 17:03:39 +01:00
Olivier Crête
975e1fecb3 rtpsession: Add property for minimum interval between Regular RTCP messages
This can be changed according to RFC 4585
2011-02-01 16:56:15 +01:00
Olivier Crête
cdb5465741 rtpsession: Emit signal when sending a compound RTCP packet
This allows users to add extra RTCP packets to the compound
RTCP packet.
2011-02-01 16:50:58 +01:00