Commit a0df8b8f authored by Julien Isorce's avatar Julien Isorce Committed by Wim Taymans

doc: add design-rtpcollision.txt that explains when GstRTPCollision is created

It also talks about "BYE only the corresponding source, not the whole session."
parent d5622638
RTP collision design
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.
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.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment