<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    So after some digging it appears the slow down I see when using TCP
    is due to a slow connection to the proxy. See the code in
    RTPInterface.cpp.<br>
    <br>
    In the function RTPInterface::sendRTPorRTCPPacketOverTCP.<br>
    <br>
    The first send of the header is non-blocking, the second send is
    blocking ( the last parameter on sendDataOverTCP is set to True,
    which forces a blocking send). It also causes a problem with a
    duplicate data being sent again, we see this on the client side. 
    Most clients seem to handle this but if your client is based off of
    the reference source (osrtspserver) it will fail.  It seems that a
    EAGAIN can still occur even if the data was sent.  I would guess the
    send must have succeed in this case?<br>
    <br>
    So I see two issues:<br>
    1. The blocking call to the second send in sendDataOverTCP to send
    the data after the header can block for significant amount of time
    if the connection is slow. (slowing the entire event loop)<br>
    2. The second send must fail with EAGAIN, but still the data must
    have been sent. <br>
    <br>
    I think send on a non-blocking socket can send paritial and you must
    check to see how much was sent and only send what is left over?<br>
    <br>
    Craig<br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 11/27/2013 12:46 PM, Craig Matsuura
      wrote:<br>
    </div>
    <blockquote cite="mid:52964C0E.6050002@vivint.com" type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      Hi Ross,<br>
      <br>
      I have a question.  Running two live555proxyServers and clients. 
      Using both openRTSP and gstreamer as clients.<br>
      <br>
      Here is my setup.<br>
      <ul>
        <li>live proxy 1 (openRTSP 172.16.10.100) connect to camera</li>
        <li>Client 1 (172.16.10.100) connected to live proxy 1
          (172.16.10.100)</li>
        <li>live proxy 2 (192.168.3.250) connect to live proxy 1</li>
        <li>Client 2 (gstream client 192.168.3.25) connect to live proxy
          2</li>
      </ul>
      <br>
      Both client 1 and client 2 slow down, when client 2 connects.  Is
      there a setting or configuration I can use to solve this problem. 
      slow down is much worse with client 2 is a gst playbin2.  We have
      seen this on other types of clients connecting TCP (as client 2).<br>
      <br>
      We have a configuration where we need a proxy at once source and a
      proxy at a different source.  We want to use the same code base
      from live555.  We initial had different implementations, one based
      on live555 and another based on a different rtsp server, and did
      not have and slow down issues, but had other problems.  <br>
      <br>
      Below are the outputs and calling parameters on the proxies and
      openRTSP (client).<br>
      <br>
      Thanks,.<br>
      Craig<br>
      <br>
      <br>
      Client are connecting via TCP (-t).<br>
      ------------------------------------<br>
      <br>
      192.168.3.250> ./openRTSP -V -t -Q -d 10 
      <a class="moz-txt-link-freetext" href="rtsp://192.168.3.250:8554/Video">rtsp://192.168.3.250:8554/Video</a><br>
      Opened URL <a class="moz-txt-link-rfc2396E" href="rtsp://192.168.3.250:8554/Video">"rtsp://192.168.3.250:8554/Video"</a>, returning a SDP
      description:<br>
      v=0<br>
      o=- 1385580361225980 1 IN IP4 192.168.3.250<br>
      s=LIVE555 Streaming Media v2013.11.26<br>
      i=LIVE555 Streaming Media v2013.11.26<br>
      t=0 0<br>
      a=tool:LIVE555 Streaming Media v2013.11.26<br>
      a=type:broadcast<br>
      a=control:*<br>
      a=range:npt=0-<br>
      a=x-qt-text-nam:LIVE555 Streaming Media v2013.11.26<br>
      a=x-qt-text-inf:LIVE555 Streaming Media v2013.11.26<br>
      m=video 0 RTP/AVP 96<br>
      c=IN IP4 0.0.0.0<br>
      b=AS:50<br>
      a=rtpmap:96 H264/90000<br>
      a=fmtp:96
packetization-mode=1;profile-level-id=64401F;sprop-parameter-sets=J2RAH6wsagFAFumoKDAqAAAH0gAB1MAo,KO4EYsA=<br>
      a=control:track1<br>
      <br>
      Created receiver for "video/H264" subsession (client ports
      39104-39105)<br>
      Setup "video/H264" subsession (client ports 39104-39105)<br>
      Created output file: "video-H264-1"<br>
      Started playing session<br>
      Receiving streamed data (for up to 10.000000 seconds)...<br>
      begin_QOS_statistics<br>
      subsession      video/H264<br>
      num_packets_received    290<br>
      num_packets_lost        0<br>
      elapsed_measurement_time        10.001134<br>
      kBytes_received_total   372.718000<br>
      measurement_sampling_interval_ms        1000<br>
      kbits_per_second_min    0.000000<br>
      kbits_per_second_ave    298.140591<br>
      kbits_per_second_max    1154.382976<br>
      packet_loss_percentage_min      0.000000<br>
      packet_loss_percentage_ave      0.000000<br>
      packet_loss_percentage_max      0.000000<br>
      inter_packet_gap_ms_min 0.002000<br>
      inter_packet_gap_ms_ave 26.072645<br>
      inter_packet_gap_ms_max 2007.246000<br>
      end_QOS_statistics<br>
      <br>
      First live Proxy on pointed to second live proxy (Note
      192.168.3.216 is port forward from the 172.16.10.100)<br>
------------------------------------------------------------------------------------------------------------<br>
      <br>
      192.168.3.250> ./live555ProxyServer.x86 
      <a class="moz-txt-link-freetext" href="rtsp://192.168.3.216/Video">rtsp://192.168.3.216/Video</a><br>
      LIVE555 Proxy Server<br>
              (LIVE555 Streaming Media library version 2013.11.26)<br>
      <br>
      RTSP stream, proxying the stream <a class="moz-txt-link-rfc2396E" href="rtsp://192.168.3.216/Video">"rtsp://192.168.3.216/Video"</a><br>
              Play this stream using the URL:
      <a class="moz-txt-link-freetext" href="rtsp://192.168.3.250:8554/Video">rtsp://192.168.3.250:8554/Video</a><br>
      <br>
      (We use port 8000 for optional RTSP-over-HTTP tunneling.)<br>
      <br>
      <br>
      Second live Proxy pointed to camera to stream<br>
      ---------------------------------------------<br>
      <br>
      root@touchlink-847e405d04f4:~# ./live555ProxyServer -V
      <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101:554/">rtsp://172.16.10.101:554/</a><br>
      live.sdpADDRCONF(NETDEV_CHANGE): eth0: link becomes ready<br>
      <br>
      LIVE555 Proxy Server<br>
              (LIVE555 Streaming Media library version 2013.11.26)<br>
      <br>
      Opening connection to 172.16.10.101, port 554...<br>
      RTSP stream, proxying the stream
      <a class="moz-txt-link-rfc2396E" href="rtsp://172.16.10.101:554/live.sdp">"rtsp://172.16.10.101:554/live.sdp"</a><br>
              Play this stream using the URL: <a class="moz-txt-link-freetext" href="rtsp://172.16.10.100/Video">rtsp://172.16.10.100/Video</a><br>
      <br>
      (We use port 80 for optional RTSP-over-HTTP tunneling.)<br>
      ...remote connection opened<br>
      Sending request: DESCRIBE <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101:554/live.sdp">rtsp://172.16.10.101:554/live.sdp</a>
      RTSP/1.0<br>
      CSeq: 2<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Accept: application/sdp<br>
      <br>
      <br>
      Received 510 new bytes of response data.<br>
      Received a complete DESCRIBE response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 2<br>
      Date: Wed, 27 Nov 2013 12:25:5 GMT<br>
      Content-Base: <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a><br>
      Content-Type: application/sdp<br>
      Content-Length: 348<br>
      <br>
      v=0<br>
      o=RTSP 1385555105 945 IN IP4 0.0.0.0<br>
      s=RTSP server<br>
      c=IN IP4 0.0.0.0<br>
      t=0 0<br>
      a=charset:Shift_JIS<br>
      a=range:npt=0-<br>
      a=control:*<br>
      a=etag:1234567890<br>
      m=video 0 RTP/AVP 98<br>
      b=AS:0<br>
      a=rtpmap:98 H264/90000<br>
      a=control:trackID=1<br>
      a=fmtp:98 packetization-mode=1; profile-level-id=64401f;
      sprop-parameter-sets=J2RAH6wsagFAFumoKDAqAAAH0gAB1MAo,KO4EYsA=<br>
      <br>
      ProxyServerMediaSession[<a class="moz-txt-link-rfc2396E" href="rtsp://172.16.10.101/live.sdp/">"rtsp://172.16.10.101/live.sdp/"</a>] added
      new "ProxyServerMediaSubsession" for RTP/video/H264 track<br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 3<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      <br>
      <br>
      Received 145 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 3<br>
      Date: Wed, 27 Nov 2013 12:25:35 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      ProxyServerMediaSubsession["H264"]::createNewStreamSource(session
      id 0)<br>
              Initiated: ProxyServerMediaSubsession["H264"]<br>
      ProxyServerMediaSubsession["H264"]::createNewRTPSink()<br>
      ProxyServerMediaSubsession["H264"]::closeStreamSource()<br>
      ProxyServerMediaSubsession["H264"]::createNewStreamSource(session
      id 3097014589)<br>
      Sending request: SETUP <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/trackID=1">rtsp://172.16.10.101/live.sdp/trackID=1</a>
      RTSP/1.0<br>
      CSeq: 4<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Transport: RTP/AVP;unicast;client_port=56926-56927<br>
      <br>
      <br>
      ProxyServerMediaSubsession["H264"]::createNewRTPSink()<br>
      Received 169 new bytes of response data.<br>
      Received a complete SETUP response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 4<br>
      Date: Wed, 27 Nov 2013 12:25:43 GMT<br>
      Session: 15618451;timeout=70<br>
      Transport:
      RTP/AVP;unicast;client_port=56926-56927;server_port=5580-5581<br>
      <br>
      <br>
      ProxyRTSPClient[<a class="moz-txt-link-rfc2396E" href="rtsp://172.16.10.101/live.sdp/">"rtsp://172.16.10.101/live.sdp/"</a>]::continueAfterSETUP():

      head codec: H264; numSubsessions 1<br>
              queue:  H264<br>
      Sending request: PLAY <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 5<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 201 new bytes of response data.<br>
      Received a complete PLAY response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 5<br>
      Date: Wed, 27 Nov 2013 12:25:43 GMT<br>
      Session: 15618451;timeout=70<br>
      RTP-Info:
      url=<a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/trackID=1;seq=0;rtptime=0">rtsp://172.16.10.101/live.sdp/trackID=1;seq=0;rtptime=0</a><br>
      Range: npt=0-<br>
      RTCP-Interval: 250<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 6<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 144 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 6<br>
      Date: Wed, 27 Nov 2013 12:26:3 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 7<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 145 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 7<br>
      Date: Wed, 27 Nov 2013 12:26:41 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 8<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 145 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 8<br>
      Date: Wed, 27 Nov 2013 12:27:35 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 9<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 145 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 9<br>
      Date: Wed, 27 Nov 2013 12:28:27 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 10<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 145 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 10<br>
      Date: Wed, 27 Nov 2013 12:29:1 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 11<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 145 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 11<br>
      Date: Wed, 27 Nov 2013 12:30:1 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
      <br>
      Sending request: OPTIONS <a class="moz-txt-link-freetext" href="rtsp://172.16.10.101/live.sdp/">rtsp://172.16.10.101/live.sdp/</a> RTSP/1.0<br>
      CSeq: 12<br>
      User-Agent: ProxyRTSPClient (LIVE555 Streaming Media v2013.11.26)<br>
      Session: 15618451<br>
      <br>
      <br>
      Received 146 new bytes of response data.<br>
      Received a complete OPTIONS response:<br>
      RTSP/1.0 200 OK<br>
      CSeq: 12<br>
      Date: Wed, 27 Nov 2013 12:30:40 GMT<br>
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, GET_PARAMETER,
      SET_PARAMETER, TEARDOWN<br>
      <br>
    </blockquote>
    <br>
  </body>
</html>