<div dir="ltr"><div><div>Hello,<br></div><div>I  and my team are developing a media-server based on GStreamer that manages RTP streams (and RTCP).<br></div><div><br></div><div>Our pipeline (simplified) is as follow:<br></div>
<div><br></div>                                                            ==== RtpBin ========================<br></div>                                                            ||  ____________         ______________   ||            ____________          __________  <div>
                  --- RTP_STREAM_A --->   ||  |                      |         |                          |   ||           |                      |          |                  |<br>CLIENT_A                                           ||  |  RtpSession  | ----> | RtpJitterBuffer  |   ||   --->   |   RtpDepay   |  --->  |   RtpPay    |  -- RTP_STREAM_B --> ......... --> CLIENT_B<br>
                  <-- RTCP_STREAM_A --   ||  |___________|         |_____________|   ||           |___________|          |_________|<br>                                                            ||                                                                  || <br>
                                                            ===================================<div><br>Following RFC 3550 (<a href="http://tools.ietf.org/html/rfc3550#section-7">tools.ietf.org/html/rfc3550#section-7</a>), in this case our server acts as translator ("pseudo" because retransmissions are managed by the server). and works fine in environments without losses, but it  sometimes does not when there are RTP packets losses and the video quality is degraded.<br>
<br>Retransmissions are managed properly using RtpJitterBuffer, but 
also some RTP packets can be considered
lost. To solve this, PLI (<a href="http://tools.ietf.org/html/rfc4585#section-6.3.1">http://tools.ietf.org/html/rfc4585#section-6.3.1</a>) request can be sent by CLIENT_B, but it does not do this because RTP_STREAM_B does not have any loss/gap.<br>
</div><div>I think that here is the problem, because as RFC 3550 says: "Losses in
      the incoming packet stream may induce corresponding gaps in the
      outgoing sequence numbers"<br><br></div><div>I have been studying GStreamer elements and thinking about some possible solutions. I would like to have some opinions about them or a better one:<br><ul><li>When a RTP packet is considered lost, RtpJitterBuffert sends out a GstRTPPacketLost event 
downstream which is managed by RtpDepay, and it sends a GST_EVENT_GAP 
downstream. Considering that this event is SERIALIZED, could we use it to induce a gap in RtpPay exactly in the correct sequence number?</li><li>What about using GST_BUFFER_FLAG_GAP in RtpJitterBuffer to mark lost packets?<br>
</li></ul></div><div><br>Thanks in advance!!<br></div><div><br>-- <br><div dir="ltr">Miguel París Díaz<br>------------------------------------------------------------------------<br>Computer/Software engineer.<br>Researcher in <a href="http://www.kurento.org" target="_blank">http://www.kurento.org</a><br>
<a href="http://twitter.com/mparisdiaz" target="_blank">http://twitter.com/mparisdiaz</a><br>------------------------------------------------------------------------<br></div>
</div></div></div>