From a0df8b8fce1a8acb98c7daa250b0363f2d193830 Mon Sep 17 00:00:00 2001 From: Julien Isorce Date: Tue, 5 Nov 2013 18:03:48 +0000 Subject: [PATCH] doc: add design-rtpcollision.txt that explains when GstRTPCollision is created It also talks about "BYE only the corresponding source, not the whole session." --- docs/design/Makefile.am | 6 ++++ docs/design/design-rtpcollision.txt | 43 +++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 docs/design/Makefile.am create mode 100644 docs/design/design-rtpcollision.txt diff --git a/docs/design/Makefile.am b/docs/design/Makefile.am new file mode 100644 index 0000000000..69c452bf7f --- /dev/null +++ b/docs/design/Makefile.am @@ -0,0 +1,6 @@ +SUBDIRS = + + +EXTRA_DIST = \ + design-rtpcollision.txt + diff --git a/docs/design/design-rtpcollision.txt b/docs/design/design-rtpcollision.txt new file mode 100644 index 0000000000..816802c3b6 --- /dev/null +++ b/docs/design/design-rtpcollision.txt @@ -0,0 +1,43 @@ +RTP collision design + + +GstRTPCollision +--------------- + +Custon upstream event which contains the ssrc marked as collided. + +This event is generated on both pipeline sender and receiver side by +the gstrtpsession element when it detects a conflict between ssrc. +(same session id and same ssrc) + +It's an upstream event so that means this event is for now only +useful on pipeline sender side. Because rtppayloader and rtpaux elements +are placed upstream from the gstrtpsession. + +On pipeline receiver side, gstrtpsession is the most upstream element +compared to other rtp elements like rtpauxreceive, ssrcdemux, rtpjitterbuffer +and rtpdepayloader. + +rtppayloader +------------ + +When handling a GstRTPCollision event, the rtppayloader has to choose another +ssrc. Actually this is the gstrtpsession that suggests him a newer ssrc through +the caps. + +BYE only the corresponding source, not the whole session. +--------------------------------------------------------- + +When a collision happens for the given ssrc, the associated source is marked +bye. But we make sure that the whole session is not itself set bye. +Because internally, gstrtpsession can manages several sources and all have +their own distinct ssrc. + +For example when using rtprtxreceive, it uses one session which contains +2 internal rtpsources. One for the master stream, and one for the rtx stream. +Actually in this case there are always 3 sources because the session always +has an other internal one, maybe for rtcp but I'm still nore sure about that. +Then gstrtpsession make sure to only bye the rtx stream if this is the one +which collided. +Then gstrtpsession make sure to only bye the master stream if this is the one +which collided.