<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 17/12/12 13:53, Ross Finlayson wrote:
    <blockquote
      cite="mid:5694694F-CA84-4856-9A5F-EA81302D1E5D@live555.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      First, I'll try to look into exactly what's happening.  If there's
      a bug in the supplied LIVE555 code, then I'll try to fix it.<br>
      <br>
      <div apple-content-edited="true">
      </div>
    </blockquote>
    <br>
    Thanks Ross, I appreciate this greatly.<br>
    <br>
    I have done a little further investigation myself and thought I'd
    share it with you in case it helps.<br>
    <br>
    I voided my warranty, so to speak, by adding a printf("."); to
    BasicUDPSource::incomingPacketHandler1() in order to see when the
    source is processing packets.<br>
    <br>
    As expected, no packets are processed until the first client
    connects to the RTSP server, at which time packets are processed at
    an expected rate.<br>
    <br>
    When that client leaves, packets are no longer processed.<br>
    <br>
    When the next client connects, packets seem to be processed, but
    remarkably slower than when the first client was connected.  Here's
    the debug output to illustrate this:<br>
    <br>
    <br>
    <br>
    <blockquote type="cite">"test" stream, from a UDP Transport Stream
      input source<br>
              (IP multicast address 239.200.1.102, port 5500)<br>
      Play this stream using the URL "rtsp://10.2.1.182:8554/test"<br>
      accept()ed connection from 10.201.17.53<br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 121 new
      bytes:OPTIONS rtsp://10.2.1.182:8554/test RTSP/1.0<br>
      CSeq: 2<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "OPTIONS",
      urlPreSuffix "", urlSuffix "test", CSeq "2", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 2<br>
      Date: Mon, Dec 17 2012 20:11:07 GMT<br>
      Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE,
      GET_PARAMETER, SET_PARAMETER<br>
      <br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 147 new
      bytes:DESCRIBE rtsp://10.2.1.182:8554/test RTSP/1.0<br>
      CSeq: 3<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Accept: application/sdp<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "DESCRIBE",
      urlPreSuffix "", urlSuffix "test", CSeq "3", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 3<br>
      Date: Mon, Dec 17 2012 20:11:07 GMT<br>
      Content-Base: rtsp://10.2.1.182:8554/test/<br>
      Content-Type: application/sdp<br>
      Content-Length: 320<br>
      <br>
      v=0<br>
      o=- 1355775062508879 1 IN IP4 10.2.1.182<br>
      s=Session streamed by VPS-UAT<br>
      i=test<br>
      t=0 0<br>
      a=tool:LIVE555 Streaming Media v2012.11.30<br>
      a=type:broadcast<br>
      a=control:*<br>
      a=range:npt=0-<br>
      a=x-qt-text-nam:Session streamed by VPS-UAT<br>
      a=x-qt-text-inf:test<br>
      m=video 0 RTP/AVP 33<br>
      c=IN IP4 0.0.0.0<br>
      b=AS:5000<br>
      a=control:track1<br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 176 new
      bytes:SETUP rtsp://10.2.1.182:8554/test/track1 RTSP/1.0<br>
      CSeq: 4<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Transport: RTP/AVP;unicast;client_port=1612-1613<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "SETUP",
      urlPreSuffix "test", urlSuffix "track1", CSeq "4", Content-Length
      0, with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 4<br>
      Date: Mon, Dec 17 2012 20:11:07 GMT<br>
      Transport:
RTP/AVP;unicast;destination=10.201.17.53;source=10.2.1.182;client_port=1612-1613;server_port=6970-6971<br>
      Session: 2283FFFD<br>
      <br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 157 new
      bytes:PLAY rtsp://10.2.1.182:8554/test/ RTSP/1.0<br>
      CSeq: 5<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Session: 2283FFFD<br>
      Range: npt=0.000-<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "PLAY",
      urlPreSuffix "test", urlSuffix "", CSeq "5", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 5<br>
      Date: Mon, Dec 17 2012 20:11:07 GMT<br>
      Range: npt=0.000-<br>
      Session: 2283FFFD<br>
      RTP-Info:
      url=rtsp://10.2.1.182:8554/test/track1;seq=12753;rtptime=3031997768<br>
      <br>
      ...RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 147
      new bytes:GET_PARAMETER rtsp://10.2.1.182:8554/test/ RTSP/1.0<br>
      CSeq: 6<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Session: 2283FFFD<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName
      "GET_PARAMETER", urlPreSuffix "test", urlSuffix "", CSeq "6",
      Content-Length 0, with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 6<br>
      Date: Mon, Dec 17 2012 20:11:07 GMT<br>
      Session: 2283FFFD<br>
      <br>
      ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................RTSP
      client session (id "2283FFFD", stream name "test"): Liveness
      indication<br>
      .......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................RTSP
      client session (id "2283FFFD", stream name "test"): Liveness
      indication<br>
      .................................................................................................................................................................................................................................................................................................................................................................................................................................................RTSP
      client session (id "2283FFFD", stream name "test"): Liveness
      indication<br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 142 new
      bytes:TEARDOWN rtsp://10.2.1.182:8554/test/ RTSP/1.0<br>
      CSeq: 7<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Session: 2283FFFD<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "TEARDOWN",
      urlPreSuffix "test", urlSuffix "", CSeq "7", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 7<br>
      Date: Mon, Dec 17 2012 20:11:15 GMT<br>
      <br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read -1 new
      bytes (of 10000); terminating connection!<br>
    </blockquote>
    <br>
    <br>
    <br>
    Now, I reconnect that client:<br>
    <br>
    <br>
    <br>
    <blockquote type="cite">accept()ed connection from 10.201.17.53<br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 121 new
      bytes:OPTIONS rtsp://10.2.1.182:8554/test RTSP/1.0<br>
      CSeq: 2<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "OPTIONS",
      urlPreSuffix "", urlSuffix "test", CSeq "2", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 2<br>
      Date: Mon, Dec 17 2012 20:12:40 GMT<br>
      Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE,
      GET_PARAMETER, SET_PARAMETER<br>
      <br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 147 new
      bytes:DESCRIBE rtsp://10.2.1.182:8554/test RTSP/1.0<br>
      CSeq: 3<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Accept: application/sdp<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "DESCRIBE",
      urlPreSuffix "", urlSuffix "test", CSeq "3", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 3<br>
      Date: Mon, Dec 17 2012 20:12:40 GMT<br>
      Content-Base: rtsp://10.2.1.182:8554/test/<br>
      Content-Type: application/sdp<br>
      Content-Length: 320<br>
      <br>
      v=0<br>
      o=- 1355775062508879 1 IN IP4 10.2.1.182<br>
      s=Session streamed by VPS-UAT<br>
      i=test<br>
      t=0 0<br>
      a=tool:LIVE555 Streaming Media v2012.11.30<br>
      a=type:broadcast<br>
      a=control:*<br>
      a=range:npt=0-<br>
      a=x-qt-text-nam:Session streamed by VPS-UAT<br>
      a=x-qt-text-inf:test<br>
      m=video 0 RTP/AVP 33<br>
      c=IN IP4 0.0.0.0<br>
      b=AS:5000<br>
      a=control:track1<br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 176 new
      bytes:SETUP rtsp://10.2.1.182:8554/test/track1 RTSP/1.0<br>
      CSeq: 4<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Transport: RTP/AVP;unicast;client_port=1666-1667<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "SETUP",
      urlPreSuffix "test", urlSuffix "track1", CSeq "4", Content-Length
      0, with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 4<br>
      Date: Mon, Dec 17 2012 20:12:40 GMT<br>
      Transport:
RTP/AVP;unicast;destination=10.201.17.53;source=10.2.1.182;client_port=1666-1667;server_port=6970-6971<br>
      Session: 69932E25<br>
      <br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 157 new
      bytes:PLAY rtsp://10.2.1.182:8554/test/ RTSP/1.0<br>
      CSeq: 5<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Session: 69932E25<br>
      Range: npt=0.000-<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "PLAY",
      urlPreSuffix "test", urlSuffix "", CSeq "5", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 5<br>
      Date: Mon, Dec 17 2012 20:12:40 GMT<br>
      Range: npt=0.000-<br>
      Session: 69932E25<br>
      RTP-Info:
      url=rtsp://10.2.1.182:8554/test/track1;seq=39224;rtptime=2724475800<br>
      <br>
      ..............RTSPClientConnection[0x1ecbed0]::handleRequestBytes()
      read 147 new bytes:GET_PARAMETER rtsp://10.2.1.182:8554/test/
      RTSP/1.0<br>
      CSeq: 6<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Session: 69932E25<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName
      "GET_PARAMETER", urlPreSuffix "test", urlSuffix "", CSeq "6",
      Content-Length 0, with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 6<br>
      Date: Mon, Dec 17 2012 20:12:40 GMT<br>
      Session: 69932E25<br>
      <br>
      ..........................................................RTSP
      client session (id "69932E25", stream name "test"): Liveness
      indication<br>
      .RTSP client session (id "69932E25", stream name "test"): Liveness
      indication<br>
      .RTSP client session (id "69932E25", stream name "test"): Liveness
      indication<br>
      ..RTSP client session (id "69932E25", stream name "test"):
      Liveness indication<br>
      .RTSP client session (id "69932E25", stream name "test"): Liveness
      indication<br>
      .RTSP client session (id "69932E25", stream name "test"): Liveness
      indication<br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read 142 new
      bytes:TEARDOWN rtsp://10.2.1.182:8554/test/ RTSP/1.0<br>
      CSeq: 7<br>
      User-Agent: LibVLC/2.0.4 (LIVE555 Streaming Media v2012.09.13)<br>
      Session: 69932E25<br>
      <br>
      <br>
      parseRTSPRequestString() succeeded, returning cmdName "TEARDOWN",
      urlPreSuffix "test", urlSuffix "", CSeq "7", Content-Length 0,
      with 0 bytes following the message.<br>
      sending response: RTSP/1.0 200 OK<br>
      CSeq: 7<br>
      Date: Mon, Dec 17 2012 20:13:11 GMT<br>
      <br>
      RTSPClientConnection[0x1ecbed0]::handleRequestBytes() read -1 new
      bytes (of 10000); terminating connection!<br>
    </blockquote>
    <br>
    As you can see, the frequency that incomingPacketHandler1() is
    called is much, much less.  What I just noticed in addition to this,
    is that the frequency of it's calling is proportional to the time
    between clients.  That is, if the client is reconnected quickly,
    more packets are processed.  However, the longer you wait between
    clients, the slower they are processed.  To illuminate this further,
    in the example directly above, between clients I was formatting this
    email, probably 60+ seconds between clients.  This next segment I
    will paste, there will be only a few seconds between clients:<br>
    <br>
    <blockquote type="cite">Session: CC070355<br>
      <br>
      .................................................................RTSP
      client session (id "CC070355", stream name "test"): Liveness
      indication<br>
      ....................................................................................................RTSP
      client session (id "CC070355", stream name "test"): Liveness
      indication<br>
      ....................................................................................RTSP
      client session (id "CC070355", stream name "test"): Liveness
      indication<br>
      ...........................................................................RTSPClientConnection[0xe23f20]::handleRequestBytes()
      read 142 new bytes:TEARDOWN rtsp://10.2.1.182:8554/test/ RTSP/1.0</blockquote>
    <br>
    As you can see - much more data is received, but significantly less
    than required!<br>
    <br>
    So, it would seem to me that there's perhaps a timing delta being
    used somewhere that becomes wildly incorrect between client
    connections (supposing the client count becomes 0).<br>
    <br>
    Hope this helps some!<br>
    <br>
    Thanks and regards,<br>
    <br>
    -Tim<br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
  </body>
</html>