<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <pre style="white-space: pre-wrap; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">Thanks for answers.

I'm using <i>EventTrigger</i> to exit the event loop at any point in time by changing the value of the watch variable. And then I use the previously presented code to close the session and free memory. In theory, I should free the memory used by the <i>MPEG2TransportStreamFromESSource</i> variable before closing the session, but in this case, when <i>Medium::close</i> is called to close the session, the application crashes in the <i>RTCPInstance</i> destructor because <i>fSource </i>variable is invalid.

[...]
env->taskScheduler().doEventLoop(&eventLoopVar);

MediaSubsessionIterator iter(*session);
MediaSubsession* subsession;
while ((subsession = iter.next()) != NULL) {
    if (subsession->sink != NULL) {
        Medium::close(subsession->sink);
        subsession->sink = NULL;
    }
}
<b>Medium::close(transportStream);</b>
Medium::close(session);
Medium::close(rtspClient);
env->reclaim();
delete scheduler;
</pre>
    <blockquote type="cite"
      cite="mid:b945da04-281f-1207-f194-b15adb43a946@gosniias.ru">
      <pre style="white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><font color="#808080">“live555HLSProxy” is intended to be run as an application - i.e., in its own process - so that when the application (process) ends, any extra memory that it has allocated is automatically freed.  Is there any reason why you have to embed this code in some other (longer-lasting) application?  I.e., why not continue to run it as its own process?


><i> If I use 'live555HLSProxy.cpp' source code, I can free memory with code:
</i>[…]
But if you insist on embedding the “live555HLSProxy.cpp” code in your own application, then the code that you describe here will probably work.


><i> When is it correct to call Medium::close(transportStream)?
</i>
Anytime after it the stream no longer being read.  I.e., you could do this in the “afterPlaying()” function (which you have presumably already modified to comment out the call to “exit(0);” :-)

Ross Finlayson
Live Networks, Inc.
<a href="http://www.live555.com/">http://www.live555.com/</a></font></pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
С уважением, Андрей Швыркин
Начальник группы "Технологии анализа движения и видеонаблюдения"
ФГУП "ГосНИИАС"
Моб.: +7 903 135-10-63
 
Best regards, Andrey Shvyrkin
Head of group "Technologies of video surveillance"
FGUP "GosNIIAS"
Cell: +7 903 135-10-63</pre>
  </body>
</html>